def get_f1002_received_data(self) -> (str, int): """ :return:f1002 respond packet """ try: # 写数据 result = self.ser.write(Converter.hex_array2bytes(self.f1002_packet)) print("写总字节数:", result) except Exception as e: print("---异常---:", e) trans_data = '' while True: num = 0 try: num = self.ser.inWaiting() except Exception as e: print(e) if num > 0: print(num) data = self.ser.read(num) for i in range(0, len(data)): tmp_data = '{:02X}'.format(data[i]) trans_data = trans_data + tmp_data if tmp_data == '16': leng = Converter.reversed_hex2int(trans_data[-34:-26]) return trans_data, leng
def construct_f1002(filename: str) -> str: """ :param filename: :return:hex f1002 packet of file """ return FPacket(Converter.str2reversed_space_hex(filename)).get_assemble_packet()
def file_receive(self) -> None: """ this is to send f1003 packet to get file data append packet file data to instance filed ata filed :return: """ offset_ = 0 print(self.file_size) left_data_size = self.file_size all_count = 0 while left_data_size > 0: if 0 < left_data_size <= 1000: epacket = SerialClient.construct_f1003(self.filename, offset_, left_data_size) left_data_size -= left_data_size else: epacket = SerialClient.construct_f1003(self.filename, offset_, 1000) offset_ += 1000 left_data_size -= 1000 try: # 写数据 result = self.ser.write(Converter.hex_array2bytes(epacket.get_assemble_packet())) print(epacket.get_assemble_packet()) print("写总字节数:", result) except Exception as e: print("---异常---:", e) trans_data = '' FLAG = True sleep_flag = True while FLAG: if sleep_flag: time.sleep(1) sleep_flag = False try: num = self.ser.inWaiting() except Exception as e: FLAG = False print(e) if num > 0: print('num', num) data = self.ser.read(num) for i in range(0, len(data)): tmp_data = '{:02X}'.format(data[i]) trans_data = trans_data + tmp_data if num == 0: all_count += len(trans_data[48:-4]) data_serial = re.findall('.{2}', trans_data[48:-4])[::-1] final_data = ''.join(data_serial) print(' '.join(data_serial)) f = open('append.txt', 'a+') f.write(final_data) f.close() FLAG = False # if num > 0: # this_count+=num # data = self.ser.read(num) # for i in range(0, len(data)): # tmp_data = '{:02X}'.format(data[i]) # trans_data = trans_data + tmp_data # if tmp_data == '16': # print(trans_data,this_count) # all_count += len(trans_data[48:-4]) # data_serial = re.findall('.{2}', trans_data[48:-4])[::-1] # final_data = ''.join(data_serial) # f = open('append.txt', 'a+') # f.write(final_data) # f.close() # FLAG = False print(all_count, left_data_size, 'result')
def construct_f1003(filename: str, offset: int, packet_size: int) -> EPacket: """ :return:EPacket """ return EPacket(Converter.str2reversed_space_hex(filename), offset, packet_size)
ser = None try: # 端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等 portx = "COM3" # 波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200 bps = 9600 # 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒) timex = 60 # 打开串口,并得到串口对象 ser = serial.Serial(portx, bps,timeout=timex) ser.parity = 'E' except Exception as e: print(e) try: # 写数据 result = ser.write(Converter.hex_array2bytes( '68 9e 00 9e 00 68 4b 02 37 02 00 06 0c 71 00 00 04 7d 13 00 68 73 2e 6b 63 65 68 63 2f 6c 61 63 6f 6c 2f 74 6e 6d 2f 00 00 00 00 e8 03 76 16')) print("写总字节数:", result) except Exception as e: print("---异常---:", e) trans_data = '' while True: num = 0 try: num = ser.inWaiting() except Exception as e: print(e) count = 0 if num > 0: print(num)
def connection_made(self, transport): self.transport = transport print('port opened', transport) transport.serial.rts = False transport.write(Converter.hex_array2bytes( '68 9e 00 9e 00 68 4b 02 37 02 00 06 0c 71 00 00 04 7d 13 00 68 73 2e 6b 63 65 68 63 2f 6c 61 63 6f 6c 2f 74 6e 6d 2f 00 00 00 00 e8 03 76 16'))
final_hex_str = hex_str.rjust(4, '0') fhs_array = re.findall('.{2}', final_hex_str) return ' '.join(fhs_array[::-1]) @staticmethod def get_crc32(s: str) -> str: """ :param s: :return:hex str of crc """ s_list = s.split(' ') hex_list = [int('0x' + x, 16) for x in s_list] return str(hex(sum(hex_list)))[-2:] @staticmethod def get_data_len_field(data: str) -> str: bytes_len = len(data.split(' ')) bin_shift_len = bin(bytes_len)[2:] + '10' hex_str = hex(int(bin_shift_len, 2))[2:] final_hex_str = hex_str.rjust(4, '0') fhs_array = re.findall('.{2}', final_hex_str) return ' '.join(fhs_array[::-1]) if __name__ == '__main__': # 实例化类 packet = FPacket( Converter.str2reversed_space_hex('/mnt/local/version.inf')) print(packet.get_assemble_packet())
:param val: :return:reversed hex str of offset """ hex_str = hex(val)[2:] final_hex_str = hex_str.rjust(8, '0') fhs_array = re.findall('.{2}', final_hex_str) return ' '.join(fhs_array[::-1]) @staticmethod def get_reversed_packet_len(val: int) -> str: """ :param val: :return: reversed hex str of packet len """ hex_str = hex(val)[2:] final_hex_str = hex_str.rjust(4, '0') fhs_array = re.findall('.{2}', final_hex_str) return ' '.join(fhs_array[::-1]) if __name__ == '__main__': # 实例化类 test = EPacket(Converter.str2reversed_space_hex('/mnt/local/sge800app'), 0, 1000) print(test.get_data_field()) print(test.get_assemble_packet()) # packet = EPacket(Converter.str2reversed_space_hex('/mnt/local/start.sh')) # print(packet.get_assemble_packet())
def file_name(file_dir): files = [] count = 1 child_path = [] for root, dirs, file_names in os.walk(file_dir): # print(root) # 当前目录路径 if count == 1: files.extend(file_names) child_path = dirs else: files.extend([(child_path[count - 2] + '/' + x) for x in file_names]) # files.extend([os.path.join(child_path[count - 2], x) for x in file_names]) count += 1 return files if __name__ == '__main__': # ans = file_name('C:\\Users\\23303\\Desktop\\电表项目\\集中器U盘安装包\\install\sge800app') # ans = file_name('C:\\Users\\23303\\Desktop\\电表项目\\5.项目文档\\集中器程序目标码') ans = file_name( 'C:\\Users\\23303\\Desktop\\集中器U盘安装包20190520\\集中器U盘安装包20190520\\install\\sge800app' ) print(ans) file_list = ['/mnt/local/' + x for x in ans] print(file_list) for x in file_list: path = Converter.str2reversed_space_hex(x) print(FPacket(path).get_assemble_packet(), ' path: ' + path, x)
trans_data = trans_data + tmp_data return trans_data if __name__ == '__main__': bind_ip = '192.168.100.102' bind_port = 7020 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((bind_ip, bind_port)) server.listen(10) # max backlog of connections newSocket, clientAddr = server.accept() print(newSocket) newSocket, clientAddr = server.accept() print('ok') print(unicode2hex_str(newSocket.recv(1024))) answer_data = '68 32 00 32 00 68 40 02 37 02 00 06 00 60 00 00 01 00 e2 16' newSocket.send(Converter.hex_array2bytes(answer_data)) # print(unicode2hex_str(newSocket.recv(1024))) f1002 = '68 8a 00 8a 00 68 4b 02 37 02 00 06 0c 71 00 00 02 7d 14 00 70 70 61 30 30 38 65 67 73 2f 6c 61 63 6f 6c 2f 74 6e 6d 2f 9b 16' newSocket.send(Converter.hex_array2bytes(f1002)) print(unicode2hex_str(newSocket.recv(2048))) while True: data = newSocket.recv(1024) sendData = '' newSocket.send(Converter.hex_array2bytes(sendData)) print(unicode2hex_str(data)) # print(recvData)