通用的欧姆龙plc rs232通讯类 OmronPlc的应用
欧姆龙PLC的 Host Link Fins通讯协议是一种帧通讯协议,它可以批量读取或者写入数据到PLC内存区,支持DM, A, W, T, CIO, H 等内存区,并且可以读了字或者位。另外,HostLink协议只支持读取监视模式下的数据,而Host Link Fins协议无论在监视还是运行模式下都是可以读写的。
对于hostlink Fins通讯帧,可以参考下面贴子的说明:
欧姆龙Plc Fins命令+Hostlink协议通讯实验
这个 OmronPlc类就是基于hostlink fins协议的通讯类。
由于hostlink fins协议是欧姆龙系列plc共有的,所以理论上来讲,除了CP1H,也适应其它各种型号的plc
具体可以查阅手册,只要支持rs232通讯和hostlink fins协议就可用。
运行效果如下:
这个例子演示了对plc的io状态和dm区进行读操作。
//读io地址的状态
res1 = plc.readCIO(tbIo2.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);
int.TryParse(txtDmAddress.Text, out addr);
label5.Invoke(new Action(() =>
{
//读DM区
label5.Text= plc.ReadDM_Fins(addr, 1);
}));
对于读dm的返回值
是原样取的plc的返回值,你需要自己提取其中的数据。
之所以这样设计,是因为你可以通过校验位来判断plc返回的结果是否是不完整、异常、错误的。
对于上图的校验位是48, 数据是6AD8
源代码如下:
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);
MessageBox.Show("OK");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void plcfun()
{
var res1 = new List<ushort>();
int addr = 0;
while (true)
{
if(plc!=null && plc.IsConnect)
{
res1 = plc.readCIO(tbIo2.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);
int.TryParse(txtDmAddress.Text, out addr);
label5.Invoke(new Action(() =>
{
label5.Text= plc.ReadDM_Fins(addr, 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;
}
}
}
本文视频讲解:
本站其它类相关文章:
模拟组态软件:用plc写逻辑,PC端做为组态显示,交通灯程序
[netMarketing类库] OmronPlc类:基于欧姆龙RS232 Host Link Fins协议通讯类
本站收费下载:
扫码收费1元,勇哥用以支付本站服务器费用。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

