故事作者:YiMoon

最近创作

看看TA的故事

【软件编程】200PLC库移值到200SMART异常

已锁定

YiMoon

  • 帖子

    1221
  • 精华

    35
  • 被关注

    81

论坛等级:至圣

注册时间:2005-04-14

钻石 钻石 如何晋级?

【软件编程】200PLC库移值到200SMART异常

1819

8

2021-02-20 16:30:27

最近在把一个200PLC中的自定义库升级到200smart库过程中,遇到一些问题。在200PLC中,这个库使用正常,但在200SMART中使用会出现异常。

200PLC中设计了一个MCC控制通用子程序,MCC子程序中,调用了自已编写的上升沿、下降沿指令和定时器指令。定时器指令同时也调用了这个上升沿指令。程序调用顺序如下图:

 图0 调用顺序


 

在200PLC中测试没有问题,最后封装成库,在OB1中调用这个库,使用正常。之后,在200SMART中,编写相同的MCC子程序,测试,也没有问题,最后封装成库,在OB1中调用,问题来了。

图1:MCC子程序,调用上升沿、下降沿子程序

 


 

图2:定时器S_ODTS子程序中,调用上升沿子程序

 


图3:OB1中测试MCC子程序,使用正常

 

图4:把MCC子程序封装成库

 


图5:调用封装好的MCC库,编译出错。提示MCC子程序和S_ODTS子程序中调用指令没有对应的子例程。

 


以为是200SMART中库文件封装有问题,于是又封装了一遍,再次调用库,还是报错。也不知道这个子例程是什么意思。于时,打开封装的库查看,原来是MCC和S_ODTS中调用的上升沿指令没有分配参数。

图6:rising_edge子程序形参没有分配参数

 


这就奇怪了,明明在封装之前,测试都是正常的,为什么封装之后调用,参数就没有了呢。思来想去,始终找不到原因。再分析出错信息,“子例程”,会不会是跟嵌套调用Rising_edge子程序2次有关,为什么Falling_edge调用了一次就没问题呢?难道要分配2个rising_edge?这不科学啊。

抱着试试看的心态,把 rising_edge封装成库,再放到随便一个子程序中,这时,程序块的库中,又多了一个rising_edge子程序,删除刚刚调用的rising_edge,再次编译,居然通过了。

图7:调用一个rising_edge库,编译通过

 



总结:

因为封装成库的MCC调用rising_edge子程序,嵌套深度为2 ,在200PLC中,使用正常。

在200SMART中,会提示调用子例程错误。

图8:200PLC与200SMART中调用MCC库对比

 


解决方法:把rising_edge封装成库,再次调用,目的是为了在程序块中增加一个rising_edge库。

图9:200SMART中再次调用rising_edge库

 


 


【软件编程】200PLC库移值到200SMART异常 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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