当前位置: 首页 > news >正文

[C#小技巧]如何捕捉上升沿和下降沿

        上升沿和下降沿在我们开发上位机时使用率非常高,常见于消息触发、脉冲归档等。但是在C#中没有类似PLC中的上升沿、下降沿那样的指令,需要我们自己编码来实现。

        首先我们创建一个用于生成上升沿和下降沿的类,命名为“GetPN”。

        然后输入以下代码:

namespace Test
{
    class GetPN
    {
        bool _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方法分别捕捉上升沿和下降沿。当捕捉到信号变化以后使用窗体上的标题文本进行提示。

        获取上升沿下降沿的类使用非常广泛,我们的很多控件中都有这种应用。

 

HwLib(慧兰博)技术团队专注于高端自动化技术,如果您对我们的技术教程感兴趣的话,可以X宝上搜索店铺“hwlib”或者“慧兰博”

关于HwLib(慧兰博)技术团队的更多信息:www.hwlib.com.cn

HwLib(慧兰博)技术团队技术资料:

https://www.jianguoyun.com/p/DR20ZAEQq_K3CBivk5kD

或者

https://pan.baidu.com/s/1NzDd4nWeH7qDtzJghbe-oQ

提取码:1234

--  END  --

相关文章:

  • 一行代码,将2D转3D图表!
  • C++编程 杨辉三角详解
  • JavaScript 中的异步编程(上)
  • 【一起学数据结构与算法】快速教你了解并实现单链表
  • 用Pytorch实现一个线性回归
  • 【C++】二叉搜索树set/map
  • 最短路径查找Dijkstra算法
  • [数字媒体] Photoshop基础之图像校正、抠图(证件照)和融合
  • 【毕业设计】基于的单片机的移动硬盘设计与实现 - stm32 嵌入式 物联网
  • 使用Python的requests库发送SOAP请求,错误码415
  • Python爬虫技术系列-02HTML解析-lxml+BS4
  • 今日头条——机器学习算法岗1234面
  • 【笔记】快速理解傅里叶级数
  • 宣布发布 .NET 7 Release Candidate 1
  • 8万Star,这个开源项目有点强
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android Volley源码解析
  • CentOS从零开始部署Nodejs项目
  • Cookie 在前端中的实践
  • docker-consul
  • Effective Java 笔记(一)
  • go语言学习初探(一)
  • java2019面试题北京
  • java中具有继承关系的类及其对象初始化顺序
  • Linux Process Manage
  • sublime配置文件
  • uva 10370 Above Average
  • vue2.0项目引入element-ui
  • 回流、重绘及其优化
  • 使用parted解决大于2T的磁盘分区
  • 算法---两个栈实现一个队列
  • 阿里云服务器购买完整流程
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #{} 和 ${}区别
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (力扣)1314.矩阵区域和
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十)T检验-第一部分
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (未解决)macOS matplotlib 中文是方框
  • (一)Dubbo快速入门、介绍、使用
  • (一)SpringBoot3---尚硅谷总结
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net 使用ajax控件后如何调用前端脚本
  • .project文件
  • @RequestMapping处理请求异常
  • [ACM] hdu 1201 18岁生日
  • [android] 看博客学习hashCode()和equals()
  • [C]整形提升(转载)