PDA

Просмотр полной версии : Непонятный глюк при работе rs232 ПЛК304



nestor
29.08.2012, 18:39
Господа знатоки, помогите разобраться в ситуации. Для разработки системы сделал тестовое устройство на AVR. Из ПЛК304 по RS-232 посылаю данные, посылка состоит из четырех байтов: 1-адрес, 2-номер посылки, 3 и 4 - контрольная сумма. Устройство принимает посылку, если контрольная сумма совпала и адрес принадлежит ему, то устройство посылает 44 байта: первые два те же, затем 40 байт инфы, для теста это числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 и так до 40 в 16й системе (то есть последнее 16#40)? последние 2 байта - контрольная сумма. В итоге вроде бы всё работает правильно, НО если номер посылки 0, то в ответ вместо него приходит 16#C0. Проверял на компе - устройство отвечает правильно. Какие варианты?

PS: проверил только что - с компа из терминала те же самые данные, что и от устройства, принимаются корректно.

nestor
29.08.2012, 21:27
Так так так, кое что проясняется, только не пойму что) В ответной посылке в информационных байтах не было нулей, я заменил некоторые байты на нули, и как вы уже догадались - вместо них принимается 16#C0, хотя контрольная сумма, повторюсь, вычисляется верно (подоздреваю, что если бы она содержала нули, то они также заменились бы на С0). Мистика или этому есть разумное объяснение?

capzap
30.08.2012, 07:14
т.е. слейв некоторое самодельное устройство и от него приходят не нули.
Логичнее всего использовать эмулятор модбас слейва для ПК, чтоб убедиться что виноват в такой проблеме ПЛК а не Ваш слейв

nestor
30.08.2012, 07:34
я не писал, что протокол модбас. Так что проверить невозможно. А терминал то чем не устраивает? по отдельности устройство и плк работают.

capzap
30.08.2012, 07:59
в модбасе в посылках тоже присутствуют нули, поэтому если это виноват ПЛК должен наблюдаться тот же эффект, если это внешнее устройство тогда надо им заниматься, но судя потому что приходящяя контрольная сумма совпадает с проверкой на плк, пакеты неправильно формирует слейв

nestor
30.08.2012, 08:07
наверное Вы меня не так поняли - ПЛК считает контрольную сумму от принятых байт, среди которых нет нулей, и эта контрольная сумма не свпадает с той, которую отсылает устройство (а её он отсылает правильно). Насчет эмулятора модбас - и правда, не подумал, что нули там есть, проверю конечно, только наверное смысле нет, как я уже говорил - устройства отдельно работают прекрасно, в терминалах проверял, нули на контроллер приходили. Кстати в ПЛК110 такого не наблюдалось.

Малышев Олег
30.08.2012, 11:09
скорее всего вы формируете строку - не массив байт и используете функцию len. В кодесис конец строки - как в "C" - символ с кодом 0. Скорее всего получается длина строки 0 - и посылка не правильная.

nestor
30.08.2012, 15:57
что то подобное я читал, попробую копнуть в этом направлении

nestor
30.08.2012, 20:45
в чем же тогда отличие 304го от 110го? как я ссказал - со 110 нет проблем

Малышев Олег
31.08.2012, 13:03
Уточните пожалуйста, какой у Вас ПЛК - PLC304 или PLC304M01?

nestor
01.09.2012, 14:44
На корпусе не нашел маркировки М01, документов с собой к сожалению нет. Где то на форуме встречал что НЕ на М01 не работает библиотека SysExec, но у меня она рабоатет. Может дело в прошивке?

PS: немного поправил программу в своем устройстве, теперь она отсылает числа от 0 до FF, выяснил что принимает вместо 0 - С0, вместо 80 - С0, вместо FF - 0. Как то так.

nestor
01.09.2012, 20:34
Проблема решена, не знаю правда как объяснить логически и поэтому хотел бы знать))) Связь осуществлял на скорости 9600, полагая тем самым снизить ошибки, а оказалось наоборот - стоило поднять скорость до 19200, как всё нормализовалось.

Малышев Олег
03.09.2012, 19:31
На обоих SysExec работает. М01 отличается наличие MicroSD разъема.

Малышев Олег
03.09.2012, 19:34
На корпусе не нашел маркировки М01, документов с собой к сожалению нет. Где то на форуме встречал что НЕ на М01 не работает библиотека SysExec, но у меня она рабоатет. Может дело в прошивке?

PS: немного поправил программу в своем устройстве, теперь она отсылает числа от 0 до FF, выяснил что принимает вместо 0 - С0, вместо 80 - С0, вместо FF - 0. Как то так.

Стоп битов сколько используете? Четность есть?

nestor
09.09.2012, 16:33
8-N-1. Первым делом пробовал менять эти натройки, но не помогло. Подозрение все же не на ОВЕН, а на свое устройство, так как сейчас появились новые проблемы, и овен, и терминал ведут себя одинаково, скорее всего надо искать глюк в своей проге.

capzap
09.09.2012, 16:39
у меня были такие проблемы с модемом, когда скорости на обоих устройствах различались в ответе приходил "мусор" тоже с определенной закономерностью

nestor
09.09.2012, 19:42
Но скорость то одинаковая.