Howdy all,
It's my first post here. I've lurked for quite some time, but it's time to actually ask a question this time. It has probably been asked before, but I'm just unsure how to go about writing it out.
I work in controls at my facility, and our controls team is quite small. Basically just enough to get 24/7 coverage, plus a manager that is on call as necessary. Our material handling techs (electromechanical) outnumber us roughly 12:1. The overwhelming majority of them are understandably less technically inclined than our controls team, and won't necessarily set up their SCADA software on a daily basis in a manner that helps them find issues in the building. That's not really their fault - their laptops aren't nitrous-equipped and the SCADA isn't exactly lightning quick either. And it's multiple steps to filter all of the messages shown down to what's relevant at any given moment.
I've already started putting together an HMI that covers our main piece of equipment. I don't think I've necessarily gone about the organization of it particularly well, as I'm neither a software engineer nor experienced designing HMIs.
That said, here's the general picture of what we have:
One big sorter with four induction areas - each of which has either three or four induction lines. Each of these induction lines has an (effectively) identical induct. Each has a photoeye (PE) that corresponds to a belt, as well as a PE array. These PEs and their reflectors are a continuous source of faults on the inducts.
The sorter also has a number of other detectors, pullcord e-stops, and various other potential STOP causes.
So far, I have a form (MainForm) that contains a TabControl. There are a few tabs, showing the status of e-stops and other sensors/detectors.
I have set up one of the tabs to show a collection of PilotLights that each show the "faulted" status of an induct. I also have the .Click event for each PilotLight set a Public "called_value" in a NewForm, then NewForm.Show()
This NewForm has a Private "shown_value" which is set to "called_value" so long as "called_value" != Nothing, and a SevenSegment.Value is set to "shown_value" on NewForm.Load()
Here's where I'm coming up short:
I want to have NewForm to have a GroupBox containing RadioButtons indicating which induct is being shown. I also want the SevenSegment to indicate the same. I would like to RadioButtons to update any components or objects in NewForm to point to the appropriate induct if they are changed. I would also like, if NewForm is already shown, the pressing of one of the PilotLights on MainForm to update everything in NewForm.
I think I'll be able to figure out all of the changing of Tag references for all of the indicators I intend to put into NewForm, so long as I get some help with the overall structure/framework/form of the solution.
Would it be best to make a Public Sub UpdateForm() to update the form, and make each OnClicked/.Click() for the RadioButton/PilotLight call UpdateForm()? Is there a more idiomatic way to go about this in VB in general, or in AHMI's framework? Have I gone about constructing my HMI like a fool from the very get-go? Should I go back to digging ditches and pulling wire?