发布于 2006-03-07 16:43:31
0楼
S7-300/400相对来说容易处理些,因为它可以直接对"位"进行异或运算,S7-200最多才支持对字节的异或运算....... 网上有很多关于格雷码和二进制转换的算法. 用S7-200表示出来如下:
SUBROUTINE_BLOCK GRAY_BIN:SBR0
TITLE=格雷码转换成二进制(八位)
VAR_INPUT
IN_BYTE_GRAY:BYTE;
END_VAR
VAR_OUTPUT
OUT_BYTE_BIN:BYTE;
END_VAR
VAR
N:INT;
TMP1:BYTE;
TMP2:BYTE;
TMP3:BYTE;
END_VAR
BEGIN
Network 1
LD SM0.0
MOVB #IN_BYTE_GRAY, #TMP1
Network 2
LD SM0.0
FOR #N, 1, 7
Network 3
LD SM0.0
MOVB #TMP1, #TMP2
SRB #TMP1, 1
XORB #TMP1, #TMP2
SHRB L5.0, L6.6, -7
Network 4
NEXT
Network 5
LD L4.0
= L6.7
Network 6
LD SM0.0
MOVB #TMP3, #OUT_BYTE_BIN
END_SUBROUTINE_BLOCK
I can do it