回复:scl语言上升沿写法

已锁定

Siemens automation

西门子1847工业学习平台

  • 帖子

    1049
  • 精华

    15
  • 被关注

    311

论坛等级:奇侠

注册时间:2013-06-23

钻石 钻石 如何晋级?

发布于 2024-04-17 13:14:58

15楼

展开查看
以下是引用yming在2024-04-16 21:10:16的发言 >14楼

每个(上升/下降)沿的检测,都得需要各自独立的存储器。

因为,必须保存上一周期的状态。这是无法省略的。

SCL编程,根本用不到什么IF THEN 条件判断;因为它本身就是布尔运算。


写法就是:

edgeSta := sinInput AND NOT edgeStaLast  ; 

edgeStaLast := edgeSta ;  // 当sinInput 出现上升沿时,edgeSta 本周期为真=1; 


edgeSta 即可在本周期,运算之后直接使用。


此外,当需要检测的信号组成字节、字或双字时,同样的上述语句,一次就可完成8个或16个、32个信号的上升沿检测


edgeStaWord := sinInWord AND ( edgeStaLastWord XOR trueWord ) ;  // trueWord =全为1的常数

edgeStaLastWord := edgeStaWord ; //<- 有指令分解成位数组

(字符串逻辑运算有NOT就用NOT;没有就用 XOR,一样的。)



 

以下是引用Siemens automation在2024-03-25 19:20:10的发言 >2楼:      这个上升沿...

引用2楼详细内容:

      这个上升沿这样写,出自哪个文档介绍。想详细了解,这个SCL编程。还有下降沿的写法。能否指导一下。我一般上升沿都是自己编写的FC块来实现上升沿和下降沿。这样可以省去DB块,西门子自带沿指令需要DB块存储。

每个(上升/下降)沿的检测,都得需要各自独立的存储器。

因为,必须保存上一周期的状态。这是无法省略的。

SCL编程,根本用不到什么IF THEN 条件判断;因为它本身就是布尔运算。


写法就是:

edgeSta := sinInput AND NOT edgeStaLast  ; 

edgeStaLast := edgeSta ;  // 当sinInput 出现上升沿时,edgeSta 本周期为真=1; 


edgeSta 即可在本周期,运算之后直接使用。

我在2楼提到用FC写就是这种方法去写。


edgeStaWord := sinInWord AND ( edgeStaLastWord XOR trueWord ) ;  // trueWord =全为1的常数

edgeStaLastWord := edgeStaWord ; //<- 有指令分解成位数组

(字符串逻辑运算有NOT就用NOT;没有就用 XOR,一样的。)


edgeSta := sinInput AND NOT edgeStaLast  ; 

edgeStaLast := edgeSta ;  // 当sinInput 出现上升沿时,edgeSta 本周期为真=1; 


edgeSta 即可在本周期,运算之后直接使用。

我在2楼提到用FC写就是这种方法去写。


edgeStaWord ,sinInWord,edgeStaLastWord,trueWord 这几个输入接口数据格式是WORD吗?


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

谈天说地

共有13243条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。