上升沿和下降沿在我们开发上位机时使用率非常高,常见于消息触发、脉冲归档等。但是在C#中没有类似PLC中的上升沿、下降沿那样的指令,需要我们自己编码来实现。
首先我们创建一个用于生成上升沿和下降沿的类,命名为“GetPN”。
然后输入以下代码:
namespace Testclass GetPNbool _P = false;bool _N = false;public bool P(bool Value)if (Value && !_P)_P = true;return true;if (!Value)_P = false;return false;public bool N(bool Value)if (!Value && _N)_N = false;return true;if (Value)_N = true;return false;
代码逻辑比较简单,基本就是以前300/400时代SCL上升沿和下降沿逻辑的翻版。下面以一个简单的例子说明下这个类如何使用。首先声明并实例化,然后在线程中调用里面的GetP或者GetN方法即可。
bool testSignal = false;private void Form1_Load(object sender, EventArgs e)Task.Run(th);private void th()GetPN pn = new GetPN();while (true)if (pn.P(testSignal))this.Invoke(new Action(() => this.Text = "已捕获到上升沿"));if (pn.N(testSignal))this.Invoke(new Action(() => this.Text = "已捕获到下降沿"));private void button1_Click(object sender, EventArgs e)testSignal = true;private void button2_Click(object sender, EventArgs e)testSignal = false;
在上面的例子中,我们分别用2个按钮模拟信号的置位和复位操作,然后在线程中调用GetP和GetN方法分别捕捉上升沿和下降沿。当捕捉到信号变化以后使用窗体上的标题文本进行提示。
获取上升沿下降沿的类使用非常广泛,我们的很多控件中都有这种应用。