powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SerialProt и Терминал
9 сообщений из 9, страница 1 из 1
SerialProt и Терминал
    #38219541
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, вопрос больше для людей которые работали ли с ком-портом либо приложением Terminal

Работаю с COM-порт. Пример тут
Есть у меня "черный ящик", если его замыкать на прием - то он возвращает то же что ему и посылаешь, т.е в
serialPort.WriteLine("L;13;12;12;13;15;#013")
в потоке чтения я считываю эту же строку через serialPort.ReadLine();

Но в устройстве есть функция ответа на запрос и вот тут мой код(пример из мсдн) не срабатывает, т.е строку я передаю, но в ответ ничего не получаю. При этом если подключить программу Terminal, настроить те же параметры(Stop bits, handshake и т.д) и передать ту же строку "L;13;12;12;13;15;#013" то на выходе я получаю от устройства ответ ON;01;02;02;01;05;NULL;OK;00.

Подскажите пожалуйста что такого в терминале реализовано, чего нет в моем коде? Буду весьма благодарен.
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219706
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDN:
SerialPort.WriteLine - Записывает указанную строку и значение NewLine в выходной буфер.


1, Попробуйте значению NewLine у порта присвоить "".
2. Попробуйте использовать метод Write вместо WriteLine, предварительно перегнав вашу строку в массив байт
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219707
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп. Возможно, терминал интерпретирует #013 как байт 0D - возврат каретки, а не посылает набор байт <#> 0x30 0x31 0x33. Попробуйте вместо
serialPort.WriteLine("L;13;12;12;13;15;#013")

послать
serialPort.WriteLine("L;13;12;12;13;15;\r")
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219784
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisСтоп. Возможно, терминал интерпретирует #013 как байт 0D - возврат каретки, а не посылает набор байт <#> 0x30 0x31 0x33. Попробуйте вместо
serialPort.WriteLine("L;13;12;12;13;15;#013")

послать
serialPort.WriteLine("L;13;12;12;13;15;\r")
WriteLine - добавляет в конец соответствующие коды возврата/перехода
Либо не пиши в конце строки эти коды, либо используй просто Write(...
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219887
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже так думал ребят, просто инженер устройства вшил в микроконтроллер именно #013 как окончание сообщения, я если честно даже не знаю откуда он взял этот символ - по-моему С++.

я пробовал и
serialPort.WriteLine(string.Format("{0}{1}", "L;13;12;12;13;15", serialPort.newLine))
и
serialPort.Write(string.Format("{0}{1}", "L;13;12;12;13;15", serialPort.newLine))

и с \n и с \r и \r\n пробовал и прочее...

Причем в сети много примеров работы с портом на C# и ни один не может получить ответ. При этом 3 исходника на Vicual C++ отправляют и нормально получают ответ. Вот думаю может дело в разнице хранения строк в памити и обращения к ним?
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219934
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно пробовали SerialPort.Write ?

Тогда установите какой-нибудь listener com-порта (например advanced serial port monitor) и сравните в байтовом виде, что посылаете вы, и что посылает терминал. Таких чудес не бывает
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38219967
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

гранд мерси! Всем остальным тоже спасибо, в ближайшее время попробую - отпишу.
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38221093
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

Еще раз спасибо большое! Протрассировал терминал, он в конце добавлял 0x0D(в десятичном виде), добавил, все получил. Погуглил по идее 0D это и есть (13 - вовзрат каретки), но почему-то \r не работает. Вообще в строковом виде не работает, приходится через буфер байт - если это кому-то интересно )
...
Рейтинг: 0 / 0
SerialProt и Терминал
    #38221125
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще в строковом виде не работает, приходится через буфер байт - если это кому-то интересно )


Сам наступал на эти грабли. Массив байт - оно как-то надежнее.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / SerialProt и Терминал
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]