西门子S7-200PLC带参数调用的子程序运行为什么异常?

发布时间:2023-12-03
西门子s7-200plc两个子程序的局部变量和程序完全相同(见下面的右图),运行时发现i0.0为1时q0.0和q1.0同时变为1。将置位指令改为对l0.1的赋值(线圈)指令后运行正常,将out参数“输出”改为in_out参数运行也正常。为什么?
1.出错的原因
s线圈(置位指令)断开时,l0.1的值保持不变。
从子程序的局部变量表可以看出,输入参数in和输出参数out均用l区的局部变量保存。这两个子程序属于同一级,它们的局部变量使用同一片物理存储区。换句话说,两个子程序的l0.1先后使用同一个物理存储器位。
ob1中的i0.0为1时, 子程序sbr_0中的l0.1和它的实参q0.0被置位。在执行sbr_1时,因为两个子程序的l0.1先后使用同一个物理存储器位,sbr_1的l0.1仍然为1,使它的实参q1.0也变为1。q1.0变为1不是因为程序的作用,而是两个子程序的l0.1共用同一个物理存储器位引起的。
2.将out参数改为in_out参数未出错的原因
在q1.0为0,i0.0为1时,l0.1因为是in_out参数,刚开始执行sbr_1时,l0.1的输入值为0,与sbr_0执行后l0.1的值无关。因为i1.0为0,sbr_1执行完后,l0.1的值不变,仍然为0。所以q1.0的值为0,不会变为1。
3.置位指令改为赋值指令(线圈)未出错的原因
假设i0.0为1时,i1.0为0,执行sbr_1的程序时,l0.0的触点断开,使l0.1的线圈断电,所以q1.0为0。
4.同样的程序为什么s7-300不会出错
s7-300的功能(fc)和s7-200的子程序差不多,s7-300的fc1和fc2中同样的置位程序运行时不会出错。这是因为s7-300和s7-200保存in、out参数的方法不一样。s7-300同一级的fc的临时局部变量(temp)使用同一片物理存储区,它们的in、out参数没有标出l区的地址,与临时变量的保存方法不同。因此同样的程序s7-300不会出错。
上一个:盆花在室内摆设时的养护管理
下一个:什么配置的笔记本比较好,渲染用什么配置笔记本比较好

刺蛾类害虫防治方法
iphone官网人工客服电话(苹果官网客服电话人工24小时在线)
固态硬盘的各种接口,固态硬盘接口有哪些
isteq
windows7官网正版(win7 官网下载)
浏览器打开网页提示安全证书过期的解决方法是什么(浏览器提示安全证书过期怎么办)
RC0805DR-074K75L,0805 4.75KΩ 0.5% 1/8W 电阻
茶叶保质期应该是多久
猕猴桃高接换种技术
怎样使鸡冠花色彩美丽