Thursday, September 12
AdvancedHMI with Visual C# 2010
ในปัจจุบันมีโปรแกรมหลายๆ ค่ายที่สามารถแสดงผลแบบ HMI ได้ ซึ่งมีทั้งแบบที่ง่าย แต่เสียเงิน และแบบที่ยาก แต่ ฟรี ก็มี วันนี้ เรามาลองติดตั้ง AdvancedHMI กับ C# กันดูครับ
เริ่มแรกก็ไปดาวน์โหลด AdvancedHMI จากที่นี่ http://advancedhmi.com/ จากนั้น ทำการแตกไฟล์ออก ไปวางไว้ที่ไหนก็ได้ครับ เพราะเราจะสนใจแค่ dll ไฟล์ของมัน
เปิดโปรแกรม Visual C# 2010 express ขึ้นมาครับ เริ่มสร้างโปรเจค ตามปกติ ในที่นี้ผมสร้างโปรเจคเป็น windows form application นะครับ
ต่อมาให้เราทำการ add toolbox ที่เป็นของ AdvancedHMI ขึ้นมา อาจจะสร้าง Add tab ขึ้นมาแล้วตั้งชื่อ AdvancedHMI แล้วคลิกขวา Choose items.. ไปที่
แท๊ป .NET Framework Components ให้เรา Browse ไปที่เก็บไฟล์ AdvancedHMIBeta358\AdvancedHMIDrivers\Support\MfgControl.AdvancedHMI.Drivers.dll แล้วคลิกเลือก OK
เราจะได้ Components ที่ทาง AdvancedHMI สร้างมาให้
ทำการ Add reference MfgControl.AdvancedHMI.Drivers.dll เข้าไปกับโปรเจคด้วย
จากนั้น ก็ลาากวางๆ ได้เลยครับ จินตนาการเอาว่า เราจะสร้างระบบเฝ้าติดตามอะไร ในที่นี้ ผมสร้างระบบปั้มน้ำ โดยให้มอเตอร์ปั้มน้ำเข้าถัง หากระดับน้ำต่ำกว่า ระดับที่เราตั้งไว้ และมีวาล์วคอยปิดเปิดทางน้ำออก ซึ่งสามารถปรับอัตราการไหลได้
ที่ส่วนหัวของโค๊ด ให้ทำการ using MfgControl.AdvancedHMI.Controls; เข้าไปด้วย ถ้าต้องการสร้าง object เพิ่ม
ในการเขียนโค๊ดส่งค่าให้แต่ละ Component ไม่ว่าจะเป็น Guage , Tank หรืออะไรก็ตามแต่ ที่มีการแสดงผล แสดงค่าต่างๆ ต้องเช็คให้ดีด้วย ว่ามันรับค่าเป็น float , int หรือว่า double ถ้าเราส่งค่าให้มันไม่ตรงชนิดที่มันจะรับ มันจะแสดงผลผิดพลาด ลองเอา mouse ชี้ค้างไว้ตอนเรา กำหนดค่า ให้ field ที่ชื่อ value ของมันดูครับ มันจะบอกไว้อยู่
ในที่นี้ ผมใช้ 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
Subscribe to:
Post Comments (Atom)
4 ความคิดเห็น:
โปรดร่วม Skype หรือ อีเมลของคุณ
nice tutorial ..i will try this at home soon !!!thanks for posting this
how can i connect my visual studio front end with the B&R PLC device
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