西门子S7-1200 PLC外部元器件提供的BCD码数值处理方式如下:
一、BCD码基础特性
编码规则
BCD码(Binary-Coded Decimal)用4位二进制数表示1位十进制数(0-9),例如十进制数12
的BCD码为0001 0010
(十六进制W#16#12
)。无效组合:4位二进制中
1010-1111
(十进制10-15)未使用,若出现则视为错误。数值范围
16位BCD码(Word类型):范围
-999
至+999
,最高4位为符号位(0
正,1
负)。32位BCD码(DWord类型):范围
-9999999
至+9999999
,最高4位为符号位。
二、S7-1200中的存储与转换
存储数据类型
S7-1200 无原生BCD类型,需用以下类型存储:Word类型:存储16位BCD码(如
MW0
)。DWord类型:存储32位BCD码(如
MD0
)。示例:外部BCD码
12
(0001 0010
)可存入MW0
,十六进制表示为W#16#12
。BCD与整数转换指令
范围限制:若整数超过BCD范围(如
Int>999
),输出截断为999
或-999
。错误处理:若BCD码含无效组合(如
1010
),CPU报错并停止。BCD→整数(CONV)
将BCD码转换为有符号整数(Int/DInt),指令格式:ladCONV (IN:=MW0, OUT:=MW10) // 16位BCD转IntCONV (IN:=MD0, OUT:=MD10) // 32位BCD转DInt
整数→BCD(CONV)
将整数转换为BCD码,需确保数值在BCD范围内:ladCONV (IN:=MW10, OUT:=MW0) // Int转16位BCDCONV (IN:=MD10, OUT:=MD0) // DInt转32位BCD
三、应用场景与示例
外部设备对接
拨码开关输入:4个输入点表示1位BCD码(0-9),PLC读取后转换为整数处理。
七段显示器输出:将整数转换为BCD码,驱动译码芯片显示十进制数。
典型程序段
lad
// 读取外部BCD码(假设存于MW0)并转换为整数 Network 1: CONV (IN:=MW0, OUT:=MW10) // BCD→Int // 处理整数(如加法) Network 2: ADD (IN1:=MW10, IN2:=10, OUT:=MW20) // MW10+10 // 将结果转回BCD码(假设需输出到BCD设备) Network 3: CONV (IN:=MW20, OUT:=MW30) // Int→BCD
四、注意事项
符号位处理
BCD码的符号位(最高4位)需单独处理。例如,16#F938
(1111 1001 0011 1000
)表示-938
。错误检测
使用
OK
指令检查转换前数据是否为有效BCD码。示例:
ladNetwork 1: OK (IN:=MW0, ENO=>Q0.0) // 检查MW0是否为有效BCDNetwork 2: CONV (IN:=MW0, OUT:=MW10) // 仅在Q0.0=1时执行
性能优化
频繁转换时,建议将BCD码存储在连续寄存器(如
MW0-MW10
),减少寻址时间。使用
SCL
语言编写转换函数,提高代码可读性。