Просто Вы не знакомы с элементарными понятиями из теории Modbus. Вы путаете функции с адресными ссылкамиПри прописывании функции 06 на запись в прибор компилятор панели ругается. В примерах везде использовано 4х. и 3х.
Популярно можно ознакомится здесь https://sites.google.com/site/fieldb...odbuseducation
4x и 3х это не функции, а ссылки к областям памяти слева.
В общем случае существуют четыре области
0х - область дискретных выходов (доступны чтение и запись)
1х - область дискретных входов (доступно только чтение)
3х - область входных регистров (доступно только чтение)
4х - область выходных регистров (доступны чтение и запись)
Для каждой области существуют свои функции(команды) для записи или чтения. Так вот функция 06 это команда для записи одного значения в регистр из области 4х
Я сделал маленькую шпаргалку
Панель сама выберет нужную функцию, в зависимости от заданного в Write() или Read() 4х или 3х
Какие глупости. Из прибора читаются ПРОСТО значения и ни в каком не шестнадцатеричном виде.И ещё вопрос, чтение из прибора текущей температуры идет в шестнадцатеричном виде, мне нужно изменять это значение, добавляя 1 градус каждые 5 минут и записывать в прибор. Нужно ли переводить значение в десятичный вид? И в каком виде записывать значение в регистр уставки прибора, в DWORD, десятичном или как?
Ни какой разницы между десятичным и шестнадцатеричным представлением одного и того же значения нет. Hex или Oct придумано только для человека, в основном используется для вывода на экран или бумагу, а компьютеры оперируют наборами ноликов и единичек
123(Dec) = 7B(Hex) = 173(Oct) = 1111011(Bin) и это одно и тоже значение!
Вы же записываете в прибор число, а не символьную строку.
Если записываете значение переменной Ustavka, то вообще задумываться не о чем.
Просто Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, Ustavka);
или если значение уставки в регистре PSW[256]
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, *(DWORD*)(PSW + 256));
Если константу, то как Вам больше нравится хотите
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 123); десятичное представление
или
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 0173); восьмеричное представление
или
Write(PLC, 1, MODBUS_RTU_REG_4X, 0, 0, TYPE_DWORD, 0х7В); шестнадцатеричное представление




Ответить с цитированием