查看: 783|回复: 24
求S7-200对37个Q输出点的间接寻址方法
&p&现有37个汽缸分别用S7-200的Q0.0到Q4.4驱动。汽缸的操作状态由M5.4决定,要操作的汽缸的编号由VW78(0-36对应37个汽缸)指定。&/p&&p&希望能用间接寻址的方式操作。&/p&& && && && &&br&
弱弱的问句啥叫 间接寻址?
&p&http://www..cn/club/bbs/post.aspx?b_id=3&a_id=1005817&s_id=3&num=&pno=3#anch&/p&&p&41楼的发言符合需要,请参考&/p&
&p&回:阳正 &/p&&p&用指针或偏址方式寻址叫间接寻址.&/p&&p&按F1在帮助主题里输入 间接和直接编址 显示间接寻址的方法.&/p&&p&但帮助里只提供对数据格式为B(字节),W(字),D(双字)的间接寻址,没介绍对位间接寻址的方法.&/p&&p&对位的间接寻址应该是有小小难度的,若实现了对位的间接寻址后程序中批量处理位操作就非常方便了.&/p&
引用 winter938 的回复内容:http://www..cn/club/bbs/post.aspx?b_id=3&a_id=1005817&s_id=3&num=&pno=3#anch41楼的发言符合需要,请参考&br /&&hr /&该贴中没有司马&br /&&br /&
我的方法是这样的:&br /&1、在同一区,比如Q,将位编号,规则是Qx.y=x*8+y,所以Q0.0编号为0,Q1.1编号为9,依次类推。这个编号就当作位的间接地址(word);&br /&2、拿到这个位的地址addr,先对它作ANDW,取出最低的3位(二进制),这个就是Qx.y中的y,对它DECO,就定位到字节内的某一位了,定义这个变量为bits;再对地址作SRWAddr,3,取出x,这个就是字节序号,合成指针&QB0+x,就可以定位这个“位”所在的字节,定义这个指针为ptr;&br /&3、位的状态:movb*ptr,ac0、andbbits,ac0,查看sm1.1,就行了;(应该是SM1.0,结果为0的标记,修正)&br /&4、置位:orbbits,*ptr&br /&5、复位:invbbits、andbbits,*ptr
&p&引用 winter938 的回复内容:我的方法是这样的:1、在同一区,比如Q,将位编号,规则是Qx.y=x*8+y,所以Q0.0编号为0,Q1.1编号为9,依次类推。这个编号就当作位的间接地址(word);2、拿到这个位的地址addr,先对它作ANDW,取出最低的3位(二进制),这个就是Qx.y中的y,对它DECO,就定位到字节内的某一位了,定义这个变量为bits;再对地址作SRWAddr,3,取出x,这个就是字节序号,合成指针&QB0+x,就可以定位这个“位”所在的字节,定义这个指针为ptr;3、位的状态:movb*ptr,ac0、andbbits,ac0,查看sm1.1,就行了;(应该是SM1.0,结果为0的标记,修正)4、置位:orbbits,*ptr5、复位:invbbits、andbbits,*ptr 原贴抄过来的&br /&&/p&&p&&hr /&&/p&&p&&br /&这个方法有用.&/p&&p&谢谢winter938 的回复.&br /&&/p&
&p&TO:winter938&/p&&p&虽能实现但取整取余及后面的逻辑操作太冗长.有无办法再简洁点?&/p&
回复内容:&br /&对:lgj3388关于回:阳正 用指针或偏址方式寻址叫间接寻址.按F1在帮助主题里输入 间接和直接编址 显示间接寻址的方法.但帮助里只提供对数据格式为B(字节),W(字),D(双字)的间接寻址,没介绍对位间接寻址的方法.对位的间接寻址应该是有小小难度的,若实现了对位的间接寻址后程序中批量处理位操作就非常方便了.内容的回复:&br /&&hr /&&br /&谢谢。
&p&用DECO指令即可。因为S7-200只支持一个字16位,所以控制37个位程序要麻烦些,需要分3步。&/p&&p&&/p&
天天自动化最新推荐 /1
想了解最新的PLC培训开课信息吗?想把握最前沿的工控资讯吗? 扫描天天微信二维码 关注 天天PLC培训,为您推荐最新PLC课程及资讯,随时随地掌握行业动态
Powered by