5
« on: February 28, 2016, 11:42:37 AM »
My Replies in RED
Let's first consider what is realistic on reading that much data. On an ideal network connection, which would be a single cable between the HMI and the PLC, only AdvancedHMI communicating to the processor, and not Ethernet/IP devices being scanned by the PLC. Under that scenario you can expect and average round trip read of about 5ms per packet.
Now let's assume the worst case of data being read. If the 80 string and 80 DINTs required a packet for each read, then it would take 160 reads. 160x5=800ms
It looks like your Sheet1Bins are an array, which I will assume are the strings. The maximum packet size is 508 bytes. Each string requires 80+ bytes. Then about 25 bytes for header information. So the driver will only be able to read 4 or 5 strings per packet. If it is 4 strings, then it requires 20 packets to read all 80. Once again in an ideal network, that would take about 100ms to complete.
I have a total of 8 Arrays in the processor. 4 STRING[20] and 4 DINT[20]
If the 80 DINTs are in an array, they can easily read in a single packet, therefore an additional 5ms.
They are in 4 arrays of 20 each
Total round trip should be 105ms based on a few assumptions about your setup.
What do you have PollRateOverride set to? What update rates are you seeing now? Is DisableMultiServiceRequest set to 0?
DisableMultiServiceRequest = False
PollRateOverride for EthernetIPforCLXCom1 = 100
PollRate for DataSubscriber21 = 0
The best tool for seeing where the bottleneck is WireShark. Simply start a packet capture, then start the HMI. You will fairly easily see the variable names in the packets to see how requests are handled.
I will look into this
I also see that you are using the DataChanged event, which will only fire when the first element of the array changes. To get a continuous update no matter what changes, you will need to use the DataReturned event.
Sorry, I had it that way initially but was playing with it to see if Changed would speed up anything
Just another question out of curiosity, but why are you using a DataSubscriber to push values into a Label, when a BasicLabel will do this without the need to write code?
I read in another post somewhere that this method was suggested. I initially used the BasicLabel but again experienced a slowing as I added more strings. I am trying to have one screen show data from different PLCs and Different Programs based on the button used to launch the form. For example:
On MainForm:
If Button1 is pressed: (PLC1 Program1)
- Set IPAddress to 192.168.3.10
- Set ProgramName to "Program:Kit_Data1." for prefixing to "Sheet1Bins[0]" for the PLCAddressValue
If Button2 is pressed: (PLC1 Program2)
- Set IPAddress to 192.168.3.10
- Set ProgramName to "Program:Kit_Data2." for prefixing to "Sheet1Bins[0]" for the PLCAddressValue
If Button3 is pressed: (PLC2 Program1)
- Set IPAddress to 192.168.3.11
- Set ProgramName to "Program:Kit_Data1." for prefixing to "Sheet1Bins[0]" for the PLCAddressValue
If Button4 is pressed: (PLC2 Program2)
- Set IPAddress to 192.168.3.11
- Set ProgramName to "Program:Kit_Data2." for prefixing to "Sheet1Bins[0]" for the PLCAddressValue
Is BasicLabel a better method?
Make any sense?
So do I need to break up the String reads to separate subscriptions?
I am considering making the String Reads event driven from the PLC. They do not need to update as often as the DINTs.