[西门子] 【智】200SMART与200PLC之间MODBUS主从通讯多个读写指令轮询详解

[复制链接]
查看23296 | 回复0 | 2024-8-23 17:31:45 | 显示全部楼层 |阅读模式
大家好,我是微控小智,今天又跟大家见面了。学习需要坚持,做技术亦是如此,厚积才能博发。小智写的程序都是进行反复测试过的,可以放心跟着操作,有疑问的地方可以留言。



今天小智给大家分享一个FOR循环嵌套间接寻址异或运算案例,如果大家看程序有些困难,不妨先来复习下前面给大家分享一些知识点,方便大家理解程序。

FOR-NEXT循环指令

FOR-NEXT循环指令是有由FOR循环开始指令和NEXT循环结束指令组成,主要用于某程序段需要执行一定次数的情况下,那么反复执行的程序段落,就称为循环体。

(1)FOR循环开始指令:用来标记循环体的开始,有3个数据输入端:

INDX: 存放循环体执行的次数,数据类型为字

INIT: 循环次数初始值

FINAL:循环次数结束值

(2)NEXT循环结束指令:标记循环体的结束。

FOR和NEXT必须成对使用,在FOR和NEXT之间构成循环体。当允许使能输入EN有效时,执行循环体,首先将循环初值(INIT)装入INDX,然后每执行1次循环体,INDX自动加1,并且与结束值相比较,如果INDX大于FINAL,则循环结束。例如,设定循环初始值INIT为1,结束值FINAL为10,使能输入有效时,执行循环体,同时INDX从1开始计数,执行第一次循环体,INDX当前计数值加1,直到执行10次,当前计数值也增加到11,此时系统终止循环。在S7-200中,循环指令允许嵌套使用,最大嵌套深度为8层。FOR和NEXT循环体内部可以再含有FOR、NEXT循环体,称为循环嵌套。 每次使能输入重新有效,指令自动将各参数复位。

间接寻址

(1)间接寻址: 间接寻址是指用指针来访问存储区数据。指针以双字的形式存储其它存储区的地址。只能用V存储器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针,AC0只能存入指针变量中的数值,不能做指针。要建立一个指针,必须以双字的形式,将需要间接寻址的存储器地址移动到指针中。指针也可以作为参数传递到子程序中。

&为取地址符号。

*为取值符号,即指针符号

我们可以把间接寻址中指针可以理解为酒店房间的房卡,酒店的房间是实际的物理地址,物理地址就是房间的房间号,客人可以看作是房间的值,那么客人入住酒店只需要在前台办理房卡,房卡上面写有入住酒店的房间号,房卡指向具体的房间地址,客人只需要用房卡打开具体的房间就可以入住了,如果需要更换房间,也只需要在前台更换房卡上面的房间号就可以入住对应的房间了。

(2)建立指针:建立指针时必须用双字传送指令MOV_DW将需要间接寻址的存储器地址送到指针中。

(3)用指针存取数据:指令操作数前面加*符号,表示该操作数为一个指针。指针可按字节,字,双字存取数据。指针指向存储区地址的值。

(4)指针偏移:如果要连续存取指针所指向的数据时,由于指针是32位的数据,应使用双字指令来修改指针值,修改指针时可用双字加法指令和双字自加一指令。但需要注意,存取字节时,指针值加1,存取字时,指针值加2,存取双字时,指针值加4。

异或指令

异或:是二进制数据的运算法则,如果是非二进制数据先转换成二进制数据再进行异或运算,其运算原则是两个二进制数据的对应位相同为0,不同为1。

程序如下图所示:



I0.0和I0.1组合用来操作FOR循环2级嵌套,I0.1接通后循环体执行8次,VW0自加1执行8次等于8,I0.0接通后,循环体再执行10次,VW0结果等于80。

I0.2接通后,VB10赋初始值0,将VB6的地址送到累加器AC1建立指针,同时建立循环体,循环体的内容是让VB10与VB6、VB7、VB8、VB9分别进行异或运算,每进行一次异或运算后把结果放到VB10中,VB6、VB7、VB8、VB9需要分别写入二进制数据2#00000011、2#00001100、2#00110000、2#11000000,异或之后的VB10结果为2#11111111。

实践出真知,没有实践,理论就是纸上谈兵;学习中需要多加验证。如果大家看了小智的文章后有所收获,可以分享更多的朋友。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则