查看: 2155|回复: 11
收起左侧

[教程经验] 分享:进制转换

邀请回答

马上注册,享受更多特权

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

x
plc常用编程进制一般有:二进制、八进制、十进制、十六进制。不同的进制在不同的场合应用较多,例如:
八进制,一般用于plc的IO模块,一般都是说8个点16个点,八进八出。二进制,多用于字位转换,流程状态的判断,左移右移等。
十六进制,多用于地址规划,对象字典,通讯地址等。

总结一下进制之间相互转换的方式,顺便帮各位回顾一下,先从简单的十进制转n进制开始,然后是n进制转十进制,道理基本都是相通的。

一、n进制与十进制

1.n进制转十进制
从右往左,按照顺序取每一位的数值 * n进制的x次方,再进行求和,结果就是十进制。例如:

2#1101
10#: 1*2^0 + 0*2^1 + 1*2^2 + 1^2^3=13

8#2015
10#: 5*8^0 + 1*8^1 + 0*8^2 + 2*8^3=1037

16#3E2
10#: 2*16^0 + 14(E)*16^1 + 3*16^2= 994

2.十进制转n进制
反过来相除,再取每一次的余数从右往左排列,组合起来就是对应的进制。例如

10#28
2#:28/2=14余0,14/2=7余0,7/2=3余1,3/2=1余1,1mod2=1,反向组合余数 。结果 11100
8#:28/8=3余4,3mod8=3,结果 34
16#:28/16=1余12,1mod16=1,结果 1C

二、2进制和8进制、16进制
2#和8#、16#成倍数关系,有着8421和421的特殊用法,转换也比较方便,因为2^3=8,2^4=16。例如

2#1011 0101
8#:从右往左按照3个数进行组合划分,010  110  101 ,分别对应 2 6 5,结果265
16#:从右往左按照4个数进行组合划分,1011 0101 ,分别对应11(B)  5,结果 B5


8#1234
2#:将8#数据每一位拆分为3位进行组合,1对应001  2对应010  3对应011  4对应100,结果 001 010 011 100


16#3FD
2#:将16#数据每一位拆分为4位进行组合,3对应0011  F对应1111  D对应1101,结果 0011 1111 1101


三、应用
进制转换只看数据似乎没什么意思,那么在plc中如何去应用呢?以二进制和十进制的转换为例,字和位的调用转换,其余各位可自行探索。


例如通讯地址是int类型的映射,那么一个int中有16个bit,如何取出这16位的状态呢?
汇川plc内部给出位的访问,通过a.0   a.1的方式,但是不能引入变量循环访问,指针也无法取到位地址,这种方式在数据量少的时候用起来还能接受,如果数据量大,例如我有10个字要做传输通讯,10*16=160个bit,这代码操作起来是很要命的!


下面介绍第二种方式,and判断字位转换
and和or本是状态判断,状态判断只有true和false两种,相当于是2进制的判断,int类型默认10进制,在使用and进行判断的时候,就可以间接将int类型隐式转换为2进制,可对位判断。
例如:
VAR
      iData : int:=13;//对应2进制为 1101
END_VAR
第1位状态获取:= iData  and  2#0001
第2位状态获取:= iData  and  2#0010

第3位状态获取:= iData  and  2#0100第4位状态获取:= iData  and  2#1000
image.png
可以使用更简便的方法来替代2#的数据,使用expt(2,x),即2的x次方,那就可以在for循环中编写了,批量修改数据方便使用。
image.png image.png

位进行组合成字的方式,对应就是获取状态,然后根据1.1中的方法累加2^x次方,就能实现16个bit组合成int。方法相同不再赘述,各位可自行尝试。




上一篇:仿真无法赋值
下一篇:CANopen伺服运动控制行规CiA 402

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

Slimming 2022-4-9 20:40:21 | 显示全部楼层
本帖最后由 Slimming 于 2022-4-9 22:39 编辑

分享一下我自己写的进制转换程序,写的比较潦草没有考虑资源占用问题,就是任意进制都转成10进制,然后10进制再转任意进制。软件版本1.5.2(SP4F2)不确定是否可以打开。我不知道还有什么方法可以上传功能块或者程序。如果打不开各位指导我一下。
image.png image.png image.png image.png
image.png
image.png
image.png
image.png

进制转换.7z

212.97 KB, 下载次数: 30

回复 送花

使用道具 举报

工控小小白 2022-4-9 12:04:07 | 显示全部楼层
感谢分享,孙工,可以写个FB/FC分享下
我看使用16进制字符串也可以转10进制

image.png

回复 送花

使用道具 举报

Slimming 2022-4-9 20:12:38 | 显示全部楼层
工控小小白 发表于 2022-4-9 12:04
感谢分享,孙工,可以写个FB/FC分享下
我看使用16进制字符串也可以转10进制

需要的话我等会发出来,确实写了个
回复 送花

使用道具 举报


感谢分享
回复 送花

使用道具 举报

Parker 2022-6-12 08:39:39 | 显示全部楼层
内容详细,感谢分享
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部