通用的欧姆龙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
版权声明:本文为博主原创文章,转载请附上博文链接!