PowerGraph Описание PowerGraph
English ENG
Russian РУС
 Программное обеспечение  |  АЦП  |  Загрузка файлов  |  Цены  |  Конференция  |  Контакты 
Главная
Новости*

 ПО «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) - это было бы замечательно и о большем не надо и мечтать.
[Вернуться в "Список тем"] [Создать новую тему]

Новое сообщение по теме «Помогите с Com-ASCII»

 

*Ваше имя:
Email:
*Сообщение:
   

В начало страницы  


Rambler's Top100
SpyLOG
 
 Copyright© DISoft, 2003-2017. All right reserved.