Free AdvancedHMI has been Updated - Now with Ethernet/IP driver

Update, It works! But only for integers

Our 2nd generation controller uses integer math. The first 4 registers are
N7:0 Command Position
N7:1 Target Position
N7:2 Actual Position
N7:3 Counts

I modified the IP address of of EthernetIPforSLCMicro1 to 192.168.0.209 so I can access the controller at Delta over my VPN. The rest of you should use rmc100.deltamotion.com

The example meter and 4 digit display work well and update quickly. I need to make that a 5 digit meter for use with the motion controller. I don't see a means of updating the number of digits in the properties list and my motion controller falls off the edge of the world when it goes above 9999.

However, I tried accessing floating point registers on our 3rd generation controller. It uses 32 bit floats for just about everything. I got the error
"
A first chance exception of type 'System.Net.Sockets.SocketException' occurred in System.dll
"
I tried accessing a register at F8:8 which is the actual position. The address for me is 192.168.0.208 F8:8 but from outside the VPN you should use rmc70.deltamotion.com F8:8

Another edit. I can't enter rmc100.deltamotion.com into the IPAdress field so you will need to ping rmc100.deltamotion.com and then enter the IP address.
 
Last edited:
The example meter and 4 digit display work well and update quickly. I need to make that a 5 digit meter for use with the motion controller. I don't see a means of updating the number of digits in the properties list and my motion controller falls off the edge of the world when it goes above 9999.
Modified the Digital Panel Meter to allow up to 6 digits. There is a new proprty named "NumberOfDigits"

However, I tried accessing floating point registers on our 3rd generation controller. It uses 32 bit floats for just about everything. I got the error
"
A first chance exception of type 'System.Net.Sockets.SocketException' occurred in System.dll
"
I tried accessing a register at F8:8 which is the actual position. The address for me is 192.168.0.208 F8:8 but from outside the VPN you should use rmc70.deltamotion.com F8:8
IP Adress property will now accept a Host Name. An IP Address will start up faster, but you can use either one.

I tried the rmc70.deltamotion.com at F8:8 using a Digital Panel Meter and I get some numbers that drift between 5 and 9.

The updated project is posted on SourceForge as Beta 2.02

This update also includes a fix that allows the communications to recover automatically from a loss of communications.
 
Wow, that looks good

I was thinking of getting our ME to whip out some jpgs or pngs using solid works.

I will our HMI expert what he thinks is needed next and how easy it will be to do it. I have NEVER used VB.net until trying out the Advanced HMI. I hate HMI programming but I also realize it is necessary.

VB.net works a lot like Java and Netbeans.

I want to make a software HMI that our sales force can use.
 
I was thinking of getting our ME to whip out some jpgs or pngs using solid works.

I will our HMI expert what he thinks is needed next and how easy it will be to do it. I have NEVER used VB.net until trying out the Advanced HMI. I hate HMI programming but I also realize it is necessary.

VB.net works a lot like Java and Netbeans.

I want to make a software HMI that our sales force can use.
I'm not sure how VB.NET compares to Java because I have never written any Java code.

The .NET programming has a little bit of a learning curve, especially if you haven't done any Object Oriented Programming. But the learning curve is well worth it because of the speed and ease most common tasks can be done.

Adding more controls to the AdvancedHMI can be challenging to a new programmer. I've tried to cover most types of objects and animations so the existing controls can be used as a template.

If you have any controls you would like to see, let me know and I'll see if I can create them. I want to build the AdvancedHMI library to make it more appealing to use.
 
Would this work with SLC 5/04 processors that have their DH+ hooked to a ControlLogix gateway and a DH/RIO card?

The current Ethernet/IP driver will not support crossing over to DH+ because it will require DH+ node addresses which I have not yet implemented. The DF1Comm (serial driver) has node address properties (TargetNode and MyNode), so it can bridge onto DH+. I have done this with an Equustek DL3500 to go from RS232 to DH+. I've also done it by connection to the RS232 port on a SLC 5/04 and setting the pass-thru bit in order to access other PLCs on the DH+ using the DF1Comm driver.

