modbus tcp의 MBAP(ModBus Application Protocol) 헤더(?)에는 아래와 같은 내용들이 들어있다.
[링크 : https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf]
[링크 : http://comfilewiki.co.kr/ko/doku.php?id=tcpport:modbus-tcp_프로토콜이란:index]
Function Code (0x03) + start Address(0x0000) + quantity of regitster(0x0001)
Protocol ID(0x0000 고정) Length Function Code 00 01 00 00 00 06 03 03 00 00 00 01 Unit ID(0x01 고정) Transaction ID (시퀀셜 증가) |
-a로 tcp MBAP 상의 Unit ID를 변경할 순 있지만 ID=1 로 고정되어 있다고 하니 어떻게 처리를 해야 하려나?
$ sudo ./modpoll -m tcp localhost 00 01 00 00 00 06 01 03 00 00 00 01 $ sudo ./modpoll -m tcp -a 3 localhost 00 01 00 00 00 06 03 03 00 00 00 01 |
$ ./modpoll --help modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator Copyright (c) 2002-2021 proconX Pty Ltd Visit https://www.modbusdriver.com for Modbus libraries and tools. Usage: modpoll [OPTIONS] SERIALPORT|HOST [WRITEVALUES...] Arguments: SERIALPORT Serial port when using Modbus ASCII or Modbus RTU protocol COM1, COM2 ... on Windows /dev/ttyS0, /dev/ttyS1 ... on Linux HOST Host name or dotted IP address when using MDBUS/TCP protocol WRITEVALUES List of values to be written. If none specified (default) modpoll reads data. General options: -m ascii Modbus ASCII protocol -m rtu Modbus RTU protocol (default if SERIALPORT contains a /) -m tcp MODBUS/TCP protocol (default otherwise) -m udp MODBUS UDP -m enc Encapsulated Modbus RTU over TCP -a # Slave address (1-247 for serial, 0-255 for TCP, 1 is default) -r # Start reference (1-65536, 100 is default) -c # Number of values to read (1-125, 1 is default), optional for writing (use -c 1 to force FC5 or FC6) -t 0 Discrete output (coil) data type -t 1 Discrete input data type -t 3 16-bit input register data type -t 3:hex 16-bit input register data type with hex display -t 3:int 32-bit integer data type in input register table -t 3:mod 32-bit module 10000 data type in input register table -t 3:float 32-bit float data type in input register table -t 4 16-bit output (holding) register data type (default) -t 4:hex 16-bit output (holding) register data type with hex display -t 4:int 32-bit integer data type in output (holding) register table -t 4:mod 32-bit module 10000 type in output (holding) register table -t 4:float 32-bit float data type in output (holding) register table -i Slave operates on big-endian 32-bit integers -f Slave operates on big-endian 32-bit floats -e Use Daniel/Enron single register 32-bit mode (implies -i and -f) -0 First reference is 0 (PDU addressing) instead 1 -1 Poll only once only, otherwise every poll rate interval -l # Poll rate in ms, (1000 is default) -o # Time-out in seconds (0.01 - 10.0, 1.0 s is default) Options for MODBUS/TCP, UDP and RTU over TCP: -p # IP protocol port number (502 is default) Options for Modbus ASCII and Modbus RTU: -b # Baudrate (e.g. 9600, 19200, ...) (19200 is default) -d # Databits (7 or 8 for ASCII protocol, 8 for RTU) -s # Stopbits (1 or 2, 1 is default) -p none No parity -p even Even parity (default) -p odd Odd parity -4 # RS-485 mode, RTS on while transmitting and another # ms after |
'프로그램 사용 > libmodbus' 카테고리의 다른 글
libmodbus modbus_mapping_new() (0) | 2022.05.10 |
---|---|
libmodbus poll 적용 (0) | 2022.05.04 |
libmodbus 예제 프로그램 (0) | 2022.05.04 |
libmodbus tcp 예제 (0) | 2022.05.04 |
libmodbus (0) | 2022.05.03 |