поэтому я и сделал следующий IO файл для физического ПЛК с двумя переменными и для Телемеханики его сделал slave:
<?xml version="1.0" encoding="windows-1251"?>
<KLogicModules>
<Module Id="14235"> Comment="ок">
<Name>Test</Name>
<sModGroupName>TEST</sModGroupName>
<CfgName>тест</CfgName>
<Descr>тест</Descr>
<Protocol>Modbus</Protocol>
<Properties>
<Prop Id="1" Name="Адрес модуля" Type="BYTE" Init="1"/>
<Prop Id="2" Name="Режим" Descr="Режим передачи 0-RTU, 1-ASCII (не реализован)" Type="BYTE" Init="0" Access="H"/>
<Prop Id="3" Name="Карта" Descr="Адресация карты с 1" Type="BYTE" Init="0" Access="H"/>
<Prop Id="4" Name="Доп.свойства" Type="BYTE" Init="1" Descr="Дополнительны свойства (биты): 1-Endian, 2-АдресТегаТУ" Access="H"/>
</Properties>
<TagProperties>
<Prop IdStr="Adr" Name="Адрес модбас" Type="WORD" Access="RW"/>
<Prop IdStr="Func" Name="Код функции" Type="BYTE" Access="RW" Init="3"/>
<Prop IdStr="DataType" Name="Тип данных" Type="BYTE" Access="RW" Init="23"/>
<Prop IdStr="K" Name="Коэффициент" Type="FLOAT" Access="RW" Init="1"/>
<Prop IdStr="msk" Name="Маска" Type="WORD" Access="R" Init="0xFFFF"/>
<Prop IdStr="endian" Name="Порядок следования (0-как есть, 1-обратный п.байт, 2-обрат.п.слов, 3-обрат.п.байт,слов" Type="BYTE" Access="R" Init="0"/>
</TagProperties>
<TagTree>
<Group Name="Служебные">
<Tag Name="Связь" Type="DI" Adr="0x0001" Func="0" Descr="Наличие связи с устройством"/>
<Tag Name="Время" Type="DTI" Adr="0x0002" Func="0" Descr="Время опроса устройства"/>
<Tag Name="Приостанов" Type="DO" Adr="0x0003" Func="0" Descr="Приостанов опроса устройства (True - не опрашивать)"/>
</Group>
<Group Name="Сетевые настройки reed">
<Tag Name="1ya" Type="AIF" Adr="2" Func="3" K="0,01" DataType="11" Descr="переменная 1 чтение"/>
<Tag Name="2ya" Type="AIF" Adr="4" Func="3" K="0,01" DataType="11" Descr="переменная 2 чтение"/>
<Tag Name="1yaz" Type="AOF" Adr="2" Func="6" K="100" DataType="11" Descr="переменная 1 запись"/>
<Tag Name="2yaz" Type="AOF" Adr="4" Func="6" K="100" DataType="11" Descr="переменная 2 запись"/>
</Group>
</TagTree>
</Module>
</KLogicModules>
а виртуальным контроллером его и опрашивал.
у каждого ПО свой способ добавления slave устройства, у нас можно вводить коэффициенты.
и все таки возможно ли обойтись без коэффициентов? ну или где то в файле настроек прописать их для того чтобы наружу модбасс передавался корректно? Вопрос прям очень принципиальный!!! и принимался тоже. Эта проблема вроде только на ПЛК с индексом ТЛ только присутствует на остальных вроде все корректно
Без коэффициентов не обойтись, они должны выставляться на ПО, которое является мастером для ПЛК. Это не проблема, это особенность, внутри своей среды (контроллеры "ТЛ" и SCADA Телемеханика лайт) проблем нет, для передачи в другую среду есть особенности, в данном случае коэффициенты.
В каждом программном обеспечении есть свой формат карты адресов опрашиваемых устройств, обратитесь в техническую поддержку openhab.
я приводил выше пример, где данная настройка задается в Телемеханике, должно быть что то похожее и вашем ПО.
Сергей Сисейкин это какой-то треш, ну уже признали бы, что формат IEEE754 в сети вы не поддерживаете в ТЛ. А то выглядит все вышесказанное как отмазка.
Карта адресов в ПЛК:
карта в плк.png
адреса переменных 2, 4 и 6. Будем в них записывать значения и читать.
в opc сервере Owen добавляем 6 тэгов, три для чтения, три для записи.
Начну с записи Float:
опс запись.png
использовать нужно настройки как на скриншоте.
для чтения Float нужно умножать адрес переменной на "2". (отрыл старую доку, в конце приложу описание)
настройка чтения в OPC.png
запись и чтение Float работает
опрос в ОПС.png
Modbus TCP slave в исполнительной системе EnLogic.
Протокол MODBUS TCP обеспечивает обмен между устройствами в сети Ethernet, используя модель клиент-сервер (master-slave) со стеком протоколов TCP/IP, где ИС EnLogic выступает в роли сервера (EnLogic также может быть и клиентом, но этот вопрос не рассматривается в данном документе).
В ИС EnLogic поддержаны три функции Modbus TCP slave:
0x03 - Read Holding Registers
Внутри ИС каждый параметр EnLogic имеет размер 4 байта (2 регистра Modbus). При подготовке ответа на запрос мастера значение параметра "ужимается" до одного регистра (2 байта), т.е. вполне может произойти переполнение. В этом случае вместо значения передаётся 0xFFFF. Полноразмерное значение параметра можно получить, используя функцию 0x04.
Все значения в ответе передаются как short int (от -32767 до 32767), параметры типа Integer передаются без изменений, параметры типа Float умножаются на заданный множитель и обрезаются до целого числа, параметры типа Boolean передаются как 1 (true) или 0 (false). В регистрах, соответствующих несуществующим в конфигурации контроллера параметрам (а также параметрам вне разрешённого диапазона) и в регистрах, соответствующих недостоверным параметрам (с плохим качеством), передаются 0xFFFF.
В данном запросе адреса Modbus соответствуют МЭК-адресам параметров в конфигурации ИС EnLogic.
Если адреса запрошенных параметров не попадают в допустимый диапазон, то возвращается исключение Modbus с кодом 2.
0x04 - Read Input Registers
В ответ на этот запрос отправляются значения параметров «как есть», без дополнительной обработки, при этом каждый параметр передаётся в двух регистрах Modbus. Адреса Modbus в данном запросе должны представлять собой МЭК-адреса параметров в конфигурации EnLogic, умноженные на 2. Например, для запроса трёх параметров, начиная с МЭК-адреса 21, запрос должен быть на шесть регистров, начиная с адреса 42.
В ответ в регистрах, соответствующих несуществующим в конфигурации контроллера параметрам (а также параметрам вне разрешённого диапазона) и в регистрах, соответствующих недостоверным параметрам (с плохим качеством), передаются 0xFFFFFFFF. Целочисленные параметры передаются как INT32, параметры с плавающей запятой – как FLOAT32, дискретные значения передаются следующим образом: TRUE - как 0x00000001, FALSE – как 0x00000000.
Если адреса запрошенных параметров не попадают в допустимый диапазон, то возвращается исключение Modbus с кодом 2.
0x06 - Write Single Register
В данном запросе адрес Modbus должен соответствовать МЭК-адресу параметра в конфигурации ИС EnLogic, а само значение параметра должно быть передано в формате short int (от -32767 до 32767), при этом для записи параметров типа Float его значение должно быть умножено на заданный множитель и обрезано до целого числа.
Если адрес выходит за пределы разрешённого диапазона или отсутствует в конфигурации EnLogic, то возвращается исключение Modbus с кодом 2.
Настройки задачи Modbus TCP slave
Настройки задачи Modbus TCP slave и её текущее состояние отображаются в ФБ ModbusTcpSlave:
123.png
Настройки по-умолчанию следующие: Порт = 502, Максимум соединений = 5, Начальный адрес = 1, Конечный адрес = 32767, Множитель = 100.
Вот именно это у вас человек и просил с самого начала...