I am having a timeout problem with my RTU device over TCP.
Starting off with a few tags I have no issues of connecting or disconnecting. I get the data that I need and can communicate with the controller easily.
I then import ~3000 tags from a csv file. I have all the addresses from a communication manual and I know that most of them are valid.
Then - disaster. Once they are imported the device will timeout and then the setting that toggles “3 Timeouts requires reconnect” makes the device disconnect and reconnect. Once disconnected, all the tags go Null (even the few that were formerly working).
Now, I am lead to believe from other forum posts that this is a Timeout setting problem. I have tried all the proposed solutions and I dont seem to be getting any progress.
The current settings I have are :
Scan Class
Slow Rate : 1000
Stale Timeout : 10000
Mode : Direct
Data Mode : Subscribed
Device Properties
Communication Timeout : 2000
Force Reconnect : Enabled
This should be very close if not identical to the initial setup from a fresh install. Every other setting on the device is default.
The two errors that I am getting in the console log are as follows.
[code] drivers.ModbusOverTCPDriver[Controller RTU_TCP].ReadHoldingRegistersRequest Request failed. FailureType==TIMEOUT
java.lang.Exception: Request failed by TimeoutDaemon due to timeout: ScheduledRequest[com.inductiveautomation.xopc.drivers.modbus2.requests.ReadHoldingRegistersRequest@fc3a58]
at com.inductiveautomation.xopc.driver.api.BasicRequestCycle$TimeoutDaemon.failRequests(BasicRequestCycle.java:349)
at com.inductiveautomation.xopc.driver.api.BasicRequestCycle$TimeoutDaemon.run(BasicRequestCycle.java:305)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
WARN 1:30:29 PM drivers.ModbusOverTCPDriver[Controller RTU_TCP].BasicRequestCycle.TimeoutDaemon ScheduledRequest[com.inductiveautomation.xopc.drivers.modbus2.requests.ReadHoldingRegistersRequest@fc3a58] request with key “java.lang.Object@1ac81c9” failed due to timeout.[/code]
Things I have tried:
Turn Device Connection Timeout to 30000 - results in Data never getting to Tags.
Turn Device Connection Timeout to 1000 - results in device being stable for a few seconds, data that is pushed to tags are incorrect values. Once disconnected stays that way longer.
Turn Scan class slow rate to 500 - Data is cyclically obtained through the list of tags but values are incorrect and disconnects after every 3 sets.
Turn Scan class time Stale timeout to 15000 - No noticeable effect.
When disabling forced reconnect after 3 timeouts - all of the tags become bad quality.
Each one of these changes have the same error in the console log.
If all tags are disabled Connection timeout is set to 2000 slow rate is set to 1000 and stale timeout is set to 10000 - I can get data without errors for 5 tags. I then slowly increased the number of tags active (5, 60, 150) These all received correct data in a timely manner as well as kept the controller connected. Once I added up to 345 tags the disconnecting and bad quality occured again. Slowly removing these tags all the way back down to 5 active tags did not have any affect and the tags remained bad quality.