Недавно столкнулся с проблемой обновления ПО ПЛК на удаленном объекте.
Покопался на форумах, прослезился и написал скрипт на основе полученных данных.
Вот мое решение:
Текст из readme.txt: plc_io.cbug.zip
----------------------------------------------------------------------------------------------
Данный скрипт является компиляцией находок многих пытливых умов, набивших
шишки при использовании ПО от ОВЕН.
Скрипт предназначен для заливки обновленной программы в ПЛК без использования
программного комплекса CodeSys через ethernet интерфейс.
.
| . fw_update.cmd - собственно сам скрипт
|
+---bin
| . . . plc_io_get.exe - в девичестве plc_io.exe который доступен для скачивания с сайта ОВЕН сегодня
| . . . plc_io_put.exe - в девичестве plc_io.exe старая версия (найдена на форуме) - важнейший компонент
|
+---doc
| . . . plc_io_get.pdf - "мануал" от ОВЕН
| . . . plc_io_get.txt - перенаправленная инфа при запуске без параметров
| . . . plc_io_put.txt - перенаправленная инфа при запуске без параметров
| . . . readme.tx - сие чтиво
|
+---firmware
. . . . DEFAULT.CHK - какой-то нужный файл
. . . . DEFAULT.PRG - основная программа для заливки
В CodeSys при ОТКЛЮЧЕННОМ ПЛК в верхнем меню выбрать создать загрузочный
проект. При этом в папке проекта создадутся два файла <project_name>.PRG и
<project_name>.CHK. Их нужно переименовать в DEFAULT.PRG и DEFAULT.CHK
соответственно.
Дальше эти файлы нужно положить в папку firmware. Затем запустить:
fw_update.cmd без параметров, если IP-адрес ПЛК не менялся из коробки, или
fw_update.cmd <IP>, где <IP> - IP-адрес в обычном десятеричном формате,
например: fw_update.cmd 192.168.0.2 и следовать инструкции скрипта.
Скрипт выполняется не мгновенно, так что нужно немного подождать и не торопиться
прерывать его.
Как было сказано на форуме: новая версия правильно читает файлы из ПЛК, а
старая правильно пишет. Собственно так и оказалось. Хотя визуально результат
загрузки файлов в ПЛК и выглядит одинаково, если делать запись обеими прогами -
все файлы лежат в ПЛК и свиду все хорошо. Только если писать новой версией -
ПЛК не загружается, а CodeSys пишет что в ПЛК нет проги. При обратном считывании
DEFAULT.PRG, в моем случае, оказалось что файл увеличился в 3 раза! При
просмотре оказалось, что оригинальные данные перемежаются большими нулевыми
блоками - вот и причина.
Еще один косяк уже на старой (рабочей) версии всплыл неожиданно: если
сначала записать файл DEFAULT.CHK, а потом DEFAULT.PRG, то DEFAULT.CHK бесследно
исчезает из ПЛК. Решение - пишем в обратной последовательности.
Косяк обеих версий: хоть в мануале и указывается, что можно за раз посылать
несколько файлов, но практике после посылки любого файла ПЛК входит в ступор на
некоторое время, и как следствие записывается только первый файл из списка.
Решение - файлы высылать в ПЛК строго по одному, с обязательной паузой. Пауза
реализована путем запроса списка файлов из ПЛК, которая также не сразу начинает
работать после записи, но является однозначным критерием того, что ПЛК отпустило.
Скрип получился вполне рабочий и удобный. Можно смело высылать ответственным
лицам на объект для обновления прошивки.
Все исследования проводились на ОВЕН ПЛК110-30-Р.М (М02) и Windows 7 x64.
С наилучшими пожеланиями всем кодерам, CBug