AdvancedHMI Software
General Category => Open Discussion => Topic started by: TheColonel26 on August 07, 2018, 07:39:43 PM
-
What is the best way to detect if communications have stopped when using the OmronFINSEthernet Driver? It seems that when you are using subscriptions there are no exceptions thrown.
I am going to do some more investigation on this tomorrow, with a test app. I have the driver under several graph layers in my application I am working on so it is kinda hard to tell what is going on.
-
Try adding an event handler for the ComError event. It should fire on errors and loss of communication.
-
Nope :( After I am connected I disconnect the Ethernet Cable and I get nothing. The event is never raised.
For the record, I am using version 3.9.9.16. I did comment out the log files writes in the driver class, because at one put I was thinking it was causing a crash on the Raspberry Pi, but I don't think it actually was. Other than that it should be untouched.
-
You may want to try it with the latest version of 3.99.24
-
Alright Archie, sorry it took me a while to get back to this project.
I updated to Version 3.99y (which I think is the latest correct?)
the Com Error event is now firing however, it keeps passing this message back "DataStartIndex greater than data length", at least one occurrence of this is when I am doing an explicit write for example
startAddress = "W510.01";
dataToWrite = "1";
_FINsCom.Write(startAddress, dataToWrite);
it seems that the Write is successful and no exception is thrown, but the error event is fired. I also can't find where error event is raised in the Driver project so it must be in the closed source reference .dll? I did a search through the project with the message text but couldn't find it.
Also On a side note: I have noticed that when I write to a bit address the driver wants "0" or "1" however when I read a bit address, the driver now returns "True" or "False" can this be made consistent? I've had to create some workarounds in my code to address this.
EDIT: Actually now I am not sure when that even is fired it might be during an explicit Read.
-
The error code results from a response packet that contains no data. It could be a success packet from the write command. I won't have access to an Omron PLC until next week to test it.
I will make the Writing accept True/False in the next release. In the mean time, you can modify FINSBaseCom.vb to do it. Go to line 570 and modify the code to this:
'* Bit level writing clears bit 7
Dim MemoryAreaCode As Byte = address.MemoryAreaCode
If MemoryAreaCode > &H80 AndAlso address.BitsPerElement = 1 Then
MemoryAreaCode -= CByte(&H80)
'* Convert True/False to 1/0
For index = 0 To dataToWrite.Length - 1
If dataToWrite(index).IndexOf("true", 0, dataToWrite(index).Length, StringComparison.CurrentCultureIgnoreCase) >= 0 Then
dataToWrite(index) = "1"
ElseIf dataToWrite(index).IndexOf("false", 0, dataToWrite(index).Length, StringComparison.CurrentCultureIgnoreCase) >= 0 Then
dataToWrite(index) = "0"
End If
Next
End If
-
Thank you Archie, Please let me know what you find.