Thursday, September 12

AdvancedHMI with Visual C# 2010

HMI หรือ Human Machine Interface คือ อุปกรณ์ที่ใช้ในการติดต่อระหว่่างผู้ใช้ กับ เครื่องจักร เพื่อใช้ในการควบคุมและการแสดงผล ผ่านทางหน้าจอ เรามักใช้ในการแสดงผลแบบกราฟฟิก ซึ่งส่วนใหญ่ จะแสดงผลในเชิงสัญลักษณ์ หรือไอค่อนที่เป็นตัวแทน เครื่องจักร ถังน้ำ ปั้ม วาล์วน้ำ มอเตอร์ไฟฟ้า และอื่นๆ ที่เป็นส่วนที่เราต้องการติดตามการทำงานของพวกมัน โดยจะแสดงสถานะ ค่าต่างๆ บนหน้าจอแสดงผล พร้อมกับโครงสร้างของระบบการทำงานที่เรายกมาแสดง
ในปัจจุบันมีโปรแกรมหลายๆ ค่ายที่สามารถแสดงผลแบบ HMI ได้ ซึ่งมีทั้งแบบที่ง่าย แต่เสียเงิน และแบบที่ยาก แต่ ฟรี ก็มี วันนี้ เรามาลองติดตั้ง AdvancedHMI กับ C# กันดูครับ
AdvancedHMI
เริ่มแรกก็ไปดาวน์โหลด AdvancedHMI จากที่นี่ http://advancedhmi.com/ จากนั้น ทำการแตกไฟล์ออก ไปวางไว้ที่ไหนก็ได้ครับ เพราะเราจะสนใจแค่ dll ไฟล์ของมัน
เปิดโปรแกรม Visual C# 2010 express ขึ้นมาครับ เริ่มสร้างโปรเจค ตามปกติ ในที่นี้ผมสร้างโปรเจคเป็น windows form application นะครับ
ต่อมาให้เราทำการ add toolbox ที่เป็นของ AdvancedHMI ขึ้นมา  อาจจะสร้าง Add tab ขึ้นมาแล้วตั้งชื่อ AdvancedHMI แล้วคลิกขวา Choose items.. ไปที่
Add components AdvancedHMI
แท๊ป .NET Framework Components ให้เรา Browse ไปที่เก็บไฟล์  AdvancedHMIBeta358\AdvancedHMIDrivers\Support\MfgControl.AdvancedHMI.Drivers.dll แล้วคลิกเลือก OK
AdvancedHMI components
เราจะได้ Components ที่ทาง AdvancedHMI สร้างมาให้
ทำการ Add reference MfgControl.AdvancedHMI.Drivers.dll เข้าไปกับโปรเจคด้วย
Add reference MfgControl.AdvancedHMI.Controls.dll
จากนั้น ก็ลาากวางๆ ได้เลยครับ จินตนาการเอาว่า เราจะสร้างระบบเฝ้าติดตามอะไร ในที่นี้ ผมสร้างระบบปั้มน้ำ โดยให้มอเตอร์ปั้มน้ำเข้าถัง หากระดับน้ำต่ำกว่า ระดับที่เราตั้งไว้ และมีวาล์วคอยปิดเปิดทางน้ำออก ซึ่งสามารถปรับอัตราการไหลได้
AdvancedHMI Form design
ที่ส่วนหัวของโค๊ด ให้ทำการ using MfgControl.AdvancedHMI.Controls; เข้าไปด้วย ถ้าต้องการสร้าง object เพิ่ม
ในการเขียนโค๊ดส่งค่าให้แต่ละ Component ไม่ว่าจะเป็น Guage , Tank  หรืออะไรก็ตามแต่ ที่มีการแสดงผล แสดงค่าต่างๆ ต้องเช็คให้ดีด้วย ว่ามันรับค่าเป็น float , int หรือว่า double ถ้าเราส่งค่าให้มันไม่ตรงชนิดที่มันจะรับ มันจะแสดงผลผิดพลาด ลองเอา mouse ชี้ค้างไว้ตอนเรา กำหนดค่า ให้ field ที่ชื่อ value ของมันดูครับ มันจะบอกไว้อยู่
image
AdvancedHMI object
ในที่นี้ ผมใช้ Timer 3 ตัวในการกำหนดจังหวะให้กับระบบ มาดูโค๊ดเต็มๆ กันเลยครับ
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MfgControl.AdvancedHMI.Controls;
namespace AdvanceHMI
{
    public partial class Form1 : Form
    {
        Random rnd = new Random();
        float waterActual = 100.0f;
        float flowrateIn = 2.0f;
        float flowrateOut = 2.0f;
       
