C#如何简单实现"上升沿"功能

本文章讲的是C#如何实现“上升沿”功能,上升沿:也就是从0到1的一瞬间,这个功能做工控是必不可少,大家应该用的都很多,也就不多做介绍,下面开始说如何实现功能,文末会附上源码链接。.

做了三个属性,Last是上次的状态,这个last需要在更新扫描周期一直更新,Now则是当前需要刷新的状态,从PLC里获取状态后一直赋值就行,在属性的Set里会一直做判断,具体注释可以看图或者代码。OutPut是输出的状态,为true就是上升沿触发中,false则反之。

C#如何简单实现

    /// <summary>    /// 上升沿触发    /// </summary>    public class UpTrigger    {        /// <summary>        /// 这个属性存储上一次的bool状态        /// </summary>        public bool Last { get; private set; }
        /// <summary>        /// 这个属性填被检测的bool量,set;相当于PLC的Input接口        /// </summary>        public bool Now        {            set            {                //我们知道上升沿是从0变1的一瞬间,所以本次扫描为真,上次为假时就产生了上升沿,                //value&&!Last的意思就是   当前值与上次值不相等时,就为True,也就产生了上升沿                OutPut = value && !Last;                //每次给NOW刷新状态后,Last就刷新状态                Last = value;            }        }        /// <summary>        /// 这个就是检测的状态,外部获取这个变量就知道上升沿有没有产生        /// </summary>        public bool OutPut { get; private set; }

在实际测试中看效果,界面做了两个按钮模拟false和true的状态,再做了一个lable来显示上升沿的状态,这个状态开了个线程依据OutPut属性来刷新。

C#如何简单实现

C#如何简单实现

 public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        UpTrigger UpTrigger = new UpTrigger();        private void button1_Click(object sender, EventArgs e)        {            //模拟读取plc点位为false            UpTrigger.Now = false;        }
        private void button2_Click(object sender, EventArgs e)        {            //模拟读取plc点位为true            UpTrigger.Now = true;        }        void Rush()         {            while (true)            {                if (UpTrigger.OutPut)                {                    label2.Invoke(new Action(() => { label2.Text = "上升沿触发中"; }));                }                else                {                    label2.Invoke(new Action(() => { label2.Text = "上升沿未触发"; }));                }
                Thread.Sleep(10);            }                }        private void Form1_Load(object sender, EventArgs e)        {            Task.Factory.StartNew(Rush);        }    }

运行效果:

C#如何简单实现

点击解析:按下第一次按钮1,则是从0-1所以状态为true上升沿触发;再点击了一次1则是从1-1,已经不是上升沿所以为false。具体可以仔细看gif。

源码链接:https://pan.baidu.com/s/1wu_XiInY8zgMB0eeJdR4Ag

提取码:ut3l