From 7b93ce7d3c07dc8d60dacbd4ab76651882f4d92b Mon Sep 17 00:00:00 2001 From: tao_z <tzj0429@163.com> Date: Mon, 16 May 2022 20:15:19 +0800 Subject: [PATCH] 使用PIPE前存储 --- widgets/ShifterTool.py | 63 +++++++++++++++++++++++++------ test.py | 7 ++- USBCAN.py | 16 ++++---- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/USBCAN.py b/USBCAN.py index 680ce3e..70248b3 100644 --- a/USBCAN.py +++ b/USBCAN.py @@ -369,13 +369,13 @@ # extern_flag = 1 if msg.is_extended_id else 0 # extern_flag = 0 raw_message = VCI_CAN_OBJ() - raw_message.ID = msg.arbitration_id - raw_message.TimeStamp = 0 - raw_message.TimeFlag = 0 - raw_message.SendType = 1 - raw_message.RemoteFlag = msg.is_remote_frame - raw_message.ExternFlag = msg.is_extended_id - raw_message.DataLen = msg.dlc + raw_message.ID = (c_uint)(msg.arbitration_id) + raw_message.TimeStamp = (c_uint)(0) + raw_message.TimeFlag = (c_ubyte)(0) + raw_message.SendType = (c_ubyte)(1) + raw_message.RemoteFlag = (c_ubyte)(msg.is_remote_frame) + raw_message.ExternFlag = (c_ubyte)(msg.is_extended_id) + raw_message.DataLen = (c_ubyte)(msg.dlc) raw_message.Data = (c_ubyte * 8)(* [c_ubyte(c) for c in msg.data]) # (msg.arbitration_id, 0, 0, 1, msg.is_remote_frame, @@ -427,7 +427,7 @@ for i in range(msgToSendCnt): msg = sendQueue.get() self.send(msg, 1) - time.sleep(0.001) + time.sleep(0.001) loopCnt += 1 if loopCnt >= 15: loopCnt = 0 diff --git a/test.py b/test.py index c375b96..a61aad1 100644 --- a/test.py +++ b/test.py @@ -49,7 +49,7 @@ is_remote_frame=0, channel=0, dlc=8, - data=bytearray(0x02, 0x3e, 0, 0, 0, 0, 0, 0), + data=bytearray([0x02, 0x3e, 0, 0, 0, 0, 0, 0]) ) @@ -110,7 +110,7 @@ def tx_task(bus: USBCAN): while True: - bus.Transmit(device_type, device_index, can_channel, msg=msg, len=1) + bus.send(msg=msg) time.sleep(0.1) @@ -121,7 +121,8 @@ if not num == 0: for i in range(num): if msg[i].arbitration_id == 0x77a: - print(msg[i].arbitration_id) + # print(formatedata(i, msg[i], True)) + print(msg[i].data) if __name__ == '__main__': diff --git a/widgets/ShifterTool.py b/widgets/ShifterTool.py index cbf5baa..525dd9f 100644 --- a/widgets/ShifterTool.py +++ b/widgets/ShifterTool.py @@ -1,4 +1,5 @@ +from ast import Pass import threading from can import BusABC, Message from udsoncan.client import Client @@ -42,6 +43,9 @@ class UISignals(QtCore.QObject): sig_Disp_str = QtCore.Signal(str) sig_MsgReceived = QtCore.Signal(int) + + +g_signal = UISignals() class HardwreDevice(): @@ -196,7 +200,7 @@ # self.IsoTPtoUDSQueue.qsize())) # time.sleep(self.isotp_layer.sleep_time()) - time.sleep(0.0001) + time.sleep(0.001) except Exception as e: self.exit_requested = True @@ -212,7 +216,6 @@ # self.protocol("WM_DELETE_WINDOW", self.Form_OnClosing) self.msgQueue = Queue() # can layer receive queue self.sendQueue = Queue() # can layer send queue - self.signal = UISignals() self.shifter = ShifterClass() self.devicedescription = HardwreDevice() @@ -221,7 +224,8 @@ self.UI.setupUi(window) self._dev_info = None self.can_thread = threading.Thread(target=self.can_thread) - + self.TestPresentTimer = QtCore.QTimer() + self.TestPresentTimer.timeout.connect(self.creat_testpresentReq) self.DeviceInit() self.WidgetsInit() self.ChnInfoUpdate(self._isOpen) @@ -361,7 +365,8 @@ msg = Message() msg.arbitration_id = isotp_msg.arbitration_id msg.dlc = isotp_msg.dlc - msg.data = isotp_msg.data + msg.channel = 0 + msg.data = isotp_msg.data # bytearray msg.is_extended_id = False # for i in range(isotp_msg.dlc): # msg.data[i] = isotp_msg.data[i] @@ -383,15 +388,21 @@ self.UI.comboBox_3.activated.connect(self.update_HardwareDevice) self.UI.comboBox_5.activated.connect(self.update_HardwareDevice) - self.signal.sig_Disp_str.connect(self.disp_string) - self.signal.sig_MsgReceived.connect(self._updateRootList) + g_signal.sig_Disp_str.connect(self.disp_string) + g_signal.sig_MsgReceived.connect(self._updateRootList) self.initUDSUI() def initUDSUI(self): - self.UI.comboBox.addItems(['0x01默认模式', '0x02编程模式', '0x03编程模式']) + self.UI.comboBox.addItems(['0x01默认模式', '0x02编程模式', '0x03扩展模式']) + self.UI.comboBox.activated.connect(self.sessioncontrol_req) + self.UI.comboBox_8.addItems(['0x01硬件复位', '0x03软件复位']) + self.UI.comboBox_8.activated.connect(self.MCUReset_req) + self.UI.comboBox_9.addItems(['0x00使能收发', '0x01能收禁发', '0x03禁止收发']) + self.UI.comboBox_9.activated.connect(self.communicationControl_req) + self.UI.radioButton.toggled.connect(self.TestPresentEvent) def _formatMsgData(self, index, item, received): @@ -452,17 +463,17 @@ msg[i]) # send msg to isotp self.msgQueue.put(msg[i]) # send signal to update screen - logger.info('Rx: ID=0x{:0<3x} '.format(msg[i].arbitration_id) + ' '.join(['0x' + - '{:0<2x}'.format(a).upper() for a in list(msg[i].data)])) - self.signal.sig_MsgReceived.emit(num) + # logger.info('Rx: ID=0x{:0<3x} '.format(msg[i].arbitration_id) + ' '.join(['0x' + + # '{:0<2x}'.format(a).upper() for a in list(msg[i].data)])) + g_signal.sig_MsgReceived.emit(num) msgToSendCnt = self.sendQueue.qsize() if msgToSendCnt > 0: msg = Message() for i in range(msgToSendCnt): msg = self.sendQueue.get() - logger.info('Tx: ID=0x{:0<3x} '.format( - msg.arbitration_id)+'DLC={} '.format(msg.dlc)+'externd flag ={} '.format(msg.is_extended_id)+'remote frame:{} '.format(msg.is_remote_frame)) + # logger.info('Tx: ID=0x{:0<3x} '.format( + # msg.arbitration_id)+'DLC={} '.format(msg.dlc)+'externd flag ={} '.format(msg.is_extended_id)+'remote frame:{} '.format(msg.is_remote_frame)) self._usbcan.send(msg) def open_close(self): @@ -554,4 +565,32 @@ pass def TestPresentEvent(self): + if self.UI.radioButton.isChecked(): + self.TestPresentTimer.start(4000) + else: + self.TestPresentTimer.stop() + + def creat_testpresentReq(self): self.udsclient.tester_present() + + def sessioncontrol_req(self): + sesson = self.UI.comboBox.currentIndex() + 1 + self.udsclient.change_session(sesson) + + # self.UI.comboBox_8.addItems(['0x01硬件复位', '0x03软件复位']) + def MCUReset_req(self): + req = 0x03 if self.UI.comboBox_8.currentData() == '0x01硬件复位' else 0x01 + self.udsclient.ecu_reset(req) + + # self.UI.comboBox_9.addItems(['0x00使能收发', '0x01能收禁发', '0x03禁止收发']) + def communicationControl_req(self): + req = 0x00 + select = self.UI.comboBox_9.currentData() + if select == '0x00使能收发': + req = 0 + elif select == '0x01能收禁发': + req = 1 + else: + req = 3 + self.udsclient.communication_control( + control_type=0, communication_type=req) -- Gitblit v1.8.0