发布于 2013-03-11 08:44:38
4楼
问题出现在这个不起眼的地方。
FUNCTION_BLOCK 179
VAR_INPUT
IBAddrStartInBuffer : INT ;
END_VAR
VAR_OUTPUT
IntelligentSwitchAddr : INT ;
BeltCarrierNum : INT ;
SensorType : INT ;
FaultCode : INT ;
CheckSum : BYTE ;
END_VAR
BEGIN
NETWORK
L P#0.0;
LAR1 ;
L P##Byte01_STX1;
LAR2 ;
L #IBAddrStartInBuffer;
T MW100
END_FUNCTION_BLOCK
OB1里的调用是
CALL FB179,DB179
IBAddrStartInBuffer :=11
IntelligentSwitchAddr:=MW100
BeltCarrierNum :=MW102
SensorType :=MW104
FaultCode :=MW106
发现FB179里“L #IBAddrStartInBuffer”的得数不是11。
而在FC的情况如下:
FUNCTION 179:VIOD
VAR_INPUT
IBAddrStartInBuffer : INT ;
END_VAR
VAR_OUTPUT
IntelligentSwitchAddr : INT ;
BeltCarrierNum : INT ;
SensorType : INT ;
FaultCode : INT ;
CheckSum : BYTE ;
END_VAR
BEGIN
NETWORK
L P#0.0;
LAR1 ;
L P##Byte01_STX1;
LAR2 ;
L #IBAddrStartInBuffer;
T MW100
END_FUNCTION_BLOCK
OB1里的调用是
CALL FC179
IBAddrStartInBuffer :=11
IntelligentSwitchAddr:=MW100
BeltCarrierNum :=MW102
SensorType :=MW104
FaultCode :=MW106
此时在FC179里“L #IBAddrStartInBuffer”的得数就是11。
开始没注意到AR2的引用会有如此影响,所以前面发帖时省略了AR的访问语句。偶然进行其他操作,从系统提示信息里得知AR2的应用会影响FB的local variable的传递。才知道问题出在这里。但内部原理还待高手分解。
知其道,用其妙!