А вот это вам надо в ОВЕНе уточнять.
ОРС просто посылает Modbus запрос, одним из полей которого является номер файла, а также определенная запись файла. Контроллер должен ответить на этот запрос.
А вот это вам надо в ОВЕНе уточнять.
ОРС просто посылает Modbus запрос, одним из полей которого является номер файла, а также определенная запись файла. Контроллер должен ответить на этот запрос.
Спасибо.
Вопрос.Возможно ли из под сервера при изменения определенного тега запустить внешнюю программу? Например тег проверяет качество переменной и при плохом качестве запускает программу командной строки(для примера).
Можно - через скрипт. Используйте команду others.CreateProcess( )
Спасибо.
others.CreateProcess("c:\\Windows\\notepad.exe","" ,"d:\\Temp\\1.txt",0);
Спасибо.
Как я понял, библиотека modbus tcp slave от ОВЕН не поддерживает номера файлов. Соответственно у меня возникло пару идей как можно обойти эту проблему. У меня имеется 3 подустройства в сервере: одно - опрос/чтение переменных, второе и третье - 1-й и 2-й файл. Как вариант, хочу перед началом опроса файла менять тэг в первом подустройстве, который будет переключать файлы для опроса в контроллере, и после того как опс выполнит обратное чтение (в настройках - "Чтение после записи") только начитать читать файл. Я так понимаю, что скриптом же это можно решить?
В принципе можно. Можно в скрипте перед началом чтения выполнить Modbus команду записи и записать нужное вам значение в контроллер.
А уже затем будет выполняться код чтения архива.
Спасибо.
Я правильно понял, что я ставлю в теге (файла) Разрешение выполнения скрипта перед записью и пишу в него следующее:
Код:-- Initialization function OnInit() end -- Uninitialization function OnClose() end -- Processing function OnRead() server.WriteTag("$(N).$(D).текущие.file_num",0,192); t1,q1,ts1 = server.ReadTag("$(N).$(D).текущие.file_num"); if q1==192 then server.PollCurrentDevice( ); end; end
А зачем вам вообще тег? Вам же нужно контроллеру сообщить что будете читать такой то файл.
Выполняете команду modbus.WriteHoldingRegistersAsInt16( ) пишите в нужный Modbus регистр например 0, читаем нулевой файл.
Это нужно вставить в сам код скрипта - в функцию OnBeforeReading(), перед выполнением скрипта чтения файла.
Спасибо.