这个是网上找到的程序
发送的源码
FUNCTION FC101:VOID
VAR_TEMP
I:INT;
J:INT;
CRC:WORD;
TEMP:ARRAY[0..7] OF BYTE;
END_VAR
VAR_INPUT
Slave:BYTE; //The Slave Address
FunctionCode:BYTE;
Offset:INT;
Length:INT;
END_VAR
VAR_OUTPUT
SENDBUF:ARRAY[0..7] OF BYTE;
END_VAR
CRC:=16#FFFF;
TEMP[0]:=Slave;
TEMP[1]:=FunctionCode;
TEMP[2]:=WORD_TO_BYTE(SHR(IN:=INT_TO_WORD(Offset), N:=8));
TEMP[3]:=WORD_TO_BYTE(INT_TO_WORD(Offset));
TEMP[4]:=WORD_TO_BYTE(SHR(IN:=INT_TO_WORD(Length), N:=8));
TEMP[5]:=WORD_TO_BYTE(INT_TO_WORD(Length));
FOR I:= 0 TO 5 BY 1 DO
CRC:=CRC XOR TEMP[I];
FOR J:= 0 TO 7 BY 1 DO
// Statement Section
IF (CRC AND 16#01) <> 0 THEN
CRC:=SHR(IN:=CRC, N:=1) XOR 16#A001;
ELSE
CRC:=SHR(IN:=CRC, N:=1);
END_IF;
END_FOR;
END_FOR;
TEMP[7]:=WORD_TO_BYTE(SHR(IN:=CRC, N:=8));
TEMP[6]:=WORD_TO_BYTE(CRC);
FOR I:= 0 TO 7 BY 1 DO
SENDBUF[I]:=TEMP[I];
END_FOR;
//FC101 := TRUE;
END_FUNCTION
接受的源码
FUNCTION FC103:VOID
VAR_TEMP
I:INT;
J:INT;
CRC:WORD;
CRCL:BYTE;
CRCH:BYTE;
Length:INT;
TT:WORD;
END_VAR
VAR_INPUT
Buffer:ARRAY[0..255] OF BYTE;
END_VAR
VAR_OUTPUT
Res:BOOL;
END_VAR
CRC:=16#FFFF;
Length:=WORD_TO_INT(BYTE_TO_WORD(Buffer[2]))+5;
FOR I:= 0 TO Length-3 BY 1 DO
CRC:=CRC XOR Buffer[I];
FOR J:= 0 TO 7 BY 1 DO
// Statement Section
IF (CRC AND 16#01) <> 0 THEN
CRC:=SHR(IN:=CRC, N:=1) XOR 16#A001;
ELSE
CRC:=SHR(IN:=CRC, N:=1);
END_IF;
END_FOR;
END_FOR;
CRCL:=WORD_TO_BYTE(SHR(IN:=CRC, N:=8));
CRCH:=WORD_TO_BYTE(CRC);
Res:=(CRCL=Buffer[Length-1]) AND (CRCH=Buffer[Length-2]);
END_FUNCTION
现在的疑问是:
1:发送的时候,如果我想输入400001那我在哪里输入呢?
2:接受的源码中的 Length:=WORD_TO_INT(BYTE_TO_WORD(Buffer[2]))+5;是什么意思,为什么用Buffer[2]而且还要加5呢?
3:FOR I:= 0 TO Length-3 BY 1 DO
为什么用到Length-3呢?
望高手能指点,再次先谢了!