Closed yangchengjian closed 5 years ago
Why even "ttyUSB0" in Valid ports but still reporting an error?
Shouldn't you be using "/dev/ttyUSB0" as the port identifier?
@steveohara I tried it too, but reported the same error
2018-10-28 11:03:37,478 [pool-1-thread-2] INFO o.t.g.s.gateway.MqttGatewayService - Configuration updates arrived! {"configuration":"[{\"id\":\"mod\",\"type\":\"MODBUS\",\"configuration\":{\"servers\":[{\"transport\":{\"type\":\"rtu\",\"timeout\":3000,\"portName\":\"/dev/ttyUSB0\",\"encoding\":\"rtu\",\"parity\":\"none\",\"baudRate\":9600,\"dataBits\":8,\"stopBits\":1},\"devices\":[]}]}}]"}
2018-10-28 11:03:37,973 [pool-1-thread-2] INFO o.t.g.service.TenantServiceRegistry - [Tenant] Updating extension configuration
2018-10-28 11:03:37,981 [pool-1-thread-2] INFO o.t.g.service.TenantServiceRegistry - Initializing extension: [mod][MODBUS]
2018-10-28 11:03:37,982 [pool-1-thread-2] INFO o.t.g.e.modbus.DefaultModbusService - [Tenant] Initializing Modbus service
2018-10-28 11:03:37,984 [pool-1-thread-2] DEBUG o.t.g.e.modbus.DefaultModbusService - [Tenant] Modbus service configuration [ModbusConfiguration(servers=[ModbusServerConfiguration(transport=ModbusRtuTransportConfiguration(portName=/dev/ttyUSB0, timeout=3000, encoding=rtu, baudRate=9600, dataBits=8, stopBits=1.0, parity=none), devices=[])])]
2018-10-28 11:03:38,004 [pool-1-thread-2] ERROR o.t.g.extensions.modbus.ModbusClient - MBS[/dev/ttyUSB0] connection failed!
java.io.IOException: Port [/dev/ttyUSB0] cannot be opened or does not exist - Valid ports are: [ttyAMA0,ttyUSB0,ttyUSB1]
at com.ghgande.j2mod.modbus.net.SerialConnection.open(SerialConnection.java:127)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.connect(ModbusSerialMaster.java:96)
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:110)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.thingsboard.gateway.extensions.modbus.DefaultModbusService.init(DefaultModbusService.java:64)
at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:83)
at org.thingsboard.gateway.service.DefaultTenantManagerService.lambda$init$0(DefaultTenantManagerService.java:64)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.updateConfiguration(MqttGatewayService.java:520)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.onGatewayAttributesUpdate(MqttGatewayService.java:512)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.lambda$onMessage$17(MqttGatewayService.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
2018-10-28 11:03:38,006 [pool-1-thread-2] ERROR o.t.g.e.modbus.DefaultModbusService - [Tenant] Modbus service initialization failed
java.lang.RuntimeException: MBS connection failed!
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:119)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.thingsboard.gateway.extensions.modbus.DefaultModbusService.init(DefaultModbusService.java:64)
at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:83)
at org.thingsboard.gateway.service.DefaultTenantManagerService.lambda$init$0(DefaultTenantManagerService.java:64)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.updateConfiguration(MqttGatewayService.java:520)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.onGatewayAttributesUpdate(MqttGatewayService.java:512)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.lambda$onMessage$17(MqttGatewayService.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Port [/dev/ttyUSB0] cannot be opened or does not exist - Valid ports are: [ttyAMA0,ttyUSB0,ttyUSB1]
at com.ghgande.j2mod.modbus.net.SerialConnection.open(SerialConnection.java:127)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.connect(ModbusSerialMaster.java:96)
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:110)
... 12 common frames omitted
2018-10-28 11:03:38,010 [pool-1-thread-2] INFO o.t.g.service.TenantServiceRegistry - Failed to read configuration attribute
java.lang.RuntimeException: MBS connection failed!
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:119)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.thingsboard.gateway.extensions.modbus.DefaultModbusService.init(DefaultModbusService.java:64)
at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:83)
at org.thingsboard.gateway.service.DefaultTenantManagerService.lambda$init$0(DefaultTenantManagerService.java:64)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.updateConfiguration(MqttGatewayService.java:520)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.onGatewayAttributesUpdate(MqttGatewayService.java:512)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.lambda$onMessage$17(MqttGatewayService.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Port [/dev/ttyUSB0] cannot be opened or does not exist - Valid ports are: [ttyAMA0,ttyUSB0,ttyUSB1]
at com.ghgande.j2mod.modbus.net.SerialConnection.open(SerialConnection.java:127)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.connect(ModbusSerialMaster.java:96)
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:110)
... 12 common frames omitted
2018-10-28 11:03:38,012 [pool-1-thread-2] WARN o.t.g.s.gateway.MqttGatewayService - Failed to update extension configurations [[]]
java.lang.RuntimeException: Failed to update configuration
at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:99)
at org.thingsboard.gateway.service.DefaultTenantManagerService.lambda$init$0(DefaultTenantManagerService.java:64)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.updateConfiguration(MqttGatewayService.java:520)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.onGatewayAttributesUpdate(MqttGatewayService.java:512)
at org.thingsboard.gateway.service.gateway.MqttGatewayService.lambda$onMessage$17(MqttGatewayService.java:429)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: MBS connection failed!
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:119)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.thingsboard.gateway.extensions.modbus.DefaultModbusService.init(DefaultModbusService.java:64)
at org.thingsboard.gateway.service.TenantServiceRegistry.updateExtensionConfiguration(TenantServiceRegistry.java:83)
... 9 common frames omitted
Caused by: java.io.IOException: Port [/dev/ttyUSB0] cannot be opened or does not exist - Valid ports are: [ttyAMA0,ttyUSB0,ttyUSB1]
at com.ghgande.j2mod.modbus.net.SerialConnection.open(SerialConnection.java:127)
at com.ghgande.j2mod.modbus.facade.ModbusSerialMaster.connect(ModbusSerialMaster.java:96)
at org.thingsboard.gateway.extensions.modbus.ModbusClient.connect(ModbusClient.java:110)
... 12 common frames omitted
If you login to the device shell, can you access the port from the command line? Does it in fact exist? Does the user that you application is running as have privileges to open the port? Is the port being used by another process? If you run modpoll, do you get the same results?
I can open the port and get data through Python
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
#PORT = 1
PORT = "/dev/ttyUSB0"
def main():
"""main"""
logger = modbus_tk.utils.create_logger("console")
try:
#Connect to the slave
master = modbus_rtu.RtuMaster(
serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)
)
master.set_timeout(5.0)
master.set_verbose(True)
logger.info("connected")
# logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 2))
#send some queries
#logger.info(master.execute(1, cst.READ_COILS, 0, 10))
#logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 0, 8))
#logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 100, 3))
#logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 100, 12))
#logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 7, output_value=1))
#logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 100, output_value=54))
#logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS, 0, output_value=[1, 1, 0, 1, 1, 0, 1, 1]))
#logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 100, output_value=xrange(12)))
except modbus_tk.modbus.ModbusError as exc:
logger.error("%s- Code=%d", exc, exc.get_exception_code())
if __name__ == "__main__":
main()
pi@raspberrypi:~ $ python modbus.py
2018-10-28 11:16:43,324 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,325 INFO modbus.main MainThread connected
2018-10-28 11:16:43,594 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,594 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,596 INFO modbus.main MainThread connected
2018-10-28 11:16:43,596 INFO modbus.main MainThread connected
2018-10-28 11:16:43,598 DEBUG modbus.execute MainThread -> 1-3-0-1-0-2-149-203
2018-10-28 11:16:43,598 DEBUG modbus.execute MainThread -> 1-3-0-1-0-2-149-203
2018-10-28 11:16:43,637 DEBUG modbus.execute MainThread <- 1-3-4-1-29-0-0-107-201
2018-10-28 11:16:43,637 DEBUG modbus.execute MainThread <- 1-3-4-1-29-0-0-107-201
2018-10-28 11:16:43,639 INFO modbus.main MainThread (285, 0)
2018-10-28 11:16:43,639 INFO modbus.main MainThread (285, 0)
2018-10-28 11:16:43,914 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,914 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,914 INFO modbus_rtu.__init__ MainThread RtuMaster /dev/ttyUSB0 is opened
2018-10-28 11:16:43,916 INFO modbus.main MainThread connected
2018-10-28 11:16:43,916 INFO modbus.main MainThread connected
2018-10-28 11:16:43,916 INFO modbus.main MainThread connected
2018-10-28 11:16:43,917 DEBUG modbus.execute MainThread -> 1-3-0-0-0-2-196-11
2018-10-28 11:16:43,917 DEBUG modbus.execute MainThread -> 1-3-0-0-0-2-196-11
2018-10-28 11:16:43,917 DEBUG modbus.execute MainThread -> 1-3-0-0-0-2-196-11
2018-10-28 11:16:43,956 DEBUG modbus.execute MainThread <- 1-3-4-1-6-1-29-218-87
2018-10-28 11:16:43,956 DEBUG modbus.execute MainThread <- 1-3-4-1-6-1-29-218-87
2018-10-28 11:16:43,956 DEBUG modbus.execute MainThread <- 1-3-4-1-6-1-29-218-87
2018-10-28 11:16:43,957 INFO modbus.main MainThread (262, 285)
2018-10-28 11:16:43,957 INFO modbus.main MainThread (262, 285)
2018-10-28 11:16:43,957 INFO modbus.main MainThread (262, 285)
j2mod uses jSerialComm to handle access to the serial port and this error originates from there.
I would take a look at the source code of SerialPort.openPort
to see what the problem might be.
You might find yourself having to look at the native code here as well because jSerialComm is a JNI library.
Does the problem go away if you run as root?
Just pass port as ttyUSB0, and change ownership and group in all files of /usr/share/tb-gateway to root