AdvancedHMI Software
General Category => Support Questions => Topic started by: aduhaime2003 on November 30, 2015, 09:06:36 AM
-
I've run into a problem recently where I am trying to write parameters for a run of a system into the PLC. When I'm writing actual numerical values everything works fine but I have some values that are Booleans. This is what I'm writing currently (and where I'm stuck):
For count As Integer = 0 To index
SegmentNumber = SegmentSetpoints(index, 1) 'if the segments are read out of order then use the segment # field to indicate placement
Label1.Text = "Segment " & count & " is being downloaded."
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].number", SegmentSetpoints(index, 1))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].next", SegmentSetpoints(index, 2))
* EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].loop", CInt(Int(SegmentSetpoints(index, 3).Equals("true"))))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].durationSec", SegmentSetpoints(index, 4))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].startTempSP", SegmentSetpoints(index, 5))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].endTempSP", SegmentSetpoints(index, 6))
*EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].ramp", CInt(Int(SegmentSetpoints(index, 7).Equals("true"))))
*EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].soak", CInt(Int(SegmentSetpoints(index, 8).Equals("true"))))
*EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].lastSegment", CInt(Int(SegmentSetpoints(index, 9).Equals("true"))))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].aquisitionInterval", SegmentSetpoints(index, 10))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].TCHHalarmLevel", SegmentSetpoints(index, 11))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].TCLHalarmLevel", SegmentSetpoints(index, 12))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].TCHLalarmLevel", SegmentSetpoints(index, 13))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].TCLLalarmLevel", SegmentSetpoints(index, 14))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].RoomHHalarmLevel", SegmentSetpoints(index, 15))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].RoomLHalarmLevel", SegmentSetpoints(index, 16))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].RoomHLalarmLevel", SegmentSetpoints(index, 17))
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].RoomLLalarmLevel", SegmentSetpoints(index, 18))
Next
The asterisks are where my attempt is. I tried to convert the Boolean into an integer and write that but gives me an error: Object reference not set to an instance of an object.
Any advice for this would be great appreciated.
-
Try this for turning it into an integer
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].loop", IIf(SegmentSetpoints(index, 3) = vbTrue, 1, 0))
-
Thank you for answering so quickly. I used your suggestion and it caused a different kind of error, this time in the EthernetIPforCLX in the section where it writes to the DLL.
CIP Error - Unknown Code 255
Do you have any experience with this error since Visual Basic isn't very descriptive with what's going on?
Thanks again in advance for any help or advice
-
That's a bit over my head, but have you tried just sending a 1 or a 0?
Like this
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].loop", 1)
or
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].loop", 0)
That should be as simple as it gets.
Hope this helps.
-
It seems like doing that would be easier in the long run. I'll see how I can change the boolean bits I have to binary. Thanks again for your help.
-
But, does that work?
If it does then you could do something like this
dim intLoop as integer= IIf(SegmentSetpoints(index, 3) = vbTrue, 1, 0)
EthernetIPforMicro800Com1.Write("PROGRAMABLECONTROL.Segments[" & SegmentNumber & "].loop", intLoop)
-
That actually works perfectly with the solution I had in mind. Tested the code and it works. Thanks A lot. I was stuck on this for a while now
-
Great, Glad I could help.