[netMarketing类库] 通用的欧姆龙plc rs232通讯类 OmronPlc的应用


通用的欧姆龙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协议就可用。



运行效果如下:


image.png


这个例子演示了对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的返回值

image.png

是原样取的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元,勇哥用以支付本站服务器费用。


支付1元或购买VIP会员后,才能查看本内容!立即支付升级会员查询订单




--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864