Просмотр полной версии : Непонятный глюк при работе rs232 ПЛК304
Господа знатоки, помогите разобраться в ситуации. Для разработки системы сделал тестовое устройство на 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: проверил только что - с компа из терминала те же самые данные, что и от устройства, принимаются корректно.
Так так так, кое что проясняется, только не пойму что) В ответной посылке в информационных байтах не было нулей, я заменил некоторые байты на нули, и как вы уже догадались - вместо них принимается 16#C0, хотя контрольная сумма, повторюсь, вычисляется верно (подоздреваю, что если бы она содержала нули, то они также заменились бы на С0). Мистика или этому есть разумное объяснение?
т.е. слейв некоторое самодельное устройство и от него приходят не нули.
Логичнее всего использовать эмулятор модбас слейва для ПК, чтоб убедиться что виноват в такой проблеме ПЛК а не Ваш слейв
я не писал, что протокол модбас. Так что проверить невозможно. А терминал то чем не устраивает? по отдельности устройство и плк работают.
в модбасе в посылках тоже присутствуют нули, поэтому если это виноват ПЛК должен наблюдаться тот же эффект, если это внешнее устройство тогда надо им заниматься, но судя потому что приходящяя контрольная сумма совпадает с проверкой на плк, пакеты неправильно формирует слейв
наверное Вы меня не так поняли - ПЛК считает контрольную сумму от принятых байт, среди которых нет нулей, и эта контрольная сумма не свпадает с той, которую отсылает устройство (а её он отсылает правильно). Насчет эмулятора модбас - и правда, не подумал, что нули там есть, проверю конечно, только наверное смысле нет, как я уже говорил - устройства отдельно работают прекрасно, в терминалах проверял, нули на контроллер приходили. Кстати в ПЛК110 такого не наблюдалось.
Малышев Олег
30.08.2012, 11:09
скорее всего вы формируете строку - не массив байт и используете функцию len. В кодесис конец строки - как в "C" - символ с кодом 0. Скорее всего получается длина строки 0 - и посылка не правильная.
что то подобное я читал, попробую копнуть в этом направлении
в чем же тогда отличие 304го от 110го? как я ссказал - со 110 нет проблем
Малышев Олег
31.08.2012, 13:03
Уточните пожалуйста, какой у Вас ПЛК - PLC304 или PLC304M01?
На корпусе не нашел маркировки М01, документов с собой к сожалению нет. Где то на форуме встречал что НЕ на М01 не работает библиотека SysExec, но у меня она рабоатет. Может дело в прошивке?
PS: немного поправил программу в своем устройстве, теперь она отсылает числа от 0 до FF, выяснил что принимает вместо 0 - С0, вместо 80 - С0, вместо FF - 0. Как то так.
Проблема решена, не знаю правда как объяснить логически и поэтому хотел бы знать))) Связь осуществлял на скорости 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. Как то так.
Стоп битов сколько используете? Четность есть?
8-N-1. Первым делом пробовал менять эти натройки, но не помогло. Подозрение все же не на ОВЕН, а на свое устройство, так как сейчас появились новые проблемы, и овен, и терминал ведут себя одинаково, скорее всего надо искать глюк в своей проге.
у меня были такие проблемы с модемом, когда скорости на обоих устройствах различались в ответе приходил "мусор" тоже с определенной закономерностью
Но скорость то одинаковая.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot