проблема c # протокола ascii - PullRequest
       22

проблема c # протокола ascii

0 голосов
/ 04 декабря 2009

У меня есть программа, которая отправляет команды ASCII на устройство через последовательный порт. Программа является демонстрационной и не делает то, что я хочу.

Я просто пытаюсь заставить устройство отвечать в c # и ничего не получаю обратно. все настройки последовательного порта верны. Я посылаю точно такое же сообщение, что и демонстрационная программа.

//e.g message <STX>ABC<EOT>

byte[] msg = new byte[5];

msg[0] = 0x02;
msg[1] = 0x41;
msg[2] = 0x42;
msg[3] = 0x43;
msg[4] = 0x04;
comport.write(msg, 0,msg.length)

устройство является монитором. Код был только примером. нет пульса, просто ответ на правильное отправленное сообщение или сообщение об ошибке. настройки стандартные 9600-8-N-1. "Скрепка между контактами 2 и 3 (TX и RX)." да, я знаю, что кабель работает, потому что тот же, который используется с программным обеспечением продукта, который работает. и я возвращаюсь, что я отправляю. Я использовал программу виртуального ком, и все кажется в порядке. «6 байтов, но инициализируются только первые 5.» Извините, опечатка.

для свойств SerialPort.DtrEnable и RtsEnable установлено значение true. включены по умолчанию в c #. Я попробовал гипертерминал и не получаю ответ с этим либо. Я отправил \ r и \ n без удачи.

Ответы [ 6 ]

2 голосов
/ 04 декабря 2009

Этот C # учебник по связи через последовательный порт должен помочь. Я не уверен, существует ли подходящая внутренняя каста между Hex и Byte через присваивание в C #. Это может быть источником вашей проблемы.

Устройство Heartbeat

Отправляет ли устройство ответ DC2 или DLE (сердцебиение)? Если это так, попробуйте открыть COM-порт в Hyperterminal, используя базовые настройки 9600-8-N-1, и посмотрите, получите ли вы что-нибудь. Есть ли какие-либо команды STX, SYN, ETX, отправленные обратно при попытке отправить команду? Я не уверен в реализации набора команд для оборудования, с которым вы пытаетесь установить связь.

Проверка работы COM-порта

Вы проверили, правильно ли работает ваш COM-порт? Вы можете создать петлю, вставив скрепку между контактами 2 и 3 (TX и RX). Это зафиксирует ваш COM-порт, и в Hyper-терминале вы сможете открыть этот COM-порт и ввести его. Персонажи отзовутся обратно.

Вы также можете использовать программное обеспечение под названием com0com для создания виртуальных COM-портов для проверки того, что вы отправляете, прежде чем вы действительно отправите его.

Предоставляет пары виртуальных COM-портов, которые связаны через нуль-модемное соединение. Затем вы можете использовать ваше любимое приложение терминала или что угодно, чтобы отправлять данные на один COM-порт и получать с другого

Без более конкретной информации мы будем хвататься за соломинку.

1 голос
/ 04 декабря 2009

Самая распространенная ошибка - забыть включить аппаратные сигналы рукопожатия. Устройство не отправляет ничего, если считает, что хост выключен. Убедитесь, что для свойств SerialPort.DtrEnable и RtsEnable установлено значение true.

Как упоминалось ранее, исправьте размер массива. Хотя это, вероятно, не поможет, символ STX гарантирует, что мусор выбрасывается.

Проверьте, работает ли базовое оборудование с апплетом Windows Hyperterminal. Вы можете отправить сообщение, которое вы пытаетесь передать, набрав Ctrl + B, ABC, Ctrl + D

1 голос
/ 04 декабря 2009

Вы выделяете и отправляете 6 байтов, но инициализируете только первые 5.

Кроме того, согласно тому, что вы пишете, вы делаете все правильно, точно так же, как демонстрационная программа. Правильно? Тогда я вижу только одно решение: устройство тянет вашу ногу!

Серьезно: если одна программа работает, а ваша - нет, ДОЛЖНА быть некоторая разница.

0 голосов
/ 06 декабря 2009

устройство является монитором. Код был только примером. нет пульса, просто ответ на правильное отправленное сообщение или сообщение об ошибке. настройки стандартные 9600-8-N-1. "Скрепка между контактами 2 и 3 (TX и RX)." да, я знаю, что кабель работает, потому что тот же, который используется с программным обеспечением продукта, который работает. и я возвращаюсь, что я отправляю. Я использовал программу виртуального ком, и все кажется в порядке. «6 байтов, но инициализируются только первые 5.» Извините, опечатка.

для свойств SerialPort.DtrEnable и RtsEnable установлено значение true. включены по умолчанию в c #. Я попробовал гипертерминал и не получаю ответ с этим либо. Я отправил \ r и \ n без удачи.

0 голосов
/ 04 декабря 2009

Поскольку вы работаете с ASCII, другая проблема может заключаться в том, что вы не отправляете правильный символ завершения строки. Некоторые устройства ожидают \r, а другие \n. Убедитесь, что вы устанавливаете это правильно.

0 голосов
/ 04 декабря 2009

Как и предполагали другие, неплохо бы проверить, что отправляется и получается с помощью какого-либо терминального программного обеспечения. Я имел успех с " realterm " - у него есть хорошие представления ascii или двоичные / шестнадцатеричные представления.

...