|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.11.2020, 03:38 | #1 |
Новичок
Джуниор
Регистрация: 02.11.2020
Сообщений: 4
|
SerialPorts
Здравствуйте!
Есть термометр, к нему идет описание, что он работает по простому бинарному протоколу, нужно отослать 01hex и он ответит двумя байтами температуры. По коду ниже я получаю ответ "7 8 63 63 35 40". В десятичном формате, потому что температура формируется из ответа таким образом (byte1*256 + byte2 - 1000) / 10. Проверяя термометр меняются последние два байта, подскажите пожалуйста, как правильно провести парсинг, чтобы получить правильное значение. Код:
Заранее спасибо! |
02.11.2020, 10:56 | #2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
|
02.11.2020, 12:24 | #3 |
Новичок
Джуниор
Регистрация: 02.11.2020
Сообщений: 4
|
Serial interface parameters
Baud rate: 9600…115200, set by user (factory default: 115200) Data bits: 8 Parity: none Stop bits: 1 Flow control: off Protocol The protocol of the optris CT/ CTlaser/ CTvideo is a binary protocol. Checksum is needed for set commands but not for read commands. The protocol has no additional overhead with CR, LR or ACK bytes. This makes the communication fast. To get the current object temperature the user must send a simple 01hex byte and the CT/ CTlaser/ CTvideo will respond with the two byte temperature. To get the temperature as a floating value subtract 1000 and divide by 10. Checksum’s If the device is setup to use checksums any SET command must have a checksum suffix. The checksum can be switched off with command AD. After every “Power on” the device will expect the checksum again. The checksum byte is build by the arithmetical XOR of all command bytes except of the address prefix. To switch off the checksums with the SET command AD you must send the checksum. To switch on the checksums with the SET command AD you must not send the checksum. Комманды: CSlaser/ CSvideo Commands Decimal HEX Binary/ ASCII Command Data Answer Result Unit 1 0x01 binary READ Temp - Target no byte1 byte2 = (byte1 x 256 + byte2 - 1000) / 10 °C 2 0x02 binary READ Temp - Head no byte1 byte2 = (byte1 x 256 + byte2 - 1000) / 10 °C 3 0x03 binary READ current Temp - Target no byte1 byte2 = (byte1 x 256 + byte2 - 1000) / 10 °C 4 0x04 binary READ Emissivity no byte1 byte2 = (byte1 x 256 + byte2) / 1000 5 0x05 binary READ Transmission no byte1 byte2 = (byte1 x 256 + byte2) / 1000 9 0x09 binary READ Processor Temperature no byte1 = (byte1 x 256 + byte2 - 1000) / 10 14 0x0E binary READ Serial number no byte1 byte2 byte3 = byte1 x 65536 + byte2 x 256 + byte3 15 0x0F binary READ FW Rev. no byte1 byte2 = byte1 x 256 + byte2 16 0x10 binary READ Laser status no byte1 0 = off/ 1 = on 17 0x11 binary READ Emissivity switch setting no HEX value (e.g. 0x58) = Switch setting (e.g. SW1=5/ SW2=8 -> Eps. = 0,58) 129 0x81 binary SET DAC mA byte1 byte1 byte 1= mA x 10 (z.B. 4mA = 4 x 10=40) °C 130 0x82 binary RESET of DAC mA output 132 0x84 binary SET Emissivity byte1 byte2 byte1 byte2 = (byte1 x 256 + byte2) / 1000 133 0x85 binary SET Transmission byte1 byte2 byte1 byte2 = (byte1 x 256 + byte2) / 1000 144 0x90 binary SET Laser byte1 byte1 0 = off/ 1 = on Temperature calculation at CSlaser hs: (byte1 x 256 + byte2 - 10000) / 100 EXAMPLES (all bytes in HEX) Readout of object temperature Send: 01 Command for readout of object temperature Receive: 04 D3 Object temperature in tenth degree + 1000 04 D3 = dec. 1235 1235 - 1000 = 235 235 / 10 = 23,5 °C Readout of object temperature (at hs version) Send: 01 Command for readout of object temperature Receive: 30 3E Object temperature in hundredth degree + 10000 30 3E = dec. 12350 12350 - 10000 = 2350 2350 / 100 = 23.50 °C Set of emissivity Send: 84 03 B6 03B6 = dec. 950 Receive: 03 B6 950 / 1000 = 0,950 |
02.11.2020, 14:07 | #4 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
А зачем Вы пишете в порт \r\n ?
По доке нужно писать только \x01 Я ещё покопаю - откуда взялось 6 байт ответа То есть на текущий момент непонятно: 1) что именно ушло в порт 2) какие байты ответа надо рассматривать. Попробуйте убрать лишнюю запись, посмотрим, что ответит устройство Последний раз редактировалось Black Fregat; 02.11.2020 в 14:13. |
03.11.2020, 08:19 | #5 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Почему не прикладываете модель термометра то??
Вроде код то элементарный: На картинке тестовый пример. А ваш код получения данных будет таким: Код:
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 03.11.2020 в 08:27. |
03.11.2020, 14:19 | #6 | |
Новичок
Джуниор
Регистрация: 02.11.2020
Сообщений: 4
|
Цитата:
По сути да, нужна простая форма с текстовым окном, в котором актуальная температура. Я не очень понимаю в какую часть кода надо вставить этот отрывок |
|
03.11.2020, 18:01 | #7 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
У вас проект какой то слишком уж запутанный. Столько всего лишнего что я так с ходу не соображу куда вам это вставить.
Но как простой вариант - сделать кнопку. По нажатию на нее в обработчике и вставьте этот код. Разве что нужно будет компорт открыть. а потом закрыть. Если надо чтобы постоянно работало то вначале работы программы откройте порт и в какой нибуть таймере вставьте этот код. он и будет выводить данные на вашу форму.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
03.11.2020, 18:58 | #8 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вы можете,
Уберите запись "\r\n", поставьте вместо этого запись "\x01" И выложите ответ от устройства |
04.11.2020, 19:33 | #9 | |
Новичок
Джуниор
Регистрация: 02.11.2020
Сообщений: 4
|
Цитата:
Вообщем я забил, буду мониторить на дисплейчике( Извиняюсь что не отвечал. "А зачем Вы пишете в порт \r\n ? По доке нужно писать только \x01" А что это вообще? Последний раз редактировалось Kalculon; 04.11.2020 в 19:34. Причина: невнимательность |
|
04.11.2020, 22:00 | #10 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Инверсия байтов поможет скорее всего
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |