Протокол Modbus: руководство
Введение
Советы:
Тип протокола: | Протокол Modbus | Класс | Примечание | |:---------------:|:-----------------------------|:------------------------| | Tcp | ModbusTcp, ModbusTcpServer | Ethernet | | Rtu | ModbusRtuOverTcp | Серийный в Ethernet | | Ascii | ModbusAsciiOverTcp | Серийный в Ethernet |
Область: | Номер области | Название | Чтение/запись | Диапазон адресов | Метод | |:-------------:|:-----------------:|--------------:|----------------:|------------------------------------| | 0 область | Выходная катушка | Чтение/запись | 00001–09999 | readCoil / writeCoil | | 1 область | Входная катушка | Чтение | 10001–19999 | readDiscreteInput | | 3 область | Входной регистр | Чтение | 30001–39999 | readInputRegister | | 4 область | Регистр удержания | Чтение/запись | 40001–49999 | readHoldRegister / writeHoldRegister |
Адрес: Согласно коммуникационному протоколу Modbus, данные Modbus имеют адреса 0xxxx, 1xxxx, 3xxxx и 4xxxx.
Адрес случая | Область | Префикс адреса | Остаток адреса | Адрес метода | Пример использования |
---|---|---|---|---|---|
00001 | Выходная катушка | 0 | 0001 | 0 | readCoil(0, 1) |
10003 | Входная катушка | 1 | 0003 | 2 | readDiscreteInput(2, 1) |
30020 | Входной регистр | 3 | 0020 | 19 | readInputRegister(19, 1) |
40100 | Регистр удержания | 4 | 0100 | 99 | readHoldRegister(99, 1) |
Код функции: | Число | Код функции | Описание | Метод | |:-----:|:----------:|:---------------------------:|------------------:| | 1 | 01H | Чтение выходной катушки | readCoil | | 2 | 02H | Чтение входной катушки | readDiscreteInput | | 3 | 03H | Чтение регистра удержания | readHoldRegister | | 4 | 04H | Чтение входного регистра | readInputRegister | | 5 | 05H | Запись одиночной катушки | writeCoil | | 6 | 06H | Запись одиночного регистра | writeHoldRegister | | 7 | 0FH | Запись множественной катушки | writeCoil | | 8 | 10H | Запись множественного регистра| writeHoldRegister |
Быстрый доступ к регистру удержания: | Число | Метод | Количество регистров | Размер в байтах | Размер в битах | Регистр | |:-----:|:-----------:|:-------------------:|:---------------:|:-------------:|:------------------------:| | 1 | readBoolean | 1 | 1/8 | 1 | регистр удержания | | 2 | readInt16 | 1 | 2 | 16 | регистр удержания | | 3 | readUInt16 | 1 | 2 | 16 | регистр удержания | | 4 | readInt32 | 2 | 4 | 32 | регистр удержания | | 5 | readUInt32 | 2 | 4 | 32 | регистр удержания | | 6 | readFloat32 | 2 | 4 | 32 | регистр удержания | | 7 | readFloat64 | 4 | 8 | 64 | регистр удержания | | 8 | readString | n | 2n | 16n | регистр удержания | | 9 | writeInt16 | 1 | 2 | 16 | регистр удержания | | 10 | writeUInt16 | 1 | 2 | 16 | регистр удержания | | 11 | writeInt32 | 2 | 4 | 32 | регистр удержания Регистрация данных | № | Метод | Длина в байтах | Размер регистра | Тип регистра | | :--: |:--:| :--:| :--:| :--:| | 12 | writeUInt32 | 4 | 32 | регистр | | 13 | writeFloat32 | 4 | 32 | регистр | | 14 | writeFloat64 | 8 | 64 | регистр | | 15 | writeString | n | 2n | 16n | регистр |
Печать сообщения Если вы хотите узнать фактический ввод и вывод пакетов во время коммуникации, вы можете распечатать информацию о пакете самостоятельно.
class Demo {
public static void main(String[] args) {
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// print message
plc.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
plc.writeInt16(2, (short) 10);
plc.close();
}
}
Коммуникационное соединение
Режим длительного соединения
class Demo {
public static void main(String[] args) {
// long connection mode, persistence = true
ModbusTcp plc = new ModbusTcp("127.0.0.1");
plc.writeInt16(2, (short) 10);
short data = plc.readInt16(2);
// close it manually
plc.close();
}
}
Короткий режим соединения
class Demo {
public static void main(String[] args) {
// short connection mode
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// set short connection mode, persistence = false
plc.setPersistence(false);
plc.writeInt16(2, (short) 10);
short data = plc.readInt16(2);
}
}
Фиксированный режим unitId (1-к-1)
Чтение данных
class Demo {
public static void main(String[] args) {
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// read coil
List<Boolean> readCoil = plc.readCoil(0, 2);
// read discrete input
List<Boolean> readDiscreteInput = plc.readDiscreteInput(0, 4);
// read hold register
byte[] readHoldRegister = plc.readHoldRegister(0, 4);
// read input register
byte[] readInputRegister = plc.readInputRegister(0, 2);
// hold register read Boolean
boolean readBoolean = plc.readBoolean(2, 1);
// hold register read Int16
short readInt16 = plc.readInt16(2);
// hold register read UInt16
int readUInt16 = plc.readUInt16(2);
// hold register read Int32
int readInt32 = plc.readInt32(2);
// hold register read UInt32
long readUInt32 = plc.readUInt32(2);
// hold register read Float32
float readFloat32 = plc.readFloat32(2);
// hold register read Float64
double readFloat64 = plc.readFloat64(2);
// hold register read String
String readString = plc.readString(2, 4);
plc.close();
}
}
Запись данных
class Demo {
public static void main(String[] args) {
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// single write coil
plc.writeCoil(0, true);
// multiple write coil
List<Boolean> booleans = Arrays.asList(true, false, true, false);
plc.writeCoil(0, booleans);
// single write hold register
plc.writeHoldRegister(0, 33);
// multiple write hold register
plc.writeHoldRegister(3, new byte[]{(byte) 0x11, (byte) 0x12});
// multiple write hold register
List<Integer> integers = Arrays.asList(11, 12, 13, 14);
plc.writeHoldRegister(3, integers);
// hold register write int16
plc.writeInt16(2, (short) 10);
// hold register write uint16
plc.writeUInt16(2, 20);
// hold register write int32
plc.writeInt32(2, 32);
// hold register write uint32
plc.writeUInt32(2, 32L);
// hold register write float32
plc.writeFloat32(2, 12.12f);
// hold register write float64
``` ```
plc.writeFloat64(2, 33.21);
// hold register write String, even length
plc.writeString(2, "1234");
plc.close();
}
Любой режим unitId (от 1 до многих)
class Demo {
public static void main(String[] args) {
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// опционально
plc.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// чтение катушки
List<Boolean> readCoil = plc.readCoil(2, 0, 2);
// чтение дискретного входа
List<Boolean> readDiscreteInput = plc.readDiscreteInput(2, 0, 4);
// чтение регистра хранения
byte[] readHoldRegister = plc.readHoldRegister(2, 0, 4);
// чтение входного регистра
byte[] readInputRegister = plc.readInputRegister(2, 0, 2);
// регистр хранения чтение Boolean
boolean readBoolean = plc.readBoolean(3, 2, 1);
// регистр хранения чтение Int16
short readInt16 = plc.readInt16(3, 2, true);
// регистр хранения чтение UInt16
int readUInt16 = plc.readUInt16(3, 2, false);
// регистр хранения чтение Int32
int readInt32 = plc.readInt32(4, 2, EByteBuffFormat.AB_CD);
// регистр хранения чтение Int32
long readUInt32 = plc.readUInt32(4, 2, EByteBuffFormat.AB_CD);
// регистр хранения чтение Float32
float readFloat32 = plc.readFloat32(4, 2, EByteBuffFormat.AB_CD);
// регистр хранения чтение Float64
double readFloat64 = plc.readFloat64(4, 2, EByteBuffFormat.AB_CD);
// регистр хранения чтение String
String readString = plc.readString(5, 2, 4);
plc.close();
}
}
class Demo {
public static void main(String[] args) {
ModbusTcp plc = new ModbusTcp("127.0.0.1");
// опционально
plc.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
// одиночная запись катушки
plc.writeCoil(2, 0, true);
// множественная запись катушки
List<Boolean> booleans = Arrays.asList(true, false, true, false);
plc.writeCoil(2, 0, booleans);
// одиночная запись регистра хранения
plc.writeHoldRegister(2, 0, 33);
// множественная запись регистра хранения
List<Integer> integers = Arrays.asList(11, 12, 13, 14);
plc.writeHoldRegister(2, 3, integers);
// регистр хранения запись int16
plc.writeInt16(3, 2, (short) 10, true);
// регистр хранения запись uint16
plc.writeUInt16(3, 2, 20, false);
// регистр хранения запись int32
plc.writeInt32(4, 2, 32, EByteBuffFormat.AB_CD);
// регистр хранения запись uint32
plc.writeUInt32(4, 2, 32L, EByteBuffFormat.AB_CD);
// регистр хранения запись float32
plc.writeFloat32(4, 2, 12.12f, EByteBuffFormat.AB_CD);
// регистр хранения запись float64
plc.writeFloat64(4, 2, 33.21, EByteBuffFormat.AB_CD);
// регистр хранения запись String
plc.writeString(5, 2, "1234");
plc.close();
}
}
class Demo {
public static void main(String[] args) {
ModbusTcpServer server = new ModbusTcpServer();
server.start();
ModbusTcp modbusTcp = new ModbusTcp("127.0.0.1");
// опционально
modbusTcp.setComCallback((tag, bytes) -> System.out.printf("%s[%d] %s%n", tag, bytes.length, HexUtil.toHexString(bytes)));
modbusTcp.writeInt16(2, (short) 10);
short data = modbusTcp.readInt16(2);
modbusTcp.close();
server.stop();
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )