2个使用STL的问题

用STEP 7-Micro/WIN编程(CPU226)的时候发现两个问题:
 1. 我编写的代码,进行某种操作后代码可能会自动重新改掉。比如:
 LDW< VW100, 0
 MOVW 2, VW102
 MOVW 4, VW104
 NOT
 MOVW 22, VW102
 MOVW 44, VW104

 程序会被自动修改为:
 LDW< VW100, 0
 LPS
 MOVW 2, VW102
 MOVW 4, VW104
 NOT
 MOVW 22, VW102

 LPP
 NOT
 MOVW 44, VW104

 貌似每个NOT后的连续代码都会被自动展开为单条带NOT语句s,逻辑上是一致的。但语句一多,好多堆栈+NOT夹在代码中间,看的眼花。。。

 我的问题是,这个是如何造成的,是Micro/WIN的一个功能吗?我可以在哪边设置转换或者不转换。

 2.某些CALL指令返回的第一条未能执行
 比如:
 LDB= VW100, 1
 MOVW 2, VW102
 CALL SSS
 MOVW SSS_V, AQW0
 CRET

 正常情况下,CALL返回后的MOVW SSS_V, AIW0是会被执行到的,但某些情况下这句话貌似无效果:
 - 某些情况指:我所有代码中就一个地方这么用不行,这个地方的调用顺序是MAIN->SSS->AAA->BBB,正好CALL SSS的返回是从BBB的CRET到AAA的CRET出来。
 - 无效果指:我在模拟器上无效果,我还没有上机直接试

 我研究了半天发现,只要在CALL SSS和MOVWSS_V, AIW0之间插入一句指令,这个AIW0输出就有效了。比如:
 CALL SSS
 NOP 1 
 //或者用MOVW SSS_V, AQW0,
 //再或者用XORW VW999, VW999
 MOVW SSS_V, AQW0
 随便弄一句,模拟器上AQW0就会有输出。

 我的问题是:这是什么原因造成的呢?

 BTW:虽然就一个地方有问题,但我现在每个CALL返回后都只能来一句NOP 1。在没弄清楚这个问题之前,我现在只能这样来确保程序没问题。。。

 暂时就这2个问题,谢谢各位了

问题补充:
说明文字中的两个AIW0应该为AQW0

最佳答案

1、第一个问题,是因为你在STL下写,转成了LAD,再转回STL所致。STL可以写得很干净,但LAD转过来的,就啰嗦了。
 2、第二个问题不存在。如果后call被执行,后面的mov一定执行,没有例外。

提问者对于答案的评价:
应该是这样的

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午11:51
下一篇 2021年7月4日

相关推荐

发表回复

登录后才能评论