回复:【分享】子程序内使用边沿信号的新方法

shine

  • 帖子

    8803
  • 精华

    39
  • 被关注

    157

论坛等级:至圣

注册时间:2003-06-06

普通 普通 如何晋级?

发布于 2019-12-27 15:47:23

6楼

展开查看
以下是引用沉年在2019-12-26 10:46:49的发言 >楼主

关于在子程序中使用边沿信号功能,直接使用系统的上升沿或者下降沿指令是完全不行的,除非这个子程序不会被重复调用,否则一定会产生bug。

本来我一直觉得,子程序内基本不可能使用边沿信号的。

不过后来,再结合之前一个他人自制的定时器子程序和我偶发学习某款8位单片机的时候产生了灵感。

总而言之,我写出了一个上升沿子程序,可以在子程序中调用,这样就可以直观的在子程序中使用边沿指令了。

本程序已经过实际测试,完全可用,目前没有发现bug。

制作思路先不提,我先简述下这个程序要如何使用,因为使用较为麻烦。

1,选择一部分你绝对不会使用的v存储区,比如大于vb5000。然后将其指针值写入存储其指针的地址。比如VD4990。之后一直将0传入计数用的地址VD4994。

初始化程序如下图。



第一段无所谓,但第二段一定要用sm0.0,否则程序会出bug。

2、打开编写好的上升沿子程序P1,只修改第一段就行。

第一段第一个指令块,输入输出全为VD4994.

第一段最后一个指令块,第一个输入改为VD4990。

结果如下图。





前期修改结束,可以愉快的在子程序内使用这个上升沿子程序,不会产生问题。

以下为我测试使用的程序。

写了一个标准的单键启停,主程序中调用两次,已经过测试,不会出现bug。

如有问题可以联系我。

使用截图如下。

1,单建启停子程序,调用P1

2,主程序,初始化程序和单建启停子程序调用两次,已经过实际测试,下载如PLC中,经测试后暂无BUG。



本身不是什么大东西,我也就不加密了(加密了就改不了了,不好用了。)

上升沿子程序(可用于子程序内).rar

各位可以进行测试,这个程序我只下到plc里测试过,但仿真基本没有办法测试这个程序。

有问题可以联系我,qq:834367351  wx:c834367351


最后做下简单的总结,确实有其他的方法来实现子程序内使用边沿信号,主要是依靠子程序的IN/OUT接口,但如果边沿信号写入第3层,第4层子程序,那么第2层,第1层子程序都要增加最底层使用边沿信号所用的IN/OUT变量,不只降低了可读性,也使得编程变得麻烦了些,而且很可能反而变得难以调试(中间某一层每写,都很可能找不着)。

不过本程序也不完美,使用这个程序之后,VB5000以后的v区尽量不要使用,一个扫描周期内调用一次这个子程序,会用掉v5000.1,调用10次上升沿子程序就用掉VB5000.1-VB5001.2。调用次数越多,使用的内存就越多。当然这是正常消耗,主要还是本程序使用了不少的字操作指令,比较消耗运算量,大量使用可能会较长的增加扫描周期。


最后,也接受各路大佬的批评指正,能改的我想办法改。

如果子程序是条件调用呢?上一个周期是调用了2个,下一个周期只调用了一个呢?

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8941条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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