2016-11-23 66 views
0

我想通過發送一些數據包,使通過Python文件的筆記本電腦和UART之間的通信: 我的包包含=如何從python文件發送apacket到我的uart?

2 bytes for Star of frames+ 
    2 bytes for command types+ 
    1 byte for the size of my data+ 
    16 bytes for my data+ 
    1 byte for my CRC. 

我有包含我要發送數據的一個例子的file.txt的文件:

0xccddeeff0x8899aabb0x445566770x00112233 

通過使用我想讀file.txt的數據(這我已經做)我的Python文件,然後我想加場的所有的休息,以便發送的所有數據包的UART。

import string 
import serial 
import time 
from array import array 

#Plaintxt.txt File 
with open('C:\\Users\\user\\Win_My_Scripts\\test.txt') as f: 
    content = f.readlines() 
#serial port 
ser = serial.Serial(
        port='COM4',\ 
        baudrate=230400,\ 
        parity=serial.PARITY_NONE,\ 
        stopbits=serial.STOPBITS_ONE,\ 
        bytesize=serial.EIGHTBITS,\ 
        timeout=0) 
#enter inputs plaintext & key 
print ('Plaintext=') 
SOF= '0x124' 
ENCRYPT_PLAINTEXT= '0x7772' 
SEND_CYPHERTEXT ='0x7773' 
SIZE_OF_FRAME= '0x10' 
CRC8= '0x00' 
for a in range (0,4): 
    line_array=content[a] 
    plaintxt_16b=line_array[0:16] 
    input_plaintext= SOF+ENCRYPT_PLAINTEXT+SIZE_OF_FRAME+plaintxt_16b+CRC8 

    print(plaintxt_16b) 

    ser.write (input_plaintext.encode()) 


    time.sleep(0.4) 
#closing the serial port 
ser.close() 

所以我的問題是: 1 /如何Concat的那些變量纔能有這樣的包?

 0x1240x77720x100xccddeeff0x8899aabb0x445566770x001122330x00 

2 /我UART然後將讀取的cmd.exe這個包,你THIK是從蟒蛇將數據發送到UART的最佳解決方案?如果您有其他建議,我會非常感激的。

在此先感謝。

+0

見struct.pack。 –

+0

是隻用於連接的IS結構包嗎? – tssmokey46

回答

0

struct.pack是你想要的。它打包類似於C結構的數據。您的示例有兩個16位值,一個字節長度,四個32位值和一個8位CRC。鑑於類似如下:

SOF = 0x124 
CMD = 0x7772 
data = [0xccddeeff,0x8899aabb,0x44556677,0x00112233] 
CRC8 = 0 

這將收拾它小端(發送多字節整數第一的最低字節),或大端。 hexlify僅用於顯示,因此您可以按生成的順序查看字節的十六進制值。

import struct 
from binascii import hexlify 
packet = struct.pack('<HHBLLLLB',SOF,CMD,4*len(data),data[0],data[1],data[2],data[3],CRC8) 
print(hexlify(packet)) 
packet = struct.pack('>HHBLLLLB',SOF,CMD,4*len(data),data[0],data[1],data[2],data[3],CRC8) 
print(hexlify(packet)) 

輸出:

b'2401727710ffeeddccbbaa9988776655443322110000' 
b'0124777210ccddeeff8899aabb445566770011223300'