PDA

Просмотр полной версии : Visual Studio 2017 и СПК1ХХ



oif
04.03.2020, 22:37
Добрый день.
Есть необходимость получать значения из СПК в программу на Visual Basic.
Использую библиотеку nmodbus,но никак не могу разобраться по каким адресам обращаться к СПК -выходам.
С Modbus RTU на ПР200 разобрался без проблем там все просто ReadHoldingRegisters(1, 156, 1)(0) указываем адрес Slave, адрес регистра,кол-во бит считываемых. И потом преобразуем с помощью Modbus.Utility.ModbusUtility, конвертируем при необходимости.
1)А как сделать это c MODBUS TCP?
2)Как определить адрес регистра который указывать при обращении? %QX322.0 в обычном представление это какой адрес?
3)Подскажите как считать DWORD или как правильно по битам это сделать?
Во вложении настройки выходов СПК1ХХ в codesys.
Буду благодарен за пример.

Евгений Кислов
05.03.2020, 06:38
Добрый день.

По части настройки Modbus TCP Slave в CODESYS V3.5 - описание и пример приведены в этом документе (п. 4.5 и 4.12):
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v2.0.pdf

oif
05.03.2020, 10:16
Спасибо за ответ.
Но я именно не могу понять в Visual какие адреса поставить. Допустим адрес %QX322.0 в функции чтения как указать?
master = ModbusIpMaster.CreateIp(New TcpClient("192.168.1.12", 502))
data(3) = master.ReadHoldingRegisters(0, 1)(0)
data(4) = master.ReadHoldingRegisters(1, 1)(0)
data(5) = master.ReadHoldingRegisters(2, 1)(0)
data(6) = master.ReadHoldingRegisters(3, 1)(0)
data(7) = master.ReadHoldingRegisters(4, 1)(0)
data(8) = master.ReadHoldingRegisters(5, 1)(0)
Все приходят 0.Хотя на СПК значение 1.
См. вложение. Буду благодарен за подсказку с адресами.

Евгений Кислов
05.03.2020, 10:58
У вас на скриншоте переменные привязаны к битам 0-3 input регистра 0 - т.е. вы как минимум используете не ту функцию Modbus и, вероятно, не с теми аргументами.
На %QX322.0 вообще не смотрите - ориентируйтесь на номер в квадратных скобках.

Выходы[0] - input регистр 0
Выходы[1] - input регистр 1

Входы[0] - holding регистр 0

и т.д.

В документе все это описано.

oif
05.03.2020, 11:52
Спасибо всем огромное!
Действительно проблема в функции,необходимо было считывать через
data(3) = master.ReadinputRegisters(0, 1)(0)
Документы читал,но смутило именно то , что в Codesys названия "Входные" и "Выходные" по другому определены.
Еще раз спасибо.