2016-11-23 1 views
0

는 좀 패킷을 전송하여 파이썬 파일을 통해 노트북 및 UART 사이의 통신을 만들고 싶어 : 내 패킷 = 포함python 파일에서 내 uart로 apacket을 보내려면 어떻게해야합니까?

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를 파일이 있습니다 : 나는 (내가 이미 한) file.txt를에서 데이터를 읽고 싶어 내 파이썬 파일을 사용하여

0xccddeeff0x8899aabb0x445566770x00112233 

, 그때는 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 다음 그 UART하는 파이썬에서 데이터를 전송하는 가장 좋은 솔루션입니다 thik 않습니다 cmd.exe를에서 해당 패킷을 읽을 것인가? 다른 제안이 있다면 매우 감사 할 것입니다.

미리 감사드립니다.

+0

참조 다음 struct.pack. –

+0

구조 팩은 연결 용으로 사용됩니다. – tssmokey46

답변

0

struct.pack은 원하는 것입니다. 그것은 C 구조와 유사한 데이터를 포장합니다. 귀하의 예는 두 개의 16 비트 값, 바이트 길이, 네 개의 32 비트 값 및 8 비트 CRC를가집니다. 다음과 같은 감안할 때 뭔가 :

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

이 리틀 엔디안 (최초의 멀티 바이트 정수의 가장 낮은 바이트를 전송)을 포장 할 것이다, 또는 빅 엔디안. hexlify은 표시 용이므로 생성 된 순서대로 바이트의 16 진수 값을 볼 수 있습니다.

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' 
관련 문제