AdvancedHMI Software
General Category => Support Questions => Topic started by: Darrell on October 18, 2014, 10:39:30 PM
-
Great Program , started playing with this a week ago and can't leave it alone.
Very new to VB , not sure how I can force a value into a PLC address from HMI , I'm using a Micro logix 1400
I want to us a button to force a number into and integer file or anolog output for testing puposes.
thanks
Darrell
-
You can use a write, the way to use is:
ResDBClientPN = "94939291"
'Writes the value to PLC string and then to STATUS integer register
Try
EthernetIPforCLXCom1.Write("ResTestData", ResDBClientPN)
EthernetIPforCLXCom1.Write("ResTestStatus", 15)
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
I wrote two different values, the fisrt one is a string ("ResTestData") followed by the value you want to write (ResDBClienPN), I used a variable as an example, but you can write text directly, depending on what you want to do. The second value is an integer label ("ResTestStatus") into who I wrote a value of 15.
Remember to do all this inside a Try...Catch, as it will prevent your application from frozing with an error when the PLC is offline, if you want you can write a message like "Cannot write values to PLC, must be offline" or alike to warn the user, into the message box, but this is totally up to you.
Remember you are not "forcing" values, think of this program as exactly how it works an HMI in real life, so you are reading and writing values like any other device into the PLC.
The same applies to .Read method, but you only specify the tag or direct address like N7:0 that you want to read.
There is a topic related to this method to be an asynchronous way to write and read, and can lock the user interface from a moment to several time, not being the best method. To read a value from the PLC use basic labels, or better a datasubscriber (it does not generate a visible control if you do not want the user to see something) and will be much more efficient in communication use as is designed with that in mind, basic labels have datasubscribers embedded. I am not aware if Archie added a different method to write values, but so far this has worked fine for me.
A lot of good information is spreaded in here in the forums and you need to read a lot to get it, but it is worth it.
-
If you are wanting to do a "force" as done in RSLogix, it is not supported by the AdvancedHMI drivers.
-
No I'm using to do some testing of some belimo actuators for positioning , when i need to force a different value into an analog output . I make my output rung always false and the force the value into the output directly . This just makes it easier for me , than constantly entering a value by hand in my testing stages.
But a way to force an output would be a nice option for me in my line of work.
Thanks
Darrell
-
As long as your rung that moves the value into the output is false, you should be able to use a BasicLabel with PLCAddressKeypad set to the output address, then run the app and click on the BasicLabel to enter a new value.
-
I'm using a trackbar with a range from 0 to 16383 , I also have the value display in a label , then using a button click the value is forced into the integer in the code below. what I would like is to have the value go into N14:50 automatically from the trackbar and not have to use the button to force the value.
'Writes the value from TrackBar1 into the PLC address N14:50
Try
EthernetIPforPLCSLCMicroCom1.Write("N14:50", TrackBar1.Value)
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
This is the code I used for the TrackBar & the Label
Private Sub TrackBar1_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll
End Sub
Private Sub TrackBar1_ValueChanged(sender As Object, e As System.EventArgs) Handles TrackBar1.ValueChanged
Label11.Text = "Analog Out = " &
Format(TrackBar1.Value, "#")
End Sub
Private Sub Label12_Click(sender As System.Object, e As System.EventArgs) Handles Label12.Click
TrackBar1.Value = CInt(CType(sender, Label).Text)
End Sub
Darrell