Отправил проект... в ответ тишина. На вопросы по почте тоже ответа нет. Техподдержка рулит
Напишу что сам "нарыл".
Предисловие.
Первая проблема, с которой столкнулся - отвал slave-устройств в сети Modbus. Причём в течении суток у меня отваливалось практически 45 устройств из 47 подключенных в сети. Связь с ними не восстанавливалась, пока вручную не сделать сброс. На форуме нашлось множество таких же ситуаций (мне не понятно, почему ОВЕН на них не реагирует). Первым делом использовал сброс шины так:
IF SS_39.xError THEN myblink37(ENABLE:= SS_39.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> SS_39.xReset); END_IF
где SS_39 это одно из slave-устройств, myblink37 - генератор BLINK.
Т.о. прописав такие строчки для каждого устройства удалось отвалившиеся возвращать в строй. Порадовался этому, но не тут-то было... Через несколько дней обнаружил несколько отвалившихся устройств, которые не хотели возвращаться с помощью моего BLINK. Так же удавалось вернуть их только ручным сбросом контроллера. Тщательно порывшись на форуме нашёл решение и этой проблемы. Используя эти строки перегружается порт:
IF modbus_master_com_port.xAllSlavesOk=FALSE THEN //сброс ком-порта
myblink00(enable:=TRUE,timelow:=T#6S, timehigh:=T#100MS,out=>);
ELSE
myblink00(enable:=FALSE,timelow:=T#6S, timehigh:=T#100MS,out=>);
END_IF
modbus_master_com_port.xResetComPort:=myblink00.OU T ;
Ну что же... Используя эти костыли вторые сутки - полёт нормальный... Ещё раз хочется передать привет техподдержке и ОВНУ в целом...
Вторая проблема возникла когда я решил подружить свой контроллер и HMI-панель со встроенной SCADA-системой. Так же использовал конфигуратор, создал подключение ModbusTCP_Slave. Панель начала получать данные. Первое время глюков не замечал. Но потом оказалось, что начало отваливаться это подключение - через 2-3 минуты после старта контроллера появлялся красный треугольник. Панель при этом вела себя не адекватно - то указывала что связи нет, то связь появлялась, но очень тормозила (время реакции на действия растягивались до 10 сек), контроллер принимая от SCADA информацию искажал её - значения переменных дико плясали, помогал сброс контроллера. Перезагрузка по питанию опять приводила к вышеописанному бардаку. Решил порыть в том же направлении - попытаться найти команды перезапуска TCP соединения. По соответсвующему названию нашёл внутренние переменные ModbusServer, которые отвечают за данное соединение, причём вручную, в режиме записи значений переменных удалось перегрузить соединение, которое опять продержалось 2 минуты и опять отрубилось. Пытался вытащить эти переменные, чтобы перегружать соединение программно но как-то не удалось - они находятся здесь: Device.Application.ModbusTCP_Slave_Device.m_Modbus Server (.xReset, .xError и т.д.), но вызвать в программе не удаётся - ругается на m_ModbusServer. Пытался создать соединение TCP с помощью функционального блока ModbusServer - сделал как в примере, ещё нашёл на форуме, но никак не удаётся прописать порт соединения т.к. переменная .wPort не доступна. Причём это конкретный глюк в программе CODESYS т.к. при наборе точки я вижу список переменных, wPort отсутствует среди них, но контекстная подсказка с wPort появляется возле другой переменной. На этом месте я уже почти отчаялся... Нахрена мне "коммуникационный контролер ОВЕН" если он не может обеспечить коммуникацию с HMI? И тут я обнаруживаю, что моё соединение работает достаточно долго и не "падает"... Решение оказалось случайным. В ходе экспериментов я создал в программе описание функционального блока ModbusServer. Воспользоваться им я не смог - не получилось прописать порт TCP соединения, но его наличие в программе оказало благотворное воздействие на соединение созданное в конфигураторе. Вот текст программы, который поддерживает моё соединение:
VAR
m_ModbusServer: ModbusServer;
END_VAR
IF m_ModbusServer.xError THEN
m_ModbusServer.xReset:=TRUE;
ELSE
m_ModbusServer.xReset:=FALSE;
END_IF;
Это соединение совершенно не привязано к моему, но почему-то держит канал... Не скажу что всё идеально, но пока (уже 2 суток без отвалов). Не идеально - связь со SCADA стрёмная - периодически, на долю секунды, панель показывает что связь отвалилась. Иногда реакция на действия на панели с небольшим запаздыванием (особенно после перезагрузки контроллера), ещё контроллер часто теряет связь со SCADA после заливки проекта и для того, чтобы восстановить связь нужно передёрнуть питание контроллера.
По первой проблеме тоже решение "так себе" - slave-устройства продолжают отваливаться с частотой раз в 2-3 минуты, благо программа их возвращает. Так и живём...
P.S. Не думал что у ОВНА будут сплошные костыли... Неужели жажда прибыли напрочь перебивает желание довести сырую поделку до нормального ПЛК?