组态软件的一些组件,关联到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
版权声明:本文为博主原创文章,转载请附上博文链接!


少有人走的路



















