0
0 комментариев

Есть устройство, которое работает по Uart и принимает команды в таком виде:
введите сюда описание изображения
Полная документация

Есть готова библиотека на C++, которая прекрасно работает, принцип отправки команды:

#define BYTE unsigned char
#define WORD unsigned int
#define DWORD unsigned long
 
#define STX1  0x55  //Header1
#define STX2  0xAA  //Header2
#define SB_OEM_PKT_SIZE  12
#define SB_OEM_CHK_SUM_SIZE  2
enum {CMD_OPEN = 0x01}
 
 
typedef struct {
    BYTE    Head1;
    BYTE    Head2;
    WORD    wDevId;
    DWORD   nParam;
    WORD    wCmd;// or nAck
    WORD    wChkSum;
} SB_OEM_PKT;
 
WORD CalcChkSumOfCmdAckPkt( SB_OEM_PKT* pPkt ){
    WORD wChkSum = 0;
    BYTE* pBuf = (BYTE*)pPkt;
    int i;
    for(i=0;i<(sizeof(SB_OEM_PKT)-SB_OEM_CHK_SUM_SIZE);i++){
        wChkSum += pBuf[i];
    }
    return wChkSum;
}
 
void SendCmdOrAck(WORD wDevID, WORD wCmdOrAck, DWORD nParam) {
    SB_OEM_PKT pkt;
    int nSentBytes;
 
    pkt.Head1 = (BYTE)STX1;
    pkt.Head2 = (BYTE)STX2;
    pkt.wDevId = wDevID;
    pkt.wCmd = wCmdOrAck;
    pkt.nParam = nParam;
    pkt.wChkSum = CalcChkSumOfCmdAckPkt( &pkt );
 
    nSentBytes = gtmSerial->write( (BYTE*)&pkt,SB_OEM_PKT_SIZE);
}
 
WORD gwDevID = 1;
int main(){
    SendCmdOrAck(gwDevID, CMD_OPEN, 1);
    return 0;
}

Полностью библиотека

На как реализовать отправку такого типа на Python?
Пытался упаковать через struct:

ser.write(pack('<BBILII', 0x55,0xAA,0x0001,1,1,258))

Но модуль возвращает ошибку(по uart назад присылает ответ, обозначающий ошибку).
Подскажите как это реализовать на python?
Буду рад любой помощи, даже догадок.


Добавить комментарий