Ошибка RS232 с 0x0A и 0x0D при отправке сообщения - PullRequest
0 голосов
/ 29 августа 2018

Я запускаю код, который составляет сообщение и отправляет его по шине RS232 на устройство.

У меня возникают проблемы, когда в сообщении есть 0A (новая строка) или 0D (возврат каретки) (или оба) в сообщении.

Читающая сторона говорит мне, что не понимает сообщения (отправляя мне ответ NAK). Я пришел к выводу, что проблема с этими двумя символами.

есть:

022620255846060A00003003
022620255946060D00003703

Любые мысли о том, как я могу отправить ту же информацию, не меняя 0A или 0D?

Код, который я использую для отправки сообщения:

my $stt = pack 'H*',$msg;
$ob_w->write($stt);

равно $ msg, равному одному из приведенных выше кодов, а $ ob_w - сам порт.

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

В этом случае это была проблема, связанная с настройкой последовательного порта.

Изменяя с

$ob_w->stty_icrnl (1);
$ob_w->stty_ocrnl (1);
$ob_w->stty_onlcr (1);
$ob_w->stty_opost (1);

до:

$ob_w->stty_icrnl (0);
$ob_w->stty_ocrnl (0);
$ob_w->stty_onlcr (0);
$ob_w->stty_opost (0);

исправит сообщение. Некоторые из заказов сверху меняли 0x0A и 0x0D на 0x0A0D, поэтому в данном конкретном случае принимающая машина вычисляет контрольную сумму и отбрасывает сообщение, поскольку полученная и сгенерированная контрольная сумма не совпадает.

0 голосов
/ 29 августа 2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...