|
|
|
*
|
ПО «PowerGraph»
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Поддержка
|
|
|
|
|
|
|
|
|
|
|
Аппаратура
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Информация
|
|
|
|
|
|
Телефон:
+7 (495) 961-47-30
|
E-mail:
soft@powergraph.ru
|
|
Конференция
Тема: «Помогите с COM-ASCII»
|
[Вернуться в "Список тем"]
[Создать новую тему]
|
Сергей
06.03.2017 12:37
|
Возникла необходимость принимать данные с Com порта и регистрировать. Благодаря тому, что у нас HASP-HL ключ - доступен ввод с Com-ASCII устройства. PowerGraph 3.3 Вроде бы все должно просто работать. Прибор посылает в порт данные + символом переноса строки (13) PowerGraph видит Com-ASCII подключается, но график - прямая линия независимо от изменения данных. Только одно значение 16,383. Если нажать "сервис"-"настройка Com-ASCII" - маленькое окошечко с надписью Настройка Com-ASCII (v3.2.1) Port: Com1 а ниже - измеряемое значение, причем оно отображается правильно и меняется, в зависимости от сигнала. Но ни при регистрации, ни в "сервис"- "входной усилитель" не отображается ничего, кроме 16,384. Сделал тестовую программу в прибор - она выдает принудительно значение 123 + символом переноса строки (13) Монитор порта принимает 31 32 33 0D 31 32 33 0D ... "настройка Com-ASCII" показывает 123, а регистроция - 16,384..... Не представляю, где искать ((( |
Сергей
06.03.2017 13:19
|
на всякий случай обновил PowerGraph до 3.3.9 ничего не изменилось. |
Дмитрий (PG)
06.03.2017 19:04
|
Видимо у Вас установлен диапазон измерения +-10, поэтому сигнал обрезается по верхнему значению разрядной сетки. Установите в канале диапазон +-1000 или +-100. Каков диапазон значений, посылаемых вашим прибором в COM-порт? |
Сергей
06.03.2017 22:18
|
максимальный предел устанавливал - это ничего не меняет. Я же писал, что сделал тестовую программу в прибор, которая непрерывно посылает в порт значение 123 + символом переноса строки (13) Монитор порта принимает 123 (в hex 31 32 33 0D 31 32 33 0D .).. "настройка Com-ASCII" показывает 123, а регистроция - 16,384..... |
Сергей
06.03.2017 23:50
|
никак не пойму, отчего, когда я нажимаю "обновить" - дублируется последнее сообщение ?? |
Сергей
07.03.2017 12:21
|
одну проблему вычислил - максимальное число, отображаемое при регистрации 16384 В описании Com-ASCII указано "16 бит" насколько я понимаю, это int (-32768 to 32767) или unsigned int (0 to 65535) так какую максимальную величину можно передать через Com-ASCII ?? |
Сергей
07.03.2017 14:40
|
У меня сейчас крыша поедет... Соединил 2 компьютера кабелем. проверяю терминалом - что пишу - то и отображается в окне другого терминала. (набираю в одном терминале)=(отображается в другом) 0=0 100=100 0=0 -100=-100 0=0 На втором компьютере запускаю PowerGraph вместо терминала (набираю в одном терминале)=(отображается в PowerGraph) 0=0 100=99.8 0=0.2 -100=-99.8 0=-0.2 1=0.8 0=0.2 1600=1599.8 1700=1638.1 0=0.2 HELP!! |
Сергей
07.03.2017 15:10
|
еще интереснее (набираю в одном терминале)=(отображается в PowerGraph) 0=0 1=0.8 1.2=1 10=9.8 10.2=10 100=99.8 1000=999.8 1600=1599.8 1700=1638.1 0=0.2 1=0.8 То есть, чтоб использовать всю разрядность PowerGraph, мне нужно, у себя в приборе, разделить измеряемую величину на 10 и передавать как float с одним знаком после запятой ?? Это при диапазоне +/-1000 при диапазоне +/-100 - соответственно разделить измеряемую величину на 100 и передавать как float с двумя знаками после запятой ?? |
Дмитрий (PG)
09.03.2017 10:26
|
Какие значения Вы пытаетесь передать через COM-порт? Что измеряет ваше устройство? В каком диапазоне значений осуществляются измерения реальной физической величины? Передавайте через COM-порт реальные значения в физических единицах измерения в формате float. Количество десятичных знаков может быть любым. Драйвер будет сам дискретизировать эти значения в формат 16-битного знакового целового (от -32768 до 32767) в соответствии с выбранным диапазоном. Если Вы пытаетесь отправить через COM-порт дискретные значения, выдаваемые АЦП, то для данного драйвера это не подходит, так как программа отображает сигналы в реальных физических единицах. |
Сергей
09.03.2017 16:59
|
>Какие значения Вы пытаетесь передать через COM-порт? Датчик у меня выдает 24битный код. В описании Com-ASCII указано, что он принимает 16 битный код. Значит я сдвигом >>8 привожу к 16 битному. Но этого оказалось мало. 16 бит это int (-32768 to 32767) (8000 до 7FFF) или unsigned int (0 to 65535) Но, оказывается, надо float. > Передавайте через COM-порт реальные значения в физических единицах измерения А вот этого я совершенно не понимаю. Никак. Через COM-порт передается последовательность ASCII символов. Физическое ли значение, или код - все равно это будет последовательность ASCII символов Предположим, переменная, которую я хочу передать, имеет значение 15867 (int) n = 15867; // Это входит в пределы 16 бит??) print (n) выдаст в порт 31 35 38 36 37 (добавим 0D) Терминал, подключенный к этому порту отобразит 15867 А PowerGraph покажет 1638.1, если выставить диапазон +/-1000 И только, если сделать преобразование int во float и разделить на 10, тогда PowerGraph отобразил 1586.7 |
Дмитрий (PG)
09.03.2017 18:16
|
Вы неправильно понимаете ситуацию. Драйвер COM-ASCII рассматривает данные, передаваемые по COM-порту, как аналоговый сигнал, который необходимо оцифровать. В таком режиме работает большое количество измерительных приборов - высылают в COM-порт результаты измерения (но не оцифровки) физических величин в виде текстовых значений. Фактически драйвер COM-ASCII является программным АЦП, который сначала преобразует текст в числовое значение (float), а затем его оцифровывает - преобразует в 16-битный int с определенными масштабными коэффициентами. Как я понял, Вы пытаетесь сразу отправить в COM-порт цифровой код, полученный после аппаратной оцифровки сигнала вашим датчиком, но это не соответствует принципу работы драйвера COM-ASCII, разработанному для других целей. Что измеряет ваш 24-битный датчик? Какую физическую величину - вольты, амперы, омы, градусы, килограмы и т.д.? Откуда по вашему драйвер COM-ASCII должен взять масштабные коэффициенты для вашего 24-битного кода? Для устройств, которые сразу передают данные в цифровом коде, мы разрабатываем индивидуальные PowerGraph-драйверы. Но для этого необходимо знать формат передаваемых значений и масштабные коэффициенты преобразования цифрового кода в реальные значения измеряемой физической величины. |
Сергей
09.03.2017 20:51
|
>большое количество измерительных приборов - высылают в COM-порт результаты измерения (но не оцифровки) физических величин в виде текстовых значений. Вы это всерьёз? это не шутка?? Вы можете привести пример прибора, который, не оцифровывая сигнал (я предполагаю, что под "оцифровкой" предполагается Аналогово-Цифровое преобразование?), передает его в СОМ-порт?? Последний аналоговый прибор, для измерения напряжения (или тока), который я держал в руках - это стрелочный тестер. ВСЕ другие (даже китайский тестер)- вначале оцифровывают сигнал, потом отображают или передают его. >Что измеряет ваш 24-битный датчик? ЕОД - единицы относительной деформации (тензометрия), проценты, вернее ppm (от англ. parts per million) масштабные коэффициенты я введу в "настройка усилителя" при калибровке. >это не соответствует принципу работы драйвера COM-ASCII Так опишите этот принцип работы, чтоб не было путаницы. Чтоб этим драйвером можно было пользоваться, а не тратить 2 рабочих дня на reverse engineering. |
Сергей
09.03.2017 21:05
|
> но это не соответствует принципу работы драйвера COM-ASCII, разработанному для других целей. Но Вы же писали совершенно другое: >Дмитрий (PG) 27.01.2013 10:19 В PowerGraph добавлен новый универсальный драйвер COM-ASCII, позволяющий регистрировать данные, поступающие по COM порту в текстовом формате. --- Совершенно верно - драйвер COM-ASCII позволяет, при помощи PowerGraph РЕГИСТРИРОВАТЬ данные.
|
Дмитрий (PG)
10.03.2017 09:39
|
Бессмысленная дисскуссия, так как Вы рассуждаете только с позиции разработки собственного специфического прибора без учета всего многообразия существующих устройств и протоколов. Единственным универсальным форматом данных является текстовый формат, содержащий численные значения измеряемой величины. Цифровой код АЦП не является универсальным форматом данных, так как требует дополнительной информации о разрядности и масштабных коэффициентах. Для передачи цифрового кода используются специфические бинарные протоколы, в которых эта информация предопределена. Зачем преобразовывать цифровой код в последовательность текствых символов, если можно сразу передать его в числовом формате (int или др.)? Дальнейшее обсуждение по этому вопросу считаю бесперспективным. |
Сергей
10.03.2017 19:19
|
>Бессмысленная дискуссия, Дискуссия действительно бессмысленная, потому, как я обратился за помощью, с просьбой разъяснить нюансы работы драйвера COM-ASCII, а вместо конкретного ответа - получил бессмысленную дискуссию. >Единственным универсальным форматом данных является текстовый формат, содержащий численные значения измеряемой величины. ДА! Именно так! Именно в этом ценность драйвера COM-ASCII !! Включив его в список устройств, поддерживаемых PowerGraph, Вы сделали PowerGraph наиболее удобной программой регистрации и отображения данных для всех, кто разрабатывает свои измерительные приборы на уровне микроконторллеров. Единственное, чего не хватало - подробного описания протокола COM-ASCII. Теперь я знаю (к сожалению методом reverse engineering, а не по Вашей информации), что COM-ASCII воспринимает значения от - 1638.1 до 1638.1 при выборе диапазона +/- 1000 Чтоб получить отображение PowerGraph измеряемой величины через драйвер COM-ASCII, мне достаточно код АЦП (в моем случае unsigned long) обрезать сдвигом до 15 бит, преобразовать во float и разделить на 10.0 Масштабирование до физической величины я могу средствами PowerGraph в "настройка усилителя" при калибровке. Теперь данные с моего прибора корректно отображаются на экране и регистрируются. Также теперь я могу регистрировать с помощью PowerGraph данные с приборов UPM и KWS фирмы HBM |
Дмитрий (PG)
11.03.2017 16:06
|
1. В описании драйвера COM-ASCII указаны диапазоны регистрируемых значений. Очевидно, что для диапазона +/-1000 подразумеваются допустимые значения от -1000 до +1000 (с некотрым запасом). Что тут еще надо разъяснять, кроме самого понятия "диапазон"? Для драйвера COM-ASCII не подразумевается получение в текстовом формате кодов АЦП и использование их как таковых (int), а предполагается получение значений, выраженных в реальных физических едницах (float), которые будут отображаться в программе. Экспериментальным путем Вы выяснили только локальное значение цены МЗР для определенного диапазона, но полагаться на него не стоит, так как в следующих версиях драйвера мы можем поменять цену МЗР или изменить диапазоны. Пока писал понял, что наше обсуждение не бесполезно, так как рождает новые идеи. Спецально для разработчиков аппаратуры в драйвер COM-ASCII мы можем добавить дополнительные "технические" диапазоны, при выборе которых текстовые значения, передаваемые по COM-порту будут рассматриваться как коды АЦП. Масштабные коэффициенты для преобразования этих кодов АЦП в реальные физические единицы тогда действительно придется вводить вручную в настройках каналов. 2. Но сейчас вы делаете двойную лишнюю работу - сначала в микроконтроллере масштабируете цифровой код АЦП в промежуточное дробное значение, а затем еще и в программе масштабируете это промежуточное значение в физические единицы. Достаточно один раз в вашем микроконтроллере промасштабировать цифровой код АЦП в реальные физические единицы и высылать их в COM-порт. При этом в программе не придется дополнительно проводить калибровку и многократно вводить масштабные коэффициенты при смене настроек каналов. |
Сергей
11.03.2017 21:12
|
>самого понятия "диапазон"? То, что данные надо передавать в формате float, об этом в описании ни слова. То, что в описании Com-ASCII указано "16 бит", но это не следует воспринимать буквально (-32768 to 32767), в действительности же диапазон значений -1638.1 до 1638.1 или - 163.81 до 163.81 и т.д >Экспериментальным путем Вы выяснили только локальное значение цены МЗР для определенного диапазона, но полагаться на него не стоит, так как в следующих версиях драйвера мы можем поменять цену МЗР или изменить диапазоны. И Вы об этих изменениях известите пользователей, или опять надо будет играть в угадайку??? Я совершенно не понимаю Вашей скрытности в описании драйвера... > Достаточно один раз в вашем микроконтроллере промасштабировать цифровой код АЦП в реальные физические единицы и высылать их в COM-порт. Да, именно это я и хотел. Именно это и попытался сделать. реальные физические единицы, в моем конкретном случае - ЕОД -20000 до + 20000 ЕОД АЦП 24 битное, смещением на 8 разрядов я получаю 16 бит и посылаю в порт. А COM-ASCII эти значения не пропускает,.. Дополнительно пришлось добавит всего пару строк int data; float pg_data; pg_data= (float)data/20.0; Serial.print(pg_data,1); Serial.write(13); Да, это требует дополнительных ресурсов, особенно деление (может, кто из присутствующих программистов подскажет более рациональное решение), но это работает. >Специльно для разработчиков аппаратуры в драйвер COM-ASCII мы можем добавить дополнительные "технические" диапазоны, при выборе которых текстовые значения, передаваемые по COM-порту будут рассматриваться как коды АЦП Может кому это и будет полезно, не знаю (ацп множество и разных), но, если бы Вы сделали "технический диапазон", который просто бы воспринимал 16 битное число (-32768 to 32767) - это было бы замечательно и о большем не надо и мечтать. |
[Вернуться в "Список тем"]
[Создать новую тему]
|
|
|
В начало страницы
|
|