С помощью "одного входного параметра pStructData" можно передать в блок любые данные любых типов.
Спрошу иначе. Какой тип pStructData будет объявлен в FB?
Я сделал так:
Код:
FUNCTION_BLOCK SaveDataToFile
VAR_INPUT
sFileName : STRING;
pstDataMC : POINTER TO MACHINE_CONFIG;
pstDataRCP : POINTER TO RECIPIES;
pstDataDP : POINTER TO DRIVE_PARAMS;
szData : UINT;
eNameData : STRUCT_NAME;
END_VAR
А в коде FB я обрабатываю так (кусок логики):
Код:
FILE_WORK.WRITE:
CASE eNameData OF
STRUCT_NAME.MACHINE_CONFIG:
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=pstDataMC, szSize:=szData);
STRUCT_NAME.DRIVE_PARAMS:
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=pstDataDP, szSize:=szData);
STRUCT_NAME.RECIPIES:
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=pstDataRCP, szSize:=szData);
END_CASE
IF fbFileWrite.xDone THEN
fbFileWrite(xExecute:=FALSE);
CASE eNameData OF
STRUCT_NAME.MACHINE_CONFIG:
wCRC16_std := MEM.CRC16_standard(pMemoryBlock := pstDataMC, uiLength := szData);
STRUCT_NAME.DRIVE_PARAMS:
wCRC16_std := MEM.CRC16_standard(pMemoryBlock := pstDataDP, uiLength := szData);
STRUCT_NAME.RECIPIES:
wCRC16_std := MEM.CRC16_standard(pMemoryBlock := pstDataRCP, uiLength := szData);
END_CASE
enState := FILE_WORK.WRITE_CRC;
END_IF
IF fbFileWrite.xError THEN
CASE enFileErr OF
; //Обработчик ошибок
END_CASE
END_IF
МОжет можно проще, но я не понял как