请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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