Drat :( It won't work for most of the instances in my plant without the DH+ node addresses but I've got to hand it to you, this is really really nice!
 
archie
got a chance to use your free hmi software on a ml1100 over ether.great work.i have never used vb.net before is there away if a bit is set to send a email or text message.
 
Archie,

I apologize for not knowing this, I tried to find the answer, but was inconclusive.

Does the AdvancedHMI work with AB PLC5 over DH+?

Now that you are getting quite the list of IO server functionality, it may be nice to list the compatibility matrix somewhere ... on Sourceforge maybe.

I've got a small project I am planning on working with this on with Ethernet/IP to ControlLogix, and now I have an additional opportunity with PLC5 over DH+.
 
Send email

i have never used vb.net before is there away if a bit is set to send a email or text message.
The nice thing about AdvancedHMI being based on the VB environment is that nearly anything is possible. Here is a piece of sample code to send an email based on a bit, just right click the main form->View code to paste this in. I'll put this on my list to make it into a drag and drop component.

Code:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MainForm_Load([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] sender [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] System.Object, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] e [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] System.EventArgs) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Handles[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]MyBase[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].Load[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* Subscribe to this variable in the PLC[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]EthernetIPforSLCMicro1.Subscribe([/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"B3/0"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], 1, [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]AddressOf[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ValueReturned)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE]
 
 
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MessageWasSent [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Boolean[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'**********************************************************************[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* This will be called by the driver when data comes back from the PLC[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'**********************************************************************[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Private[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ValueReturned([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]ByVal[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Value() [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* is our bit true?[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Value(0) [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* be sure to only send once when bit goes from false to true[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Not[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MessageWasSent [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* put in you SMTP server and port number, 25 is the default for email[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] MailClient [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] System.Net.Mail.SmtpClient([/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"smtp.gmail.com"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], 25)[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* To and From[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Msg [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] System.Net.Mail.MailMessage([/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"[email protected]"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"[email protected]"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* Message details[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]Msg.Subject = [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Enter your subject here"[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]Msg.Body = [/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Enter the mail message body here"[/COLOR][/SIZE]
 
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* No authentication[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]MailClient.UseDefaultCredentials = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]True[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* Send the message[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Try[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* mark as sent so it will not resend every poll of the PLC[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]MessageWasSent = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]True[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]MailClient.Send(Msg)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Catch[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] ex [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Exception[/SIZE]
[SIZE=2]MsgBox([/SIZE][SIZE=2][COLOR=#a31515][SIZE=2][COLOR=#a31515]"Failed to send email"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Try[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Else[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#008000][SIZE=2][COLOR=#008000]'* Reset the variable used as an edge trigger[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]MessageWasSent = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]False[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Sub[/COLOR][/SIZE]
[/COLOR][/SIZE]
 
Archie,

Does the AdvancedHMI work with AB PLC5 over DH+?

Now that you are getting quite the list of IO server functionality, it may be nice to list the compatibility matrix somewhere ... on Sourceforge maybe.

I've got a small project I am planning on working with this on with Ethernet/IP to ControlLogix, and now I have an additional opportunity with PLC5 over DH+.
I'm hoping to get a web site put together with the details such as this.

I have never tested it with PLC5, but someone has reported to me that it doesn't work because the driver uses DF1 commands not supported by the PLC5. Once I get time and access to a PLC5, I want to get that modification done.

I have used it over DH+ with a SLC 5/04 by using channel 0 and setting the pass thru bit. I also used a DataLink/Equustek DL3500 converter to communicate over DH+

One thing to note is the Ethernet/IP driver currently only supports SLC and MicroLogix. The Contrologix protocol is a littler more complicated, so I haven't implemented it yet.
 
Hi Archie,

Excellent application! Just downloaded and tried it - worked first time (I have no VB experience but am now going to have a play!).

Just a quick question - should it be possible to display floating point values (with decimal positions)? I've played around with 'Number of Digits' and 'Decimal Position' but it still only displays the rounded value (i.e 2.46 = 2)...am i missing something simple/obvious?

Thanks.

Rob
 
Originally posted by Archie:

One thing to note is the Ethernet/IP driver currently only supports SLC and MicroLogix. The Contrologix protocol is a littler more complicated, so I haven't implemented it yet.

Will it work with the PLC/SLC Mapping in the CLX family? I thought that the CLX was interpretting the legacy Ethernet protocol and just mapping the data into arrays based on the address.

Keith
 
Excellent application! Just downloaded and tried it - worked first time (I have no VB experience but am now going to have a play!).

Just a quick question - should it be possible to display floating point values (with decimal positions)? I've played around with 'Number of Digits' and 'Decimal Position' but it still only displays the rounded value (i.e 2.46 = 2)...am i missing something simple/obvious?Rob
Thanks! It's nothing that you are missing. I haven't added true floting point support to the meters. It's not as visually appealing, but the BasicLabel will display floating point numbers.

Will it work with the PLC/SLC Mapping in the CLX family? I thought that the CLX was interpretting the legacy Ethernet protocol and just mapping the data into arrays based on the address.
At one time I was about to test that, but got pulled away before I could finish. I would be interested in knowing the results if anyone has or could try it.
 

Similar Topics

GitHub Link: Open Industry Project This is a side project I've been working on for some time. The goal is to provide an open platform for...
Replies
0
Views
128
Had an email from the e w o n marketing team this morning telling me that the e w o n free service will only be free under particular...
Replies
9
Views
359
Hi everyone, I'm in search of software for electrical drawings, preferably free but also interested in paid options. Any recommendations or...
Replies
33
Views
1,757
Hello, S7-200 is installed with dot matrix printer. its printer is not working. now I have changed the printer. Problem in new printer is that...
Replies
0
Views
237
We are to develop a first application in Codesys. It will contain motion (Softmotion) with drives on Ethercat (CSP mode). Off course there will be...
Replies
2
Views
966
Back
Top Bottom