请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM2434 工具/软件:
您好:
我发现自己无法通过 SMI API 写出处理数据请求。 我已经尝试了来自工业 COM SDK 本身和用户指南的这两个代码示例。 每当发出请求时、它都会返回一个无效的 ArgBlock Length 的错误。 请告知此代码使用是否不正确。
// Allocate ArgBlock Memory
IOLM_SMI_SPDOut *psuReq = malloc(sizeof(IOLM_SMI_SPDOut)); // Pointer to Process Data Output Struct
INT16U u16Length = sizeof(IOLM_SMI_SPDInOut); // Argument Block Length
INT16U u16Error; // Return Error
// Fill Request
psuReq->u16ArgBlockID = IOLM_SMI_ENDIAN_16(IOLM_SMI_eArgBlockID_PDOut); // Big Endian Arg Block ID
psuReq->u8OE = 0x01; // Output Enabled
psuReq->u8OutputDataLength = 0x02; // Length of Process Data Output is 2 Bytes
// Data
psuReq->au8Data[0] = 0xFF;
psuReq->au8Data[1] = 0x00;
// Method 1 Send and Callback
// Send Out Request
IOLM_SMI_vPDOutReq(IOLM_SMI_CLIENT_APP, portNumber, u16Length, (INT8U*)psuReq);
// Callback
void IOLM_EXMPL_cbPDOutCnf(uint8_t clientID, uint8_t portNumber, uint16_t error)
{
(void)clientID;
if (error != IOL_eErrorType_NONE)
{
// Returns 0x4034 - IOL_eErrorType_ARGBLOCK_LENGTH_INVALID
portArray[portNumber].exampleState = IOLM_EXMPL_PortErrorHandler(portNumber, error);
}
else
{
IOLM_EXMPL_printf("---------------Write Process Data Success-----------------\n");
portArray[portNumber].exampleState = IOLM_eExampleState_ReadProcessDataValue;
}
}
// Method 2 Send Out and Confirm
// Send Out Request
u16Error = IOLM_SMI_u16PDOutReqCnf(IOLM_SMI_CLIENT_APP, portNumber, u16Length, (INT8U*)psuReq);
// Confirm
if (u16Error == IOL_eErrorType_NONE)
{
IOLM_EXMPL_printf("---------------Write Process Data Success-----------------\n");
portArray[portNumber].exampleState = IOLM_eExampleState_ReadProcessDataValue;
}
else
{
// Returns 0x4034 - IOL_eErrorType_ARGBLOCK_LENGTH_INVALID
portArray[portNumber].exampleState = IOLM_EXMPL_PortErrorHandler(portNumber, error);
}
谢谢您、
- Joe Pfaltzgraff