您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

step7中bcd码和十六进制数

2024/8/5 15:34:36发布167次查看
bcd码(binary-coded decimal?6?0)是二进制编码的十进制数的缩写,bcd码用4位二进制数表示一位十进制数。bcd码各位的数值范围为2#0000~2#1001,对应于十进制数0~9。bcd码不能使用十六进制的a~f(2#1010~2#1111)这6个数字。bcd码本质上是十进制数,因此相邻两位逢十进一。
bcd码的最高位二进制数是符号位,负数的符号位为1,正数为0。16位bcd码的范围为–999~+999。
下图的拨码开关将显示的数字转换为4位二进制数。plc用12个数字量输入点读取的是3位bcd码,它的值为2#1000 0010 1001,即十六进制数16#829。
bcd码没有单独的表示方法,而是借用了十六进制的表示方法,因此二者很容易混淆。
下图是s7-300/400的bcd码和整数的相互转换指令,可以看到在指令中bcd码均用十六进制的形式表示。
在程序中,怎么知道一个数字是bcd码还是十六进制数呢?
1)看数据的来源和用途。bcd码一般用于输入和输出,例如来自拨码开关的数据是bcd码,送给显示电梯楼层的译码器芯片的是bcd码。
2)看手册的规定,例如数据类型date_and_time中的日期和时间值是bcd码,计数器的预设值pv和当前计数值cv_bcd为bcd码。
怎样监视bcd码?
在变量表和程序状态监控中,用十六进制格式监视bcd码。
怎样输入bcd码?
从上图可以看出,bcd码用十六进制格式输入,其最高位(符号位)为16#f(2#1111)。bcd码的低3位各位只能是0~9,如果是16#a~16#f则会出错。
计数器的预设值pv是0~999的bcd码,可以用格式为c#的常数(c#1~c#999)作为计数器的预设值。
下图用mw42提供计数器的预设值pv,如果用move指令将十进制数348(对应的十六进制数为16#15c)传送给mw42,进入run模式时,操作系统将它转换为bcd码时出错(16#15c不是bcd码),不能切换到run模式。
输入预设值348时,应改为将c#348传送给mw42,它会自动地变为w#16#348,当然也可以直接输入16#348。没有必要用i_bcd指令将348转换为bcd码w#16#348后,再传送给mw42。
在看手册时说bcd码和16进制都可以用16#表示如果现在装载一个数<br> l 16#296 如果是bcd码表示十进制296<br> 如果是十六进制表示十进制663<br> 系统是怎样区分那个数是bcd码还是十六进制的。
1. bcd 码是用2进制表示的十进制数,如果从最右端每4位转换成16进制数,则bcd 码也可以表示成16进制,例如:
16#123 , 转换成二进制应该是 2#0000 0001 0010 0011
2. 系统是怎样区分那个数是bcd码还是十六进制的。
这取决于使用的指令。例如: step7 中s5 定时器中的设定值,就是bcd数,而不是16进制数。
指令的规定与设计在最初一旦被定下来之后,就不能再修改。例如同样是定时器, 在ge 90-30 的plc 中,它的设定值就是10进制数,而不是16进制数。
3 . 在每一个指令中都有使用的数据类型的规定。在那里,你就知道该使用16进制数还是bcd码了, 先列表如下:
word 可以是2进制数,或者16进制数,或者bcd码。
dword 可以是2进制数,或者16进制数,或者10进制数。
然而,
int , dint 只能是10进制数或者16进制数。
参考出处:
step7 中的帮助,在索引项的输入要查找的关键字中输入: int
plc本身是不用区分的,我觉得在通讯的时候比较有用到;比如上位机采集200的时间的时候,200提供的是bcd码的时间;而上位机跟200对时的时候也需要给200bcd码的时间。主要还是编程的时候,处于省时省力的考虑吧。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product