Difference between revisions of "Reading Complete UDT with ControlLogix Driver"

From AdvancedHMI
Jump to: navigation, search
(Created page with "Since UDTs are complex variable types defined by the user, the driver cannot easily know how to parse the data when reading from the PLC. In the past the method was to read ea...")
 
m
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
Since UDTs are complex variable types defined by the user, the driver cannot easily know how to parse the data when reading from the PLC. In the past the method was to read each UDT item individually. The problem with this is that it is not very efficient. For a while, it has been possible to read a UDT, but the result would be a string a hex values that had to be split up, converted to values, then parsed which was fairly tedious. As of version 3.99x, a new method was introduced to help ease the pain of efficiently reading complete UDTs. This method is ReadRaw. The following code shows how to use this method and parse the UDT:
+
Since UDTs are complex variable types defined by the user, the driver cannot easily know how to parse the data when reading from the PLC. In the past the method was to read each UDT atomic value tag individually. The problem with this is that it is not very efficient. For a while, it has been possible to read a UDT, but the result would be a string a hex values that had to be split up, converted to values, then parsed which was fairly tedious. As of version 3.99x, a new method was introduced to help ease the pain of efficiently reading complete UDTs. This method is ReadRaw. The following code shows how to use this method and parse the UDT:
[code]
+
 
 
   Dim Year, Month, Day, Hour, Minute, Second As Integer<br>
 
   Dim Year, Month, Day, Hour, Minute, Second As Integer<br>
 
   Try
 
   Try
Line 23: Line 23:
 
       MsgBox("Erorr reading data. " & ex.Message)
 
       MsgBox("Erorr reading data. " & ex.Message)
 
   End Try
 
   End Try
[/code]
+
 
 +
By using this method as opposed to reading each atomic element individually will increase read rate by a factor of almost 6. A simple test had shown the individual reads to take about 55-60ms. Reading the UDT in a single read takes less than 10ms.
 +
 
 +
[[File:DateTimeUDT.png]]

Latest revision as of 06:43, 15 September 2017

Since UDTs are complex variable types defined by the user, the driver cannot easily know how to parse the data when reading from the PLC. In the past the method was to read each UDT atomic value tag individually. The problem with this is that it is not very efficient. For a while, it has been possible to read a UDT, but the result would be a string a hex values that had to be split up, converted to values, then parsed which was fairly tedious. As of version 3.99x, a new method was introduced to help ease the pain of efficiently reading complete UDTs. This method is ReadRaw. The following code shows how to use this method and parse the UDT:

  Dim Year, Month, Day, Hour, Minute, Second As Integer
Try '***************************************************** '* Read the raw byte stream of the UDT, then parse '***************************************************** Dim b() As Byte = comComponent.ReadRaw(tagName)
'********************************************************************** '* Check the number of bytes returned to ensure we did get enough data '********************************************************************** If b.Length >= 12 Then Year = BitConverter.ToInt32(b, 0) Month = BitConverter.ToInt32(b, 4) Day = BitConverter.ToInt32(b, 8) End If
If b.Length >= 24 Then Hour = BitConverter.ToInt32(b, 12) Minute = BitConverter.ToInt32(b, 16) Second = BitConverter.ToInt32(b, 20) End If Catch ex As Exception MsgBox("Erorr reading data. " & ex.Message) End Try

By using this method as opposed to reading each atomic element individually will increase read rate by a factor of almost 6. A simple test had shown the individual reads to take about 55-60ms. Reading the UDT in a single read takes less than 10ms.

DateTimeUDT.png