ICIPSymbolObject.SymbolicServiceRequest (METH)¶
METHOD SymbolicServiceRequest : ERROR_CODE
Use this method to create CIP Services with should be accessed with symbolic paths
METHOD SymbolicServiceRequest : CIP_Object.ERROR_CODE VAR_INPUT
(* ID from the service to execute ) uiServiceCode : UINT; ( Pointer to data which points to the symbolic path ) pSymbolicPath : POINTER TO BYTE; ( Pointer to data which points to the value ) pData : POINTER TO BYTE; ( Size of the memory specified by pData ) uiDataSize : UINT; ( Inputs for response callback *) pRequest : POINTER TO CIP_ENC.EncapsulationPacket; itfCallback : ICIPCallback;
END_VAR VAR
pResponseData : POINTER TO BYTE; uiResponseSize : UINT; strResult : STRING; strSymbol1 : STRING := ‘mySymbol1’; strSymbol2 : STRING := ‘mySymbol2’; byteBuffer : MEMUtils.ByteBuffer;
END_VAR
byteBuffer(pbyBuffer := pData, udiBufferSize := uiDataSize, eByteOrder := MEMUtils.ByteOrder.LITTLE_ENDIAN); //used for reading input data strResult := CIP_Object.SymbolToString(pSymbolicPath); IF StrCaseCmpA(ADR(strResult), ADR(strSymbol1)) THEN
- IF uiServiceCode = 16#E THEN //Get attribute single service (see CIP specification)
//Return data // the variable should be declared in fb body pResponseData := ADR(_uiMySymbol1); uiResponseSize := SIZEOF(_uiMySymbol1);
- ELSIF uiServiceCode = 16#10 THEN //Set attribute single service (see CIP specification)
- IF uiDataSize = SIZEOF(_uiMySymbol1) THEN
_uiMySymbol1 := byteBuffer.GetWord();
- ELSE
- IF uiDataSize < SIZEOF(_uiMySymbol1) THEN
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.NOT_ENOUGH_DATA;
- ELSE
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.TOO_MUCH_DATA;
END_IF
END_IF
- ELSE
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.SERVICE_NOT_SUPPORTED;
END_IF
- ELSIF StrCaseCmpA(ADR(strResult), ADR(strSymbol2)) THEN
- IF uiServiceCode = 16#E THEN //Get attribute single service (see CIP specification)
//Return data // the variable should be declared in fb body pResponseData := ADR(_udiMySymbol2); uiResponseSize := SIZEOF(_udiMySymbol2);
- ELSIF uiServiceCode = 16#10 THEN //Set attribute single service (see CIP specification)
- IF uiDataSize = SIZEOF(_udiMySymbol2) THEN
_udiMySymbol2 := byteBuffer.GetDWord();
- ELSE
- IF uiDataSize < SIZEOF(_udiMySymbol2) THEN
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.NOT_ENOUGH_DATA;
- ELSE
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.TOO_MUCH_DATA;
END_IF
END_IF
- ELSE
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.SERVICE_NOT_SUPPORTED;
END_IF
- ELSE
SymbolicServiceRequest.GENERAL_STATUS := CIP_Object.GeneralStatus.PATH_SEGMENT_ERROR;
END_IF
- IF itfCallback <> 0 THEN
itfCallback.ServiceResponse(uiServiceCode := uiServiceCode, pData := pResponseData, uiDataSize := uiResponseSize, pRequest := pRequest, strStatus := SymbolicServiceRequest);
END_IF
- InOut:
Scope
Name
Type
Comment
Return
SymbolicServiceRequestInput
uiServiceCodeUINTID from the service to execute
pSymbolicPathPOINTER TO BYTE
Pointer to data which points to the symbolic path
pDataPOINTER TO BYTE
Pointer to data which points to the value
uiDataSizeUINTSize of the memory specified by pData
pRequestPOINTER TO CIP_ENC.EncapsulationPacket
Inputs for response callback
itfCallback