Стартовая страница › Форумы › Взаимодействие с устройствами › Управление контроллером DSE7320 по modbus
Помечено: Deepsea DSE7320 Modbus
- В этой теме 23 ответа, 4 участника, последнее обновление 2 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
08.05.2023 в 14:38 #28454
manjey73Участникbyte[] val1Bytes = BitConverter.GetBytes(val1);
byte[] cmdData = new byte[4] { val1Bytes[1], val1Bytes[0], val1Bytes[0], val1Bytes[1] }То есть таким способом
08.05.2023 в 15:44 #28456George
УчастникНе знаю почему, но с таким вариантом:
public byte[] PassDSE(ushort val1)
{
byte[] val1Bytes = BitConverter.GetBytes(val1);
byte[] cmdData = new byte[4] { val1Bytes[1], val1Bytes[0], val1Bytes[0], val1Bytes[1] };
return cmdData;
}
выходит в парсере 0A 10 10 08 00 02 04 8B 75 75 8B 46 24,
Part of Data Package Description Value
0A Slave address 0x0A (10)
10 Function code 0x10 (16) — Write Multiple Registers
10 08 Starting address Physical: 0x1008 (4104)
Logical: 0x1009 (4105)
00 02 Quantity 0x0002 (2)
04 Byte count 0x04 (4)
8B 75 75 8B Registers value 0x8B75 (35701), 0x758B (30091)
46 24 CRC 0x4624 (17956)
т.е. вместо 35701, 29834 возвращает 35701, 3009108.05.2023 в 15:53 #28458George
УчастникВ общем с вариантом ushort.MaxValue всё работает корректно. С val1= 35702 тоже разобрался, в интерфейсе не тот номер команды ТУ выбрал.
08.05.2023 в 15:54 #28459
manjey73УчастникПолучается что у вас не перестановка байт при отправке команды и именно разница между 65535 и первоначальным числом?
Просто когда вы давали самый первый пример вроде как была перестановка.
-
Ответ изменён 3 года, 1 месяц назад пользователем
manjey73.
08.05.2023 в 15:56 #28461
manjey73УчастникДа, увидел что от 65535 надо отнимать, так не проще это число и вбить вместо ushort.MaxValue ?
-
Ответ изменён 3 года, 1 месяц назад пользователем
manjey73.
08.05.2023 в 16:19 #28463George
Участниктак не проще это число и вбить вместо ushort.MaxValue ?
Можно и так.
10.05.2023 в 10:34 #28478
MikhailМодераторВозможно, достаточно сменить тип ushort на short.
27.04.2026 в 19:01 #43001Arthur Teryoshkin
Участник1. В «Скрипты» добавил функцию:
// Возвращает значение ‘System control’ для заданного ‘Function code’
public uint dse_sys_ctrl(uint fun_code) {
uint res = 35700 + fun_code;
return res * 65536 + (~res & 0xFFFF);
}
2. В шаблоне опроса устройств «DrvModbus_DSE_8610.xml» (у меня DSE 8610) добавил «Команду»:
Код команды=System control
Блок данных=Holding…
Адрес=4104
Тип элементов=uint (4 байта)
Количество элементов=1
3. Создал каналы:
Наименование 1= ДГУ 1 — Стоп
Наименование 2= ДГУ 1 — Авто
Наименование 3= ДГУ 1 — Ручной
и т.д.
Тип=Выходной
Код тега=System control
Выходная формула 1=dse_sys_ctrl(0)
Выходная формула 2=dse_sys_ctrl(1)
Выходная формула 3=dse_sys_ctrl(2)
4. В «Представлении» добавил «Button 1, 2, 3»; настроил на созданные каналы; Действие=Отправить команду сразу28.04.2026 в 15:22 #43007
MikhailМодераторСпасибо
-
Ответ изменён 3 года, 1 месяц назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.