AdvancedHMI Software
General Category => Support Questions => Topic started by: xavi on September 23, 2015, 06:30:36 AM
-
Hi to all!
I'm quite new with this software so sorry if my question is superfluous, but, I'm able to read from the CJ1W on the address W0 and D0, but when I try to write (using the basicLabel keypad or my on button with a call to OmronEthernetFINSCom1.write("W0","1234") ) the value is not writed to the PLC. I'm also connected at the same time with the CXProgram so if i modify the value from there, I see it immediately on another component (gauge).
The parameter of the OmronEthernetFINSCom seem ok, I tryed 2 differents configurations that work for reading:
1.- Just setting the ipAddress
2.- Setting the ipAddress and the networkaddress and the nodeAddress.
I was debugging the program and seems to SEND the FINS Frame... I'm completely lost, any help?
Thanks!
-
If you are seeing values on the controls, that verifies your communications are good.
I don't have a CJ1W to test with, but I tried this quick test on a CP1H and version 3.99:
- Add an OmronEthernetFINSCom driver and set the IPAddress
- Add a BasicLabel and set both PLCAddressValue and PLCAddressKeypad to W0
- Run the application
- Click the BasicLabel and enter a value of 123
The BasicLabel changed to the new value. I was also online with CX-Programmer and watched the value change there also. So everything work as expected on my tests.
Does your PLC possibly have some protection that would keep the values from changing? Try putting the PLC in program mode to see if it works. Could you do a WireShark capture during a write to W0 and post the capture? From that I will be able to see if the PLC returns an error code that AdvancedHMI is not displaying.
-
Hi Archie!
I tryed to put the PLC in Programm but nothing.
I'll try to install the wireshark and try to sniff those packages.
Thanks!
-
Here you have the WireShark capture, I made a read and then a write.
Thanks!
-
The End Code is 0x1103
According to WireShark : First address in inaccessible area
Based on the Omron reference manual:
0x11 : Parameter Error
0x03 : Address Range Error
Probable Cause : The start address in command process is beyond the accessible area.
Check the area being processed and set the correct range.
I did a WireShark with my CP1H and did a side by side comparison. There are 2 differences I see:
Destination Network Address is 0 because I am directly connected to my controller
Destination Node Number is also 0. I'm not sure if the CP1H even uses this
You are getting a successful read, so those values must be correct.
The only thing I see that stands out is the Beginning Address bit. The AdvancedHMI driver sends 0xff. I wonder if the CJ doesn't like something about that. Tomorrow I will have access to a CS1 controller and will test to see if I can write to the W0 on that controller.
-
Whoaaam this WireShark is great.
I was analyzing the command data inside the FINS and I realized that the Basic label was sending a 0xff as the initial address for the writing, but for the reading it was 0x00.
Then I created a button for writing using the .write() with the address modified to w0.0 in stead of w0 and then it works JUST for BITS obviously, so at least I know that I can write and there's no protection.
So, it seems that, as you also wrote (you answer while I was writing), that the problem is the initial address 0xff if we try to write the whole word, but is back to 0x00 when we try to read just one bit.
I also try to write bit 1, and it also worked, 0x01...
By now I can make a for loop to write 1 by 1 all the bits of the word, but I think there must be something more efficient to fix it ;)
Thanks!
-
Hi Archie!
Finally I kind of "fix it" for my application.
As I'll be only working with words I change my call to write, in stead of calling the write with the address in a string I make the call to the write that accepts an OmronAddress, so after the call to the constructor of the OmronAddress I check the value of bitnumber, if it is eq to 255 I overwrite it to 0. That's all.
MfgControl.AdvancedHMI.Drivers.Omron.OmronPlcAddress address = new MfgControl.AdvancedHMI.Drivers.Omron.OmronPlcAddress(textBox4.Text);
if (address.BitNumber == 255)
address.BitNumber = 0;
string[] arrayCadenes = { TextBox2.Text };
omronEthernetFINSCom1.Write(address, arrayCadenes);
By now and for me is working ok.
-
Thanks for the feedback. I will work this fix into the driver
-
Try this to see if it fixes the problem.
- Open AdvancedHMIDrivers\Omron\FINS\FINSBaseCom.vb
- Go to line 880 and modify the code to this:
dataPacket.Add(CByte((address.ElementNumber) And 255))
'* 24-SEP-15 A 0xff was going in the bit position if no bit specified. This is so returned data doesn't think a bit was requested
Dim BitNumberByte As Integer = Requests(CurrentTNS).BitNumber
If Requests(CurrentTNS).BitNumber < 0 Or Requests(CurrentTNS).BitNumber > 64 Then
BitNumberByte = 0
End If
dataPacket.Add(CByte(BitNumberByte))
dataPacket.Add(CByte((address.NumberOfElements >> 8) And 255))