1、 前几天,一位网友有如下问题。今编制了如下的程序,因出差在外身边无设备,不能实际调试。总之下述程序中刻意不直接应用OPN DB1或OPN DB1语句。程序中一些相关的语句参考了:
《关于S7-300和S7-400指针寻址的说明与例程(更新版)》其中第17、第18页:
http://www2.ad.siemens.com.cn/Download/Upload/AS/faq/F0215.pdf
请有设备或有PLCSIM的朋友仿真一下,程序是否可行?请将结果告之即可,谢谢。
2、要仿真的程序:
把DB1里的0至100个连续浮点数分别除以0.65然后依次成批放至DB2的连接200至300个连续浮点数变量里: 注意!0至100个总共为101个,200至300个也是总共为101个。
L P# DB1.DBX0.0 //初始读指针
LAR1
L P# DB2.DBX0.0 //初始写指针
LAR2
L 101 // 101个双字的循环计数为初值
M001: T MB 10 //计数值 送入MB 10
L D [AR1,P#0.0] //按读指针指示的地址读数据
L 0.65 //输入后系统会自动转换为指数形式650000e-002
/ R //浮点除法
T D [AR2,P#200.0] //按写指针指示的地址写数据
+AR1 P#4.0 //读指针指向下一数据(双字)地址
+AR2 P#4.0 //写指针指向下一数据(双字)地址
L MB 10 //取循环计数值
LOOP M001 //循环计数值如为0则结束循环;如不为0减1后则转向标号为M001的语句,继续循环
3、上述程序的关键语句参考上传的图片
问题补充:
1、关键是地址参数是否可以写为P# DB1.DBX0.0,从下述文档中是可以这样写的。请看看截取的图片。
《关于S7-300和S7-400指针寻址的说明与例程(更新版)》其中第17、第18页:
http://www2.ad.siemens.com.cn/Download/Upload/AS/faq/F0215.pdf
2、如果P# DB1.DBX0.0不能通过编译,那上传的“交叉区域指针常数”中所述的有何用途?请指教,谢谢。
图片说明:
最佳答案
前面一定要OPN DB1或OPN DB2之类的,否则编译错误。
图片说明:
提问者对于答案的评价:
感谢你的仿真。提出问题的初衷就是讲《关于S7-300和S7-400指针寻址的说明与例程(更新版)》这篇文档中在描述32位指针时列举了P# DB1.DBX0.0。
就被本问题询问了几位资深的用户精英,均表示这个文档在描述32位指针时例举了P# DB1.DBX0.0 绝对是不合适的。又反映西门子含有描述不当的文档、手册还有一定数量的。记得前些时候,西门子开展了一次纠错有奖活动。希望西门子及时、彻底地更新常用的手册、文档,以免像我们这样用户中招。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc242661.html