80. Работа в режиме slave по нестандартному протоколу обмена
ฝัง
- เผยแพร่เมื่อ 19 ก.ย. 2022
- Ссылка на доработанный пример из видео:
ftp.owen.ru/CoDeSys3/21_Examp...
Я оговорился на 17:18 - сброс таймера не нужен, так как сбрасывается флаг xReceiveInProcess, от которого таймер и запускается.
Библиотеки OwenVendrorProtocols и OwenCommunication:
owen.ru/product/codesys_v3/li...
Документ "CODESYS V3.5. Реализация нестандартных протоколов":
ftp.owen.ru/CoDeSys3/11_Docum... - วิทยาศาสตร์และเทคโนโลยี
"Таймер внутри IF - к длительным командировкам..." ))) Это прям закон Мёрфи.
Спасибо Евгений. Было особенно интересно сначала самому код написать, а затем на вашу реализацию посмотреть.
По практике использования данного весового терминала могу сказать, что описание протокола не соответствует реальности.
1.Реальная посылка терминала 'ww000000 kg$R$N' или 'ww-00000 kg$R$N' (в моем случае терминал настроен на вес брутто и индикацию без плавающей точки)
2.Постоянно в порт приходят склейки пакетов, в среднем у меня за один цикл приходит 1,5 пакета.
3.Терминал при работе от 220в крайне помеха незащищенный и часто вместо цифр в середине пакета приходит все что угодно. Если этот же терминал запитать от аккумулятора то пакеты идут правильные.
Отличия от вашего кода:
1.Я открывал/закрывал порт через ФБ библиотеки CAA SerialCom. Есть ли принципиальная разница? И в случае ошибки я закрывал COM порт (как в примере CoDeSys).
2.В качестве буфера приема я сразу использовал текстовую строку и обратил внимание что часто LEN(sReciveBuffer) и fbRead.szSize имеют разную длину. Наверно правильнее использовать все же массив байт.
3.Из за постоянных склеек и получения мусора по середине пакета пришлось написать функцию контроля каждого пришедшего байта на валидность.
P.S. Если кому-то нужна моя реализация, пишите в личку.
1. Принципиальный разницы нет. COM_CONTROL - это обертка над COM.Open и COM.Close.
2. Я думаю, лучше использовать массив байт. Длина строки определяется по наличию в строке символа с кодом 0x00 - поэтому вы и наблюдали разницу (например, из-за помехи в середине пакета появлялся символ с этим кодом).
Спасибо. Хорош.👍
Здравствуйте, такой вопрос: программирую весы cas ad, они работают с текстовым форматом ascii. Не совсем понимаю в какой форме отправлять запрос: в формате string или array of byte:= [16#...] ?
Назначение команд (из инструкции ): "Enq"-> 05H (для примера)
Добрый день. В принципе, в вашей ситуации подойдет любой из вариантов. Но для STRING потребуется делать это так: '$05'. Знак доллара - спецсимвол, указывающий, что следом за ним размещен код символа ASCII.
Здравствуйте! Есть ли возможность опроса контроллером не физического com порта, а виртуального. В смысле через коммутатор подключиться к MOXA NPort 5210A, к которой в свою очередь подключено устройство RS232? (не нашёл в руководстве "Реализация нестандартных протоколов
"
Добрый день. С MOXA NPort потребуется работать через TCP или UDP (см. документ "Реализация обмена через сокеты"). Организовать "Real COM Mode" не получится.
Здравствуйте, есть преобразователь Adam-4521. Где можно в codesys указать адрес преобразователя , если преобразователей несколько и нам нужно обратить к одному из них?
Насколько я понял из описания Adam-4521 - если вы подключаете несколько таких преобразователей к одному COM-порту контроллера, то за преобразователями не должно быть слэйвов с совпадающими адресами. Адресации на уровне преобразователей, как я понимаю, нет - она только на уровне слэйвов. Но лучше уточнить у техподдержки Advantech.
Понятно, спасибо
Несколько вопросов.:
1. Если плк сторонней фирмы, можно ли в нем исп биб-ку owen?
2. Если к ПЛК уже подключено 10ть модулей овен со скоростья 19200, и тебе понадобилось подкл.приблуду по модбасу рту со своими параметрами порта и скор 9600, а на ПЛК имеется только 1 порт rs485. Что тогда делать?
Спасибо, Евгений!
1. Смотря о какой именно библиотеке речь. Если про OwenVendrorProtocols и OwenCommunication - то они не будут работать на ПЛК других производителей.
2. Можно для модулей ОВЕН настроить те же параметры обмена, что для "приблуды". Или настроить обмен через библиоотеку (например, OwemCommunication) и переоткрывать порт с новыми настройками перед опросом "приблуды" и после.
Когда не индикатор, а весы, где данные надо получать оперативно в процессе дозирования, то таймер в 10 секунд конечно неприемлем, приходится жертвовать кодом для скорости работы с прибором
10 cекунд - это условное значение для примера, чтобы успеть показать, как приходят фрагменты пакетов. В реальной жизни разумное время ожидания полного пакета определяется особенностями конкретного устройства.
Здравствуйте. Подскажите пожалуйста. Мне нужно подключить весы фирмы CAS RS 232 8шт по нестандартному протоколу. Возможно ли при помощи СПК опрашивать сразу 8 весов?
Если весы работают в режиме slave - то можно. Если весы являются мастером (как весовой индикатор в данном видео) - то возникнут сложности, потому что каждые весы придется подключать по своему интерфейсу. У СПК всего 2 порта RS-232 - так что потребуется использовать конвертеры Ethernet/RS-232 и коммутатор.
@@CodesysOneLove Спасибо. Если у вас примеры как это можно сделать?
@@volkovdmitriy2886 сделать что именно? В каком режиме работают ваши весы?
@@CodesysOneLove Режим Slave. 8-битный код ASCII. Задача: 8 емкостей, 8 весов. По очереди нужно опрашивать вес емкости, выводить на контроллер и далее в скаду систему оператору
@@volkovdmitriy2886 понятно. Вам нужно изучить этот документ: ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_UserProtocols_v.3.0.pdf