三菱PLC 位转字怎么写啊

Dereky 2011-09-21 10:29:22
我的实际需求是这样,设置了4个辅助继电器,对不同的状况取值,最后得到的数值是类似这样:
m1=1,m2=0,m3=1,m4=1,最终,我需要把这4个位的值弄到一个寄存器中去,最终要得到的是一个2进制数:1011,也就是10进的11,
但是,我用 move k1m1 d100 这样的语句的话,得到的却是13,也就是 1101,刚好反了。
请教应该怎么处理啊??
...全文
2237 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongjiazhao 2011-10-30
  • 打赏
  • 举报
回复
64 32 16 8 4 2 1
M7 M6 M5 M4 M3 M2 M1 (注意:位是从右到左递增,即第1位是M1....)

K1M1:K1代表1组即4位,K1M1就是M1~M4;

当M1=1,M2=0,M3=1,M4=1,即K1M1的值:2进制是1101,10进制是1+4+8=13;

当M1=1,M2=1,M3=0,M4=1,即K1M1的值:2进制是1011,10进制是1+2+8=11;

所以...

[MOV K1M1 D100]

比如想:D100的值是8(2进制1000) 那么就是K1M1第4位M4=1 其他位M1、M2、 M3 都等于0;

D100的值是10(2进制1010)那么就是K1M1第2和第4位 M2=1 M4=1 其他M1、 M3 都等于0;

如果你硬是要当M1=1,M2=0,M3=1,M4=1,即K1M1的值:2进制是1101,10进制是1+4+8=13时,得到D100的

值2进制是1011,10进制是11;那么你不能用[MOV K1M1 D100]这条指令,直接将K1M1的值赋予D100,那样

D100的值一定是2进制是1101,10进制是13;

你可以:
----------[MOV K1M1 D0]

-------[= K13 D0]--[MOV K11 D100]

或者.....
woshi_ziyu 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 dereky 的回复:]
我的实际需求是这样,设置了4个辅助继电器,对不同的状况取值,最后得到的数值是类似这样:
m1=1,m2=0,m3=1,m4=1,最终,我需要把这4个位的值弄到一个寄存器中去,最终要得到的是一个2进制数:1011,也就是10进的11,
但是,我用 move k1m1 d100 这样的语句的话,得到的却是13,也就是 1101,刚好反了。
请教应该怎么处理啊??
[/Quote]
试一下交换指令SWAP呢
zhangguirui 2011-09-21
  • 打赏
  • 举报
回复
你的排序是低位在前,2进制应该是高位在前,建议你不想大改动的话,比如把M1输出到M8,把M2输出到M7,以此类推,然后move k1m5 d100,肯定可以了,可以给分了吧,呵呵
Dereky 2011-09-21
  • 打赏
  • 举报
回复
不行啊,因为每个继电器实际上是代表某一项的状态,比如m1是代表着机柜门是否打开,即使倒过来还是一样反了啊
  • 打赏
  • 举报
回复
那就索性将继电器的顺序倒着用吧

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