C#WPF与PLC通讯之心跳

        创作背景:在工控行业,PC与PLC之间的通断直接决定了整体系统的可靠性。为了监控PC与PLC是否处于正常连接状态,引入了心跳机制,顾名思义就是通过模拟心脏跳动,在程序中即为定时通讯。我这里只做PC给PLC心跳信号,思路如下:创建PLC连接,定时向PLC固定的DB地址中写入变化的值(1与2交替变化)。

        实现步骤:

        第一步:通过引入S7.Net,与西门子PLC建立连接(这里我选用的是异步创建连接)。

        static Plc plc;

        /// <summary>
        /// 连接PLC
        /// </summary>
        public void PLCConnect()
        {
            try
            {
                OpenPLC();
            }
            catch (Exception ex) { }
        }

        /// <summary>
        /// 打开PLC
        /// </summary>
        public async void OpenPLC()
        {
            try
            {
                if (plc == null)
                    plc = new Plc(CpuType.S71500, IPAddress, 0, 0);
                if (plc != null && !plc.IsConnected)
                    await plc.OpenAsync();
            }
            catch (Exception ex) { }
        }

        第二步:设置获取心跳新值的属性。(其中iHart为私有变量,自行创建即可)

        /// <summary>
        /// 获取心跳信号值
        /// </summary>
        public byte GetHartSign
        {
            get
            {
                if (iHart == 1)
                    iHart = 2;
                else
                    iHart = 1;
                return iHart;
            }
        }

        第三步:通过Stopwatch()类,来监控是否再次发送心跳信号。(项目中还有其他功能,未删除)

        Stopwatch stopwatchHeartBeat = new Stopwatch();
        /// <summary>
        /// 循环程序入口
        /// </summary>
        /// <param name="enumTimeSync">触发类型</param>
        /// <param name="DBNum">DB块</param>
        /// <param name="startAdr">起始地址</param>
        /// <param name="value">值</param>
        public void MethodEntry(EnumTimeSync enumTimeSync, int DBNum, int startAdr, byte? value = null)
        {
            switch (enumTimeSync)
            {
                case EnumTimeSync.TimeSync:
                    TimeSync(DBNum, startAdr);
                    break;
                case EnumTimeSync.TimeSign:
                    if (value != null && stopwatchTimeSign.ElapsedMilliseconds > 3000)
                        TimeSign(DBNum, startAdr, (byte)value);
                    break;
                case EnumTimeSync.HeartBeat:
                    if (stopwatchHeartBeat.ElapsedMilliseconds > 3000)
                    {
                        TimeSign(DBNum, startAdr, GetHartSign);
                        stopwatchHeartBeat.Restart();
                    }
                    break;
                default:
                    break;
            }
        }

        至此,PC与PLC通讯之心跳机制的基本框架就完成了,欢迎各位伙伴参考与指正!

        代码连接:点我跳转至程序连接

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值