feat: Modbus Rtu over tcp enhancement (#9570)

This commit is contained in:
Marius Bezuidenhout 2021-08-03 23:09:51 +02:00 committed by GitHub
parent 8bf97809a8
commit 1afbff8904
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 10 deletions

View File

@ -9,7 +9,7 @@ Registers via Modbus TCP or Modbus RTU/ASCII.
[[inputs.modbus]] [[inputs.modbus]]
## Connection Configuration ## Connection Configuration
## ##
## The plugin supports connections to PLCs via MODBUS/TCP or ## The plugin supports connections to PLCs via MODBUS/TCP, RTU over TCP, ASCII over TCP or
## via serial line communication in binary (RTU) or readable (ASCII) encoding ## via serial line communication in binary (RTU) or readable (ASCII) encoding
## ##
## Device name ## Device name
@ -29,15 +29,18 @@ Registers via Modbus TCP or Modbus RTU/ASCII.
# TCP - connect via Modbus/TCP # TCP - connect via Modbus/TCP
controller = "tcp://localhost:502" controller = "tcp://localhost:502"
## Serial (RS485; RS232) ## Serial (RS485; RS232)
# controller = "file:///dev/ttyUSB0" # controller = "file:///dev/ttyUSB0"
# baud_rate = 9600 # baud_rate = 9600
# data_bits = 8 # data_bits = 8
# parity = "N" # parity = "N"
# stop_bits = 1 # stop_bits = 1
# transmission_mode = "RTU"
## For Modbus over TCP you can choose between "TCP", "RTUoverTCP" and "ASCIIoverTCP"
## default behaviour is "TCP" if the controller is TCP
## For Serial you can choose between "RTU" and "ASCII"
# transmission_mode = "RTU"
## Measurements ## Measurements
## ##

View File

@ -68,7 +68,7 @@ const description = `Retrieve data from MODBUS slave devices`
const sampleConfig = ` const sampleConfig = `
## Connection Configuration ## Connection Configuration
## ##
## The plugin supports connections to PLCs via MODBUS/TCP or ## The plugin supports connections to PLCs via MODBUS/TCP, RTU over TCP, ASCII over TCP or
## via serial line communication in binary (RTU) or readable (ASCII) encoding ## via serial line communication in binary (RTU) or readable (ASCII) encoding
## ##
## Device name ## Device name
@ -88,16 +88,19 @@ const sampleConfig = `
# TCP - connect via Modbus/TCP # TCP - connect via Modbus/TCP
controller = "tcp://localhost:502" controller = "tcp://localhost:502"
## Serial (RS485; RS232) ## Serial (RS485; RS232)
# controller = "file:///dev/ttyUSB0" # controller = "file:///dev/ttyUSB0"
# baud_rate = 9600 # baud_rate = 9600
# data_bits = 8 # data_bits = 8
# parity = "N" # parity = "N"
# stop_bits = 1 # stop_bits = 1
## For Modbus over TCP you can choose between "TCP", "RTUoverTCP" and "ASCIIoverTCP"
## default behaviour is "TCP" if the controller is TCP
## For Serial you can choose between "RTU" and "ASCII"
# transmission_mode = "RTU" # transmission_mode = "RTU"
## Measurements ## Measurements
## ##
@ -246,9 +249,20 @@ func (m *Modbus) initClient() error {
if err != nil { if err != nil {
return err return err
} }
handler := mb.NewTCPClientHandler(host + ":" + port) switch m.TransmissionMode {
handler.Timeout = time.Duration(m.Timeout) case "RTUoverTCP":
m.handler = handler handler := mb.NewRTUOverTCPClientHandler(host + ":" + port)
handler.Timeout = time.Duration(m.Timeout)
m.handler = handler
case "ASCIIoverTCP":
handler := mb.NewASCIIOverTCPClientHandler(host + ":" + port)
handler.Timeout = time.Duration(m.Timeout)
m.handler = handler
default:
handler := mb.NewTCPClientHandler(host + ":" + port)
handler.Timeout = time.Duration(m.Timeout)
m.handler = handler
}
case "file": case "file":
switch m.TransmissionMode { switch m.TransmissionMode {
case "RTU": case "RTU":