S7-200 SMART PLC 间接寻址使用说明
主要内容:
1、间接寻址
2、使用中的注意
STEP 7-MicroWIN SMART版本:V2.0.3
有段时间没分享文章给大家了,最近有空会陆续写一些关于S7-200 SMART PLC基础性的东西,欢迎关注交流。
1间接寻址
1.说明
间接寻址顾名思义相对于直接寻址,其使用指针访问存储器中的数据。指针是包含另一个存储位置地址的双字存储位置,程序通过修改指针值就可以访问不同地址的数据。
只能将 V 存储位置、L 存储位置或累加器寄存器(AC1、AC2、AC3)用作指针。 要创建指针,必须使用“移动双字MOV_DW”指令(也就是说S7-200 SMART PLC 的存储器绝对地址是4字节),将间接寻址的存储位置地址移至指针位置。 指针还可以作为参数传递至子例程。
S7-200 SMART 允许指针访问下列存储区: I、Q、V、M、S、T(仅限当前值)、C(仅限当前值)、SM、AI 和 AQ。 不能使用间接寻址访问单个位或访问 HC、L 或 AC 存储区。
要间接访问存储器地址中的数据,通过输入一个“和”符号 (&) 和要寻址的存储位置,创建一个该位置的指针。 指令的输入操作数前必须有一个“和”符号 (&),表示存储位置的地址(而非其内容)将被移到在指令输出操作数中标识的位置(指针)。
在指令操作数前面输入一个星号 (*) 可指定该操作数是一个指针。 如下图所示,输入 *AC1 指定 AC1 是“移动字”(MOVW) 指令引用的字长度值的指针。 在该示例中,在 VB200 和 VB201 中存储的值被移至累加器 AC0。
通过更改指针值,访问对应的存储器的值。 由于指针是 32 位值,使用双字指令修改指针值。 可使用简单算术运算(例如加或递增)修改指针值。
下面是一操作指针的例子:
说明:
修改指针值时,切记调整所访问数据的大小:访问字节时,指针值加 1;访问定时器或计数器的字或当前值时,指针值加 2;访问双字时,指针值加 4。
2使用中的注意
不同型号的CPU存储器地址范围是不同的,下图是各型号CPU V存储器的范围:
对于间接寻址,具体访问的存储器地址是在PLC运行时由用户程序控制,如果访问超出了范围,将导致PLC错误。
相信大家经常遇到同一项目程序需在不同型号的CPU中运行情况。
如下面示例程序:
MOVD &VB8190, AC1
通过将 VB8190的地址(VW8190 初始字节的地址)移动到 AC1,创建指针
MOVW *AC1, AC0
将 AC1 指向的字值 (VW8190) 移动到 AC0
+D +2, AC1
累加器加 2,以指向下一个字位置
MOVW *AC1, AC0
将 AC1 指向的字值 (VW8192) 移动到 AC0
当下载到30、40、60型号CPU中运行不会报错,但在20型号CPU中运行会报错,因为指针间接访问的地址VW8192已经超出了VB8191。
解决此项目程序通用性问题的方法:可以在项目中增加V存储器地址范围判断程序如下:
16#08002000: VB8192的绝对地址
16#08003000: VB12288的绝对地址
16#08004000: VB16384的绝对地址
16#08005000: VB20480的绝对地址
如果CPU型号是20,16#08002000等四个绝对地址都超出了20型号最大地址VB8191,执行MOVB *AC1, *AC1将报错(当然此错误属于非致命,不会导致PLC STOP),MOVB指令的ENO=0,输出m0.0=0、m0.1=0、m0.2=0、m0.3=0,通过判断不同输出值来设置指针合适的起始地址,放在如VD2000,保证指针操作始终不会超出CPU规定的地址范围。
CPU型号是30
然后把原先的项目程序修改为:
MOVD VD2000, AC1
创建指针
MOVW *AC1, AC0
+D +2, AC1
累加器加 2,以指向下一个字位置
MOVW *AC1, AC0
加上V存储器地址范围判断程序,使以上程序适合所有型号的CPU。
若觉得文章对你有帮助,记得点赞、分享。扫描下面二维码、关注后,在底部菜单中查看更多内容!
微信公众号:scadaclub
长按识别图中二维码关注