|
|
|
@ -1,4 +1,5 @@ |
|
|
|
|
# tcp 客户端 模拟 发送 信息帧 数据帧 图片帧 |
|
|
|
|
# tcp Handheld 客户端 模拟 ,模拟数据打包 |
|
|
|
|
# 直接平一个小包测试数据 直接写tou |
|
|
|
|
|
|
|
|
|
import socket |
|
|
|
|
import time |
|
|
|
@ -7,15 +8,20 @@ import time |
|
|
|
|
IP = "127.0.0.1" |
|
|
|
|
PORT = 7887 |
|
|
|
|
ADDRESS = ( IP, PORT ) # 绑定地址 |
|
|
|
|
INFO_HEADER = "111355AA020000250000004F000107" |
|
|
|
|
DATA_HEADER = "11 13 55 AA 02 00 10 25 00 00 00 DA 06 02 07" |
|
|
|
|
END_FRAME = "11 13 55 AA 02 00 FF 25 00 00 00 00 00 00 00" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 改数据 |
|
|
|
|
class DataContent: |
|
|
|
|
# 11 13 55 AA 02 00 00 11 00 00 00 4F 00 01 07 |
|
|
|
|
info_frame = "11 13 55 AA 02 00 00 11 00 00 00 4F 00 01 07 1703140E313518565D1E51D55605CCE812068CDDC347D0239515000000000000000000000064000000000000000000000000000000000000000000F450F450F4500600000300000000000000000000" |
|
|
|
|
# 11 13 55 AA 0200 00 11 00 00 00 4F00 01 07 |
|
|
|
|
# id type-num 序号 17 字节数 包号 总 |
|
|
|
|
info_frame = "1703140E313518565D1E51D55605CCE812068CDDC347D0239515000000000000000000000064000000000000000000000000000000000000000000F450F450F4500600000300000000000000000000" |
|
|
|
|
|
|
|
|
|
sensor_frame =[ |
|
|
|
|
# 11 13 55 AA 02 00 10 11 00 00 00 DA 06 02 07 |
|
|
|
|
' 11 13 55 AA 02 00 10 11 00 00 00 DA 06 02 07 131123600020000000524844557691E700CB054C054A05A10001\ |
|
|
|
|
'131123600020000000524844557691E700CB054C054A05A10001\ |
|
|
|
|
23A000300700000A07FD062A073707440750074D074C07530759075A07610765076A07720790079107A407C3070709BE0AAC0ABF080F080808270849089E0880094F0BB70F2A1901\ |
|
|
|
|
23A000300600005223CD28242B3830E235813BE9401B46675A3181C68D5C7916715D74C676617658742E71B26C9C674363DA5F1C5E0160F164DF66A262F85AD153764E4F4C014D01\ |
|
|
|
|
23A00030050000EA4D8C4D314DF44D3C4FC250E453BA5E4486B8C5BCECC4D29A96436BFA56734E4B4A55473446364A845140582A5A9C55A54D91465440303C1B3FDE5783718E7001\ |
|
|
|
@ -42,7 +48,95 @@ class DataContent: |
|
|
|
|
23A00030000000F3060F07250722072E07200703070B07EC06FF0619073E07590734071807190719070A07E106DD06F006EC061B072F073E073E07220725070B07F806C806DE0601', |
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
end_frame = "11 13 55 AA 02 00 FF 11 00 00 00 00 00 00 00" #0xFF |
|
|
|
|
end_frame = "11 13 55 AA 02 00 FF 25 00 00 00 00 00 00 00" #0xFF |
|
|
|
|
class MyBuf: |
|
|
|
|
'''一次测量三个传感器数据打一个包''' |
|
|
|
|
def __init__(self,) -> None: |
|
|
|
|
self.__buf = b'' |
|
|
|
|
self.__head = {} |
|
|
|
|
self.__begin_sign = b'\x23' |
|
|
|
|
self.__end_sign = b'\x0D' |
|
|
|
|
self.send_head = b'\x11\x13\x55\xAA' |
|
|
|
|
self.send_id = 2 # 2byte 地位在前 |
|
|
|
|
self.send_type = 0 # info 0 data 1 pic 2 |
|
|
|
|
self.send_num = 0 # 一次测量最多十六次平均 |
|
|
|
|
self.send_con = 0 # 总的测量序号 4byte ,16次平均算几次?每次算一个 |
|
|
|
|
self.send_size = 0 #字节数 2byte |
|
|
|
|
self.send_packet_con = 0 |
|
|
|
|
self.send_packet_all = 0 |
|
|
|
|
|
|
|
|
|
self.repeat = 0 # 依据这个拆包 |
|
|
|
|
self.groups = 0 |
|
|
|
|
|
|
|
|
|
self.state = 0 |
|
|
|
|
|
|
|
|
|
def readFile2Buf(self, fpath) -> None: |
|
|
|
|
with open(fpath,"rb") as f: |
|
|
|
|
self.__buf = f.read() |
|
|
|
|
pass |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def read_buf(self, size: int) -> bytes: |
|
|
|
|
if size > self.__buf.__len__(): |
|
|
|
|
return b'' |
|
|
|
|
ret = self.__buf[0:size] |
|
|
|
|
self.__buf = self.__buf[size:] |
|
|
|
|
return ret |
|
|
|
|
|
|
|
|
|
def write_buf(self, buf: bytes) -> None: |
|
|
|
|
len = buf.__len__() |
|
|
|
|
# logging.info(f'Received ID:{id} Size:{len}') |
|
|
|
|
self.__buf = self.__buf+buf |
|
|
|
|
|
|
|
|
|
def get_buf_size(self) -> int: |
|
|
|
|
return self.__buf.__len__() |
|
|
|
|
|
|
|
|
|
def back_bytes(self, buf: bytes) -> None: |
|
|
|
|
self.__buf = buf+self.__buf |
|
|
|
|
|
|
|
|
|
def reset_head(self) -> None: |
|
|
|
|
self.__head = {} |
|
|
|
|
|
|
|
|
|
def reset_buf(self) -> None: |
|
|
|
|
self.__buf = b'' |
|
|
|
|
|
|
|
|
|
def pack_info_send(self,): |
|
|
|
|
length = 26 |
|
|
|
|
ret = self.read_buf(length) |
|
|
|
|
id = self.send_id.to_bytes(2, byteorder='little') |
|
|
|
|
self.send_type = 0 |
|
|
|
|
type_num = (self.send_type *16 + self.send_num).to_bytes(1,byteorder='little' ) # ?? |
|
|
|
|
con = self.send_con.to_bytes(4, byteorder='little') |
|
|
|
|
size = length.to_bytes(2, byteorder='little') |
|
|
|
|
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' ) |
|
|
|
|
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' ) |
|
|
|
|
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret |
|
|
|
|
self.send_packet_con += 1 |
|
|
|
|
|
|
|
|
|
# 取重复次数和测量间隔 |
|
|
|
|
return ret |
|
|
|
|
|
|
|
|
|
def pack_handheld_send(self,): |
|
|
|
|
length = 26+576+576+576 |
|
|
|
|
ret = self.read_buf(length) |
|
|
|
|
id = self.send_id.to_bytes(2, byteorder='little') |
|
|
|
|
self.send_type = 1 |
|
|
|
|
type_num = self.send_type << 4 + self.send_num # ?? |
|
|
|
|
con = self.send_con.to_bytes(4, byteorder='little') |
|
|
|
|
size = length.to_bytes(2, byteorder='little') |
|
|
|
|
packet_con = self.send_packet_con.to_bytes(1,byteorder='little' ) |
|
|
|
|
packet_all = self.send_packet_all.to_bytes(1,byteorder='little' ) |
|
|
|
|
ret = self.send_head + id + type_num + con + size + packet_con + packet_all +ret |
|
|
|
|
self.send_con+=1 # 总测量序号+1 |
|
|
|
|
self.send_num += 1 # 是平均中的第几次 |
|
|
|
|
self.send_packet_con += 1 |
|
|
|
|
return ret |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def pack_end_send(self,): |
|
|
|
|
ret = b'\x11\x13\x55\xAA\x02\x00\xFF\x11\x00\x00\x00\x00\x00\x00\x00' |
|
|
|
|
return ret |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
class TcpHandheld(object): |
|
|
|
|
def __init__(self ): |
|
|
|
@ -89,7 +183,7 @@ class TcpHandheld(object): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def send_info(self,): |
|
|
|
|
buf = bytes.fromhex (DataContent.info_frame) |
|
|
|
|
buf = bytes.fromhex (INFO_HEADER+ DataContent.info_frame) |
|
|
|
|
self.flag = False |
|
|
|
|
self.head = buf[:15] |
|
|
|
|
print(f"head ....{self.head.hex()}") |
|
|
|
@ -98,13 +192,18 @@ class TcpHandheld(object): |
|
|
|
|
|
|
|
|
|
def send_data(self,): |
|
|
|
|
buf = b'' |
|
|
|
|
for i in range( len( DataContent.sensor_frame) ): |
|
|
|
|
print( "sensorframe..." ) |
|
|
|
|
buf = bytes.fromhex ( DataContent.sensor_frame[i] ) |
|
|
|
|
self.flag = False |
|
|
|
|
self.head = buf[:15] |
|
|
|
|
print(f"head ....{self.head.hex()} ") |
|
|
|
|
self.send_rcv(buf) |
|
|
|
|
buf = bytes.fromhex (DATA_HEADER+ DataContent.sensor_frame[0]) |
|
|
|
|
self.flag = False |
|
|
|
|
self.head = buf[:15] |
|
|
|
|
print(f"head ....{self.head.hex()}") |
|
|
|
|
self.send_rcv(buf) |
|
|
|
|
# for i in range( len( DataContent.sensor_frame) ): |
|
|
|
|
# print( "sensorframe..." ) |
|
|
|
|
# buf = bytes.fromhex ( DataContent.sensor_frame[i] ) |
|
|
|
|
# self.flag = False |
|
|
|
|
# self.head = buf[:15] |
|
|
|
|
# print(f"head ....{self.head.hex()} ") |
|
|
|
|
# self.send_rcv(buf) |
|
|
|
|
|
|
|
|
|
def send_end_frame(self,): |
|
|
|
|
buf = bytes.fromhex (DataContent.end_frame) |
|
|
|
@ -124,7 +223,9 @@ if __name__ == '__main__': |
|
|
|
|
|
|
|
|
|
th.send_data() |
|
|
|
|
|
|
|
|
|
time.sleep( 2) |
|
|
|
|
th.send_end_frame() |
|
|
|
|
|
|
|
|
|
time.sleep( 10) |
|
|
|
|
except KeyboardInterrupt as e: |
|
|
|
|
print(e) |
|
|
|
|
|
|
|
|
|