cadiazran Ответов: 3

.Net-код для modbus RTU (RS485) между ПЛК и ПК (преобразователь RS485-RS232-USB)


Привет всем!, мне нужно использовать этот код, сделанный на C# для .Net [^] . У меня есть ПЛК, подключенный к ПК через Modbus RTU (RS485). Между ПЛК и ПК у меня есть конвертер RS485-RS232-USB.

Я хотел бы знать, как эта программа может читать и записывать регистры памяти размером 4 байта (2 слова). Мне нужно обрабатывать регистры памяти с типом данных float и другие с отрицательными значениями. У меня есть ПЛК со следующими регистрами (ссылка на регистры ПЛК), которые мне нужно читать и писать, поэтому я буду очень рад, если вы мне в этом поможете.

Это связь с регистрами ПЛК [^]

Мне нужно читать и записывать эти регистры из ПЛК:
Регистры данных D0000-D4095 (как вы видите в ПЛК) = 450001 – 454096 (адрес Modbus)

Спасибо!.

3 Ответов

Рейтинг:
2

Zoltán Zörgő

Попробуй NModbus[^], с большим инструкция[^]
Смотрите последнюю страницу для преобразования типов данных, которые вам нужны.
Некоторая более глубокая теория о представлении modbus rtu dta: http://www.chipkin.com/how-real-floating-point-and-32-bit-data-is-encoded-in-modbus-rtu-messages/[^]

Но прежде чем вы попытаетесь сделать это из кода (что довольно просто), убедитесь, что ваше соединение действительно работает.


Рейтинг:
1

CPallini

То, что вы можете сделать, используя программу статьи "как есть", - это прочитать пару регистров, а затем преобразовать возвращаемые значения в значимое значение. Например, предположим, что Вы читаете пару регистров

reg[n] = 0x4128 and register reg[n+1] =0x0000

тогда, если PLC используя большое конечное представление, вы получаете int ценность 0x41280000 чье обращение в float дает в конце концов 10.5 (видеть "Преобразователь IEEE 754"[^]).

Конечно, лучшим способом было бы изменить исходный код, чтобы он выполнял необходимые преобразования для вас.


cadiazran

Спасибо CPallini, но как я мог бы сделать это в коде?, не могли бы вы открыть код на C#?, я буду признателен вам за помощь!

Рейтинг:
0

Archie Jacobs

Я рекомендую попробовать AdvancedHMI. Он имеет драйвер ModbusRTU, который поддерживает float over Modbus, предваряя адрес буквой F. Например, вы можете использовать F450001. Чтобы сделать это в коде с AdvancedHMI:

Dim MyValue as string= ModbusRTUCom1.Read("F450001")