        public Form1()
        {
            InitializeComponent();
            tank1.Value = waterActual;
            waterPump1.Value = false;
            txtWaterDetect.Text = "70";
            trackBar1.Value = 70;
            lbWaterLevel.Text = ((int)waterActual).ToString();
        }
        private void btnStart_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true; // timer system
            timer2.Enabled = true; // timer water flow rate in
            timer3.Enabled = true; // timer water flow rate out
            timer1.Interval = 200;
            timer2.Interval = 200;
            timer3.Interval = 500;
            timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            lbWaterLevel.Text = waterActual.ToString();
            if ((int)waterActual <100)
            {
                if ((int)waterActual <= trackBar1.Value)
                {
                    timer2.Start();
                    waterPump1.Value = true;
                }
               
            }
            else
            {
                timer2.Stop();
                waterPump1.Value = false;
            }
            if (pneumaticBallVave1.Value == true)
            {
                timer3.Start();
                pneumaticBallVave1.Value = true;
            }
            else
            {
                timer3.Stop();
                pneumaticBallVave1.Value = false;
            }
        }
        private void btnStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            timer2.Stop();
            timer3.Stop();
        }
        private void label1_Click(object sender, EventArgs e)
        {
        }
        private void timer3_Tick(object sender, EventArgs e)
        {
           
            waterActual = waterActual - flowrateOut;
            tank1.Value = waterActual;
        }
        private void timer2_Tick(object sender, EventArgs e)
        {
            waterActual = waterActual + flowrateIn;
            tank1.Value = waterActual;
        }
        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            txtWaterDetect.Text = trackBar1.Value.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
        }
        private void pneumaticBallVave1_DoubleClick(object sender, EventArgs e)
        {
           
        }
        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            flowrateOut = (float)trackBar2.Value;
            label3.Text = trackBar2.Value.ToString();
        }
        private void pneumaticBallVave1_Click(object sender, EventArgs e)
        {
            pneumaticBallVave1.Value = !pneumaticBallVave1.Value;
        }
    }
}
ลองโหลดไฟล์ไปเปิดกันดูครับ ไม่รู้ว่าจะเปิดกันได้หรือเปล่า ถ้าไม่ได้ก็สร้างเอาใหม่ ก็แล้วกันครับ แลบลิ้น
https://dl.dropboxusercontent.com/u/65353188/AdvanceHMI.zip

4 ความคิดเห็น:

imran on 11 August 2016 at 00:09 said...


โปรดร่วม Skype หรือ อีเมลของคุณ

denis on 5 March 2017 at 12:58 said...

nice tutorial ..i will try this at home soon !!!thanks for posting this

sandhya on 21 September 2018 at 04:32 said...

how can i connect my visual studio front end with the B&R PLC device

saoud amine on 13 July 2020 at 10:24 said...

geat i didnt find open source but i thank you have project please send me by email saoudamine2017@gmail.com
in fact i would like to make system with my Board devlopment pic
when i fineshed i will beak code with connection microcontrolleur 16 bit and nice to meet you dear

Post a Comment

 

แจกฟรี พื้นที่ฝากไฟล์ 2 GB

ads

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

Blog อื่นๆของฉัน

  • Test AMR Fleet Management program - ระบบบริหารจัดการจราจรและจัดคิวงานของรถ AMR (Autonomous Mobile Robot) ที่พัฒนาโดยบริษัท WP Solution Co., Ltd. จากภาษา C# ทั้งในส่วนของ Backend (Service app...
  • Gearset matching 2021 program - เป็นงานใหญ่ที่เพิ่งจบไป ที่ระยอง ปลวกแดง บริษัทผลิตชิ้นส่วนรถยนต์ คอนเซปต์ คือต้องการเก็บค่าหลังจากการทดสอบชิ้นส่วยรถยนต์ เพื่อเก็บไว้ในฐานข้อมูลให้แผนกถ...
  • RT ToolBox3 Standard version 1.70Y - กำลังศึกษาการใช้งานโปรแกรม RT ToolBox3 ในการเขียนโปรแกรมเพื่อควบคุมแขนกล Robots-MELFA ของค่าย Mitsubishi Facebook link
  • Free Screen Capture โปรแกรมบันทึกหน้าจอ ฟรีๆ - หากเพื่อนๆ จะมองหาโปรแกรม ที่ไว้สำหรับบันทึกหน้าจอคอมพิวเตอร์ ไม่ว่าจะบันทึกในรูปของภาพนีิ่ง (Screen shot) หรือแบบบันทึกเป็นภาพเคลื่อนไหว ( screencas...

จำนวนการเยี่ยมชมบล๊อก