做过PLC编程开发的工程师都知道,上升沿、下降沿在程序里面经常用。那么我们在C#上位机中怎么做上升沿呢?接下来我带大家用C#实现!
1.上升沿:从0变1的一瞬间,接通一个扫描周期
下降沿:从1变0的一瞬间,接通一个扫描周期
2.考虑到我们很多朋友是从PLC转型到上位机的,我用写PLC的形式,来帮大家梳理。
3.如下图我们看到,当我们从PLC拖一个R_TRIG上升沿指令,它会提示创建DB,或者背景数据块:

创建需要分配DB
4.如图 _bool_in是我们要检测的输入变量,_bool_out填上升沿结果:

PLC的上升沿
5.C#实现我们创建一个类,名称为R_TRIG。

6.并且写检测上升沿代码:

上升沿代码
namespace WDBasePLCHelper
{
/// <summary>
/// 上升沿
/// </summary>
public class R_TRIG
{
/// <summary>
/// 这个属性存储上一次的bool状态,get;private set;这个写法相当于PLC的 Output接口
/// </summary>
public bool Last { get;private set; }
/// <summary>
/// 这个属性填被检测的bool量,set;相当于PLC的Input接口
/// </summary>
public bool CLK
{
set
{
Q = value && !Last;//我们知道上升沿是从0变1的一瞬间,所以本次扫描为真上次为假时就产生了上升沿
Last = value;//每个扫描周期刷新参考位
}
}
/// <summary>
/// 这个就是检测的状态,外部获取这个变量就知道上升沿有没有产生
/// 相当于PLC的 Output接口
/// </summary>
public bool Q { get;private set; }
}
}
7.下降沿同理我把代码贴出来:

namespace WDBasePLCHelper
{
/// <summary>
/// 下降沿
/// </summary>
public class F_TRIG
{
public bool Last { get; private set; }
public bool CLK
{
set
{
Q = !value && Last;//1变0 上次为真本次为假
Last = value;
}
}
public bool Q { get; private set; }
}
}
8.在winform界面测试放置相应控件。

9.我们创建成员变量 new个对象。

10.构造函数 实例化相当于PLC分配DB多重背景块:

11.button按钮点击事件对输入变量进行赋值:

12.写刷新UI代码:

13.效果图如下动图:

14.为了大家看的清楚,上图我用鼠标点击刷新输入状态。
上升沿分析:当第一次按下1时为true,第二次则为false;也就是0变1。
下升沿分析:先按1,再按0,则为true,再任意按变0;也就是1变0。
15.实际使用中,检测I点的上升沿,我们把检测代码写入死循环中,就可以模拟PLC用上升沿指令了。需要多少new多少即可!
end
.NET上位机C#、主流PLC、电气、物联网、STM32、自动化 选型开发、终身学习欢迎交流。
如果对您有帮助,欢迎关注,点赞转发。
您的支持,是我创作的动力!