蓝色港湾 发表于 2023-9-22 21:57:57

基于CODESYS平台的ANY数据类型自动生成Buffer序列

什么场景会用到Buffer序列?
      Buffer序列一般用在两个控制器或者2个进程之间的通讯。标准的通讯协议库会自动生成Buffer序列,想要使用自定义协议时,就需要自创建Buffer序列。
   下面就是基于CODESYS平台的ANY数据类型自动生成Buffer序列源代码Function。可以利用该功能Function方便连续的生成Buffer序列。
FUNCTION FC_MakeBuffer : BOOL
VAR_INPUT
        anyInput: ANY;
        pInPos    : POINTER TO DINT;
        pInBuffer : POINTER TO ARRAY OF BYTE;

    xInVariableEn   : BOOL;       
        pInVariableCount: POINTER TO INT;
END_VAR
VAR
        i         : DINT;       
        pTemp1    : POINTER TO BYTE;
        pTemp2    : POINTER TO BYTE;
        VariableProperty : DataProperty1;       
END_VAR

VariableProperty.diLength:= anyInput.diSize;
VariableProperty.pPostion := anyInput.pValue;

pTemp1 := VariableProperty.pPostion;
pTemp2 := pInBuffer + DINT_TO_DWORD(pInPos^);

FOR i := 0 TO VariableProperty.diLength-1 BY 1 DO       
        pTemp2^ := pTemp1^;
        pTemp1:= pTemp1 + 1;
        pTemp2:= pTemp2 + 1;
END_FOR;

pInPos^ := pInPos^ + VariableProperty.diLength;
IF xInVariableEn THEN
   pInVariableCount^ := pInVariableCount^ + 1;
END_IF;注意:所有变量都是最低位在左侧,做高位再右侧。字符串的话,最左侧字符就在最左侧。
页: [1]
查看完整版本: 基于CODESYS平台的ANY数据类型自动生成Buffer序列