回复:自制一个上升、下降沿触发器

已锁定

1Shadow1

  • 帖子

    155
  • 精华

    6
  • 被关注

    72

论坛等级:侠士

注册时间:2013-12-11

钻石 钻石 如何晋级?

发布于 2024-08-23 09:13:30

23楼

展开查看
以下是引用Siemens automation在2024-08-22 14:31:21的发言 >19楼

     你看一下  “乐工” 以前的帖子中的回复,看他是怎么通过改数据类型,做到多个沿。


重点看下面则这个scl语言上升沿写法链接,直接点击进去就可以看到 “乐工” 以前的帖子中的回复:

          scl语言上升沿写法



下面这段内容是引用  “乐工” 以前的帖子中的回复


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


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

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

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


以下是引用1Shadow1在2024-08-21 14:49:27的发言 >16楼:是你在死盯着bool ,...

引用16楼详细内容:

是你在死盯着bool ,类型,我用的是BYTE,也可以用INT,DINT;

你用脑子思考过改个数据类型,一个状态能就产生几十个沿?

以下是引用yming在2024-08-21 12:13:28的发言 >14楼:你为啥死盯着Bool...

引用14楼详细内容:

你为啥死盯着Bool数据类型呢?

同样是ZANE那个两条指令,只要换成字串逻辑(Byte,Word、DWord),那么一次就产生8、16、32个沿。

不是么?

以下是引用1Shadow1在2024-08-21 11:38:05的发言 >13楼:@Zane  xOuput...

引用13楼详细内容:

@Zane  xOuputEdge := (xInputState XOR xLastState) AND( (xInputState  AND xR/F_TriggerType=1) OR (NOT xInputState  AND xR/F_TriggerType=2) OR  xR/F_TriggerType=3 );

xLastState := xInputState ;

修改xR/F_TriggerType 类型为byte; 定义1:=上升沿,2:=下降沿;3,双沿;

但是个人还是觉得单沿满足大多数情况,并且用FC 足够简洁,尤其是面对多个,比如20个沿的使用情况;

这种用法只针对特定场合的应用,没有通用性;

试想,为了数量我把脉冲复制1万份,是不是也是1万个脉冲,这又有什么意义?;

再或者,定义1万个输入,1万个状态保持位,1万个输出,1个循环是不是可以检测1万个输入;

但是谁会这么用?

我只是分享一个自己的写法,我觉得挺好用,代码很简单,易于理解,别人要是觉得有用就拿去复制一下,仅此而已;

有更好的写法,比如多项式,我觉得也不错,也挺好。

其他的意图和想法没必要,这玩意花时间又不挣钱;


闲着就写写程序吧,让大脑有点运动量;
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10590条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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