A Free HMI with Eye Catching Graphics is Now Available

Do you or do you plan to include OPC functionality? If not, I think it would open up a huge potential for connectivity. I know it's possible in VB.net, I just never got around to messing with it. But if your package could connect to an OPC service, you'd literally have a pathway for almost every make and model of PLC to connect to the software. The only downside is you'd need a separate OPC progam like Kepware or (shudder) RSLinx to interface with it. But at least you wouldn't have to develop every platform independently.
 
Do you or do you plan to include OPC functionality?
There is an OPC client (OPCComm) included with the project. Support is very limited because there are so many OPC drivers out there. OPC is the least desirable driver because it is based on the older ActiveX technology and not very friendly with .NET
 
Hello to all.
First I would like to say thanks to Archie for AdvancedHMI.
I bought the Basic Label manual. In the manual it talks about KeyPadMax and KeyPadMin but in the version that I have (Betav236) they are not there. Have they been removed for some reason. Can i download an older version and use the basic label from that version. Thanks in advanced.
 
In the manual it talks about KeyPadMax and KeyPadMin but in the version that I have (Betav236) they are not there. Have they been removed for some reason. Can i download an older version and use the basic label from that version.
That was a timing issue with the release of the manual versus the software. The manual was written based on version 3.27 which was supposed to be released before the manual was made available. But some major changes in the ControlLogix driver held up its release. A newer version will be available this weekend that will have the KeyPadMin and KeyPadMax properties.
 
Has anyone come up with a good method of datalogging with advanced hmi yet? I would like to be able to track uptime and display it with a nice graph. I remember Archie mentioning a datalogging module in the future but I don't see it available for download.

Thanks!
 
Thank you Archie for the quick response.

gbeaker

I'm using the database utilities that are built into vb.net and logging information to an Acess mdb data base. I'm currently using one database file with multiple tables.
Each table contains a certain type of data. One is called UserLogs which contains data such as program start up and shut down, current loged in user, opening or closing of forms. I'm going to be controlling 10 Micrologix 1100 plc's when all is said and done. I'll have 3 tables for each plc. XXXXAnalog, XXXXALARM and XXXXDATA. The XXXX represent the room number. The XXXXAnalog will hold room specific readings from 5 temperature sensors and one humidity sensor. The XXXXALARM will hold room specific alarms, ie over temp, under temp, fan failure etc. And XXXXDATA will contain room specific information such as when the door is opened or closed, the room is turned on or off, heating or cooling turn on or off. Each table also records the time, date, user that was logged on and there access level.

The rooms that I've mentioned are Banana Ripening Rooms. They are temperature and humidity controlled.
 
Dan,

How are you determining when to write to the database? Based on tag changes for the actions/alarms and timers for the data logging?

Thanks!
 
For the alarms I'm using Archie's MessageDisplayByBit. I' firing an event on that based on the TextChanged. I'm setting some Boolean values in an array the first time the text changes to a certain alarm and then comparing it with If Then to determine whether or not to log the alarm the next time the text changes to the specific alarm. Currently I'm just using a button to clear the alarm and change the Boolean back to False.

The following lines are contained in the Public Class of the main form.


Code:
Dim cn As OleDbConnection
Dim cmd As OleDbCommand
Dim sqlstr As String, ans As Boolean

Dim logfilename As String = "C:\development\logs\BRC-DataBase.mdb"
Dim strConnection As String =       "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & logfilename

Public Shared userlevel As String
Public Shared username As String
Public Shared logonstatus As Integer
Public Shared logmessage As String
Public Shared logtype As String
Public Shared logvalue As String

Dim BR24ALARMLEFT(9) As Boolean
The following is the code for my TextChanged event.
Code:
 Private Sub LEFTALARMMESSAGE24_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LEFTALARMMESSAGE24.TextChanged

        If Me.LEFTALARMMESSAGE24.Text = "FAN FAILURE" And Me.BR24ALARMLEFT(0) = False Then
            Me.BR24ALARMLEFT(0) = True
            MainForm.logmessage = "LEFT FAN FAILURE"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "LOW PULP TEMP" And Me.BR24ALARMLEFT(1) = False Then
            Me.BR24ALARMLEFT(1) = True
            MainForm.logmessage = "LEFT LOW PULP TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "HIGH PULP TEMP" And Me.BR24ALARMLEFT(2) = False Then
            Me.BR24ALARMLEFT(2) = True
            MainForm.logmessage = "LEFT HIGH PULP TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "LOW DISCHARGE AIR TEMP" And Me.BR24ALARMLEFT(3) = False Then
            Me.BR24ALARMLEFT(3) = True
            MainForm.logmessage = "LEFT LOW DISCHARGE AIR TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "HIGH DISCHARGE AIR TEMP" And Me.BR24ALARMLEFT(4) = False Then
            Me.BR24ALARMLEFT(4) = True
            MainForm.logmessage = "LEFT HIGH DISCHARGE AIR TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "LOW RETURN AIR TEMP" And Me.BR24ALARMLEFT(5) = False Then
            Me.BR24ALARMLEFT(5) = True
            MainForm.logmessage = "LEFT LOW RETURN AIR TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

        If Me.LEFTALARMMESSAGE24.Text = "HIGH RETURN AIR TEMP" And Me.BR24ALARMLEFT(6) = False Then
            Me.BR24ALARMLEFT(6) = True
            MainForm.logmessage = "HIGH RETURN AIR TEMP"
            MainForm.logtype = "BR24ALARMLEFT"
            Call Logdata()
        End If

    End Sub
And this is the sub that actually logs the data.

Code:
 Public Sub Logdata()


        Dim time As DateTime = DateTime.Now
        Dim tformat As String = "yyyy MM dd HH:mm:ss"
        Dim tdate = (time.ToString(tformat))

        cn = New OleDbConnection(strConnection)
        cn.Open()

        sqlstr = "INSERT IGNORE INTO  " & MainForm.logtype & "(DateTimeStamp,Username,AcessLevel,Logon,Logmessage) VALUES('" & tdate & "','" & MainForm.username & "','" & MainForm.userlevel & "','" & MainForm.logonstatus & "','" & MainForm.logmessage & "')"


        cmd = New OleDbCommand(sqlstr, cn)
        ans = cmd.ExecuteNonQuery()
        If (ans = True) Then
            ''message added
        Else
            '' error
        End If
        cmd = Nothing ''Disposing the object from memory
        cn.Close()

    End Sub
For the actions I'm causing the log routine to be triggered when buttons are clicked on or other such actions.

Code:
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LockButton.Click

        MainForm.logmessage = "Form Locked"
        MainForm.logtype = "UserLogs"
        Call Logdata()

        Me.ControlBox = False
        Me.LockButton.Visible = False
        Me.UnLockButton.Visible = True

    End Sub
For status changes, on my main form I'm using BasicIndicator's which change color when the status changes. I'm using a timer in conjunction with an If Then and an array as I did in the alarm routine.

Code:
 If Me.BR24STATUS(0) = False And Me.DOOR24.SelectColor2 = True Then
            Me.BR24STATUS(0) = True
            MainForm.logmessage = "DOOR CLOSED"
            MainForm.logtype = "BR24DATA"
            Call Logdata()
        End If
MainForm.logmessage is the actuall message which gets stored in the data base.

MainForm.logtype controls which table it gets stored in. This has to match the Field Name in your form exactly. Keep in mind that there are names that are reserved and if you try and us them it'll give you a run for your money trying to figure it out. "USER" an "LEVEL" are 2 of these that I tried to use. I'm now using "UserName" and "AcessLevel"

On the data logging I'm using just the timer. Currently I'm reading from the plc for each sensor each and very time individually. I'm about to change it so that it gets the analog data from the BasicLabel.Text that I've already got on my main form. In my current incarnation I'm receiving 0 for the data on a regular basis. I'm hopping the by using the BasicLabel.Text method that it will serve as a buffer and also decrease the load on the communication routine since I've already got the data I want in the program.

Hopefully I didn't get too windy and it makes since to you.
 
Ok, now have another question. Is there a way to disable communication drivers at run time with code so that if one of the plc's is off line there is no errors with the lack of communications. I would also like to detect the plc being off line and disabling the associated forms and controls until a time that the plc is put back online.

Using 326 beta
VB Express 2010
Windows 8 64 bit
Ethernet communications to Migrologix 1100
Thanks.
 
New Version 3.27 available

The latest version has been posted. This one should address many of the issues in the ControlLogix driver.

By popular demand, then TwinCAT driver has been put back in the package. However, so note this driver does have the limitation that will not allow it to run on a PC that has TwinCAT installed on it. It is due to a conflict with the AMS router and I have been unable to obtain the information from Beckhoff to get around this. But something is better than nothing.

Don't miss one of the "cool" features added to the MessageDisplayByValue. A SpeakMessage property has been added that will make the computer read out the message as they come up.
 
Whats the easiest or best way to convert a project that was created with Betav236 to the new version.
The easiest way to upgrade an existing project:

- Open the latest release in Visual Studio
- Once in Visual Studio, if any forms are open, then close them
- Right click the AdvancedHMI project in Solution Explorer and choose Add Existing
- Browse to the .vb files of your previous project
- It will probably ask about replacing MainForm, click yes
- Rebuild the solution

From 3.26 to 3.27, I don't think you will get any errors. If you do, you will have to address them one at a time
 
Hi Archie,

I'm using a Beckhoff CX-5020 running Windows xp embedded. I've installed vb.NET on my PC and connected to my plc from my computer then I created a sample project (The timer example that you have a video tutorial about) and it works fine if I run it from my PC. When I copy the .exe file to my PLC and try to run it from there it can not open the file and windows encounters an error. I've installed .NET framework V4 on my PLC as well.
Am I doing something wrong here?

Thanks in advnace :)
 

Similar Topics

Have a GE IC200CPU002 running a alarm monitoring program All of them are inputs except for the alarm sounder Looking for a free HMI which would...
Replies
2
Views
833
The C-More remote HMI app on APP Store, Google Play and Amazon is now available free. The nominal charge has now been removed...
Replies
5
Views
2,397
Hi I have a phoenix contact installation and I'm looking for hmi software to manage my project better. It has to be as cheap as possible, free if...
Replies
3
Views
2,501
My brother recently bought a KEP HMI for a small project, he asked me to check out the software which is called EasyBuilder 8000...
Replies
1
Views
3,739
Hello, i have a data historian system it is a GE proficy historian. i need an application that can be used to display the data in a HMI format. i...
Replies
25
Views
9,606
Back
Top Bottom