Да ничего необычного:kobrik писал(а):Пачка переменных? что это значит?
var0 WORD
var1 WORD
var2 WORD
...
var9 WORD
var10 WORD
...
Соответственно var9 и var10 будут лежать по адресу DB1.DBX18.0 и DB1.DBX20.0.
На самом деле эти адреса 1, 10001, 30001, 40001 - атавизм 60-х годов прошлого века. Фирма Modicon (нынче в составе Schneider Electric), которая изобрела Modbus, заточила его под свой контроллер, у которого было 65535 байт (64 кБайт) памяти для работы с Modbus. Modicon привязала местоположение четырех типов данных к конкретным ячейкам своей специальной памяти. Сейчас такая память вызывает лишь смех...kobrik писал(а):Да уловил, это в зависимости что мы хотим считывать или записывать, применяем адреса. К примеру Holding registers использует такой вид: 40001.
Многие устройства с Modbus-интерфейсом сделаны хитро: они не привязываются к этим конкретным ячейкам 1, 10001, 30001, 40001, вместо этого используются подмены:
00001 => начальный байт Discrete Coils
10001 => начальный байт Discrete Inputs
30001 => начальный байт Input Registers
40001 => начальный байт Holding Registers
Например, дискретный вход по адресу 10021 будет соответствовать 20-му биту (10021 = начальный байт Discrete Inputs + 20).
Ну и ранее Автоматизатор приводил пример: 40033dec = начальный байт Holding Registers + 32.
В некоторых устройствах начальными байтами являются 0, 10000, 30000, 40000. В этом случае надо задавать другое смещение адреса, например, 40033dec = начальный байт Holding Registers + 33.