模拟组态软件:用plc写逻辑,PC端做为组态显示,交通灯程序

组态软件的一些组件,关联到plc的内存,能反映出plc程序的运行结果。

下面的程序模拟了组态软件这种效果,其目的是方便测试plc程序的运行效果,而不借助于实际的硬件。

例如我们用plc编写一下交通灯轮换显示的程序,可以用本程序实现实时的结果显示。


这里的plc程序勇哥只是用3个输入IO,点亮3个输出IO

plc用的是欧姆龙的cp1h

image.png


下面是pc端的程序,当设置好plc的连接参数和输出IO地址后,会实时显示上面plc程序的运行结果。

image.png

源代码:

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

版权声明:本文为博主原创文章,转载请附上博文链接!


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

发表评论:

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

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 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