组态软件的一些组件,关联到plc的内存,能反映出plc程序的运行结果。
下面的程序模拟了组态软件这种效果,其目的是方便测试plc程序的运行效果,而不借助于实际的硬件。
例如我们用plc编写一下交通灯轮换显示的程序,可以用本程序实现实时的结果显示。
这里的plc程序勇哥只是用3个输入IO,点亮3个输出IO
plc用的是欧姆龙的cp1h
下面是pc端的程序,当设置好plc的连接参数和输出IO地址后,会实时显示上面plc程序的运行结果。
源代码:
using netMarketing.automation.plc; using netMarketing.ConvertAbout; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace plcdisplay { public partial class MainForm : Form { private OmronPlc plc; private Thread plcThread; private List<int> lampIoList; public MainForm() { InitializeComponent(); lampIoList = new List<int>(); } private void MainForm_Load(object sender, EventArgs e) { plcThread = new Thread(new ThreadStart(plcfun)); plcThread.IsBackground = true; plcThread.Start(); } private void btnOpenPlc_Click(object sender, EventArgs e) { try { lampIoList.Add(int.Parse( tbIo1.Text.Split('.')[1])); lampIoList.Add(int.Parse(tbIo2.Text.Split('.')[1])); lampIoList.Add(int.Parse(tbIo3.Text.Split('.')[1])); plc = new OmronPlc(tbPlcConfig.Text); } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void plcfun() { var res1 = new List<ushort>(); while (true) { if(plc!=null && plc.IsConnect) { res1 = plc.readCIO(tbIo1.Text, new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7 }); lightOn(1, res1[lampIoList[0]] == 1); lightOn(2, res1[lampIoList[1]] == 1); lightOn(3, res1[lampIoList[2]] == 1); } Thread.Sleep(20); } } private void lightOn(int lightNo,bool status) { switch(lightNo) { case 1: trafficLight1.RedLightOn = status; break; case 2: trafficLight1.GreenLightOn = status; break; case 3: trafficLight1.BlueLightOn = status; break; } } } }
几点说明:
程序需要netMarketing 类库 V1.3.0及以上版本的支持
交通灯是一个netMarketing类库的组件。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

