PLC可以是认为跑在while 死循环里的程序(Ob100除外),每一个OB块都是一个单独的线程。了解了这点,就可以更好的进行C# 上位机编程和 PLC的SCL(ST)编程。

在SCL中,如果If 语句的条件使用了长信号,If语句会反复执行,一些交换值,传递值,更新值的操作就无法完成,这时候If语句的条件必须要使用瞬态信号,If 的条件使用上升沿是一个好选择。

上升沿:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace FPTest
{public class R_TRIG{////// 这个属性存储上一次的bool状态,get;private set;这个写法相当于PLC的 Output接口///public bool Last { get; private set; }////// 这个属性填被检测的bool量,set;相当于PLC的Input接口///public bool CLK{set{Q = value && !Last;//我们知道上升沿是从0变1的一瞬间,所以本次扫描为真上次为假时就产生了上升沿Last = value;//每个扫描周期刷新参考位}}////// 这个就是检测的状态,外部获取这个变量就知道上升沿有没有产生/// 相当于PLC的 Output接口public bool Q { get; private set; }}}

下降沿

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace FPTest
{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; }}}

主程序

namespace FPTest
{public partial class FrmMain : Form{public FrmMain(){InitializeComponent();rTrig = new R_TRIG();fTrig = new F_TRIG();this.label1.Text = a.ToString();this.label2.Text = b.ToString();}private R_TRIG rTrig;private F_TRIG fTrig;private int a = 0;private int b = 0;CancellationTokenSource cts = new CancellationTokenSource();private void btnUp_Click(object sender, EventArgs e){Task.Run(async () =>{while (!cts.IsCancellationRequested){await Task.Delay(200);rTrig.CLK = true;if (rTrig.Q){a = b;b = int.Parse(this.textBox1.Text.Trim()) ;}this.label1.Invoke(new Action(() => { this.label1.Text = a.ToString(); }));this.label2.Invoke(new Action(() => { this.label2.Text = b.ToString(); }));}}, cts.Token);}private void NoRTrig_Click(object sender, EventArgs e){Task.Run(async () =>{while (!cts.IsCancellationRequested){await Task.Delay(200);if (true){a = b;b = int.Parse(this.textBox1.Text.Trim());}this.label1.Invoke(new Action(() => { this.label1.Text = a.ToString(); }));this.label2.Invoke(new Action(() => { this.label2.Text = b.ToString(); }));}}, cts.Token);}}
}


初始状态


使用上升沿,If中执行了一次


不使用上升沿,a,b无法传递值

bool q;
bool last;
bool trigIn;
bool trigQ;

trigQ = trigIn AND NOT last;
last = trigIn;

在C# 中实现上升沿,并模仿PLC环境验证 If 语句使用上升沿和不使用上升沿的不同相关推荐

  1. jar java classpath_win7中java编程工具安装 java环境变量设置

    win7中java编程工具安装 java环境变量设置 Question:编译是显示'javac'不是内部或外部命令,也不是可运行的程序或批处理文件 解决: 在[系统变量]里编辑java_home.cl ...

  2. 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例...

    这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题,  于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...

  3. 在windows中对torch1.7.1版本环境配置

    在windows中对torch1.7.1版本环境配置 复杂的安装方式:(不推荐) 环境内容 下载 Cudnn 和 CUDA (可选) 简单粗暴安装方式:(强烈推荐) 复杂的安装方式:(不推荐) 环境内 ...

  4. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

    SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MS ...

  5. Access中字段类型及修改字段类型的SQL语句

    Access中字段类型及修改字段类型的SQL语句 Access中的数据类型 Access中有10中数据类型:文本.备注.数值.日期/时间.货币.自动编号.是/否.OLE对象.超级链接.查询向导. 1. ...

  6. Winform中怎样重写窗体关闭事件实现验证密码通过才能关闭窗体

    场景 需要在Winform中执行一些定时器,需要该窗体一直开启,防止因点击窗体的关闭误操作.所以需要在点击叉号进行关闭时验证一个密码,密码正确则允许关闭,否则不允许关闭. 效果如下: 注: 博客: B ...

  7. ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解

    本文实例讲述了django框架中ajax的使用及避开CSRF 验证的方式.分享给大家供大家参考,具体如下: ajax(Asynchronous Javascript And Xml) 异步javasc ...

  8. python怎么换行输入而不执行_关于在IDLE中怎么换行继续敲写代码而不执行语句...

    查看: 44535|回复: 29 [已解决]关于在IDLE中怎么换行继续敲写代码而不执行语句 电梯直达 发表于 2016-9-30 10:05:49 | 只看该作者 |倒序浏览 |阅读模式 马上注册, ...

  9. PHP中Header函数和PHP_AUTH_USER做用户验证

    php Header PHP_AUTH_USER PHP_AUTH_PW 用户验证 在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能.具体用法: Header( ...

最新文章

  1. springboot + shiro 尝试登录次数限制与并发登录人数控制
  2. PHP的require与include
  3. 如何取消计算机阻止安装程序,Win10电脑安装软件提示“你必须取消阻止该发布者才能运行此软件”怎么办...
  4. vs2015+opencv3.2.0配置的一些小事情
  5. react native android 通知栏
  6. 【金融量化】我以为我是食物链顶层的收割者,想不到只是别人手中的镰刀
  7. mysql怎么设置id自动编号_MySQL中实现ID编号自动增加的方法
  8. 最保险的“跳槽理由”
  9. 新浪开放平台:解决获取access_token抛 21323 异常,以及接口调用
  10. 处理autocad 2010闪退
  11. python-docx文档高亮显示
  12. 外包or外派岗,可以去?
  13. python -m pip install --upgrade pip
  14. 如何查询windows的版本号?
  15. xp支持python最高版本是多少_PYQT5-开发向下兼容到xp系统的windows软件
  16. python读取.tsv文件例子(大文件处理)
  17. 配置中心 SpringCloud Nacos Config
  18. maven下载文件后缀lastedupdated
  19. python获取图像的最大连通区域
  20. 自主神经系统组成部分,神经系统分为自主神经

热门文章

  1. 英集芯 IP2133 USB Type-C 线缆电子标签 IC 详细规格
  2. ROC曲线及EER介绍
  3. c语言写程序思路考研题,快速解题 | 在考场C语言编程题
  4. python str.format与制表符\t关于中文对齐的细节问题
  5. [其他产品]PCB板上的槽孔的作用
  6. 2023年UI界面设计的9个趋势
  7. Kaggle时间序列预测相关比赛以及代码
  8. Kaggle: Humpback Whale Identification
  9. 手撕大厂笔试之最长上升子序列和它的各种变式
  10. hdu-1229-还是A+B