From 54b1203b3a6c6bdb6c4a65f725e497c24bec6eb7 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 21 Apr 2025 21:31:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B=E5=BA=95?= =?UTF-8?q?=E5=B1=82=E4=BC=A0=E8=BE=93=E7=9B=B8=E5=85=B3BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deply.bat | 2 +- .../app/hardware/channel/A8kCanBusConnection.java | 18 +++++++-------- .../a8k/app/hardware/channel/A8kCanBusService.java | 4 ++-- src/main/java/a8k/app/hardware/type/A8kPacket.java | 27 ++++++++++++++++------ .../appsetup/A8kSubModuleRegInitService.java | 9 ++++++++ 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/deply.bat b/deply.bat index 936c162..e175f28 100644 --- a/deply.bat +++ b/deply.bat @@ -17,7 +17,7 @@ scp %JAR_FILE% %REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%%REMOTE_FILE% @REM scp -r appresource %REMOTE_USER%@%REMOTE_HOST%:/app/ :: 重启远程服务器 -ssh %REMOTE_USER%@%REMOTE_HOST% `systemctl start zapp` +@REM ssh %REMOTE_USER%@%REMOTE_HOST% `systemctl start zapp` :: 判断 SCP 命令是否成功 if %errorlevel% neq 0 ( diff --git a/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java b/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java index 2156bb7..f05379b 100644 --- a/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java +++ b/src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java @@ -64,12 +64,14 @@ public class A8kCanBusConnection extends WebSocketClient { synchronized void pushReceipt(A8kPacket receipt) { if (this.cmdPacket != null && this.cmdPacket.getPacketIndex() == receipt.getPacketIndex() - && this.cmdPacket.getModuleId() == receipt.getModuleId() - && this.cmdPacket.getCmdId() == receipt.getCmdId() ) { - // log.debug("pushReceipt:| {}", receipt); - receiptQueue.add(receipt); - this.cmdPacket = null; + if (this.cmdPacket.getModuleId() == receipt.getModuleId() + && this.cmdPacket.getCmdId() == receipt.getCmdId()) { + receiptQueue.add(receipt); + this.cmdPacket = null; + } else { + log.warn("RX index equal, but cmdId not equal, {} {}", this.cmdPacket, receipt); + } } } @@ -209,7 +211,6 @@ public class A8kCanBusConnection extends WebSocketClient { throw e; } catch (Exception e) { log.error("priSend error", e); - OS.hsleep(2000); throw AppException.of(new AEHardwareError(A8kEcode.LOW_ERROR_OVERTIME, MId.valueOf(pack.getModuleId()), CmdId.valueOf(pack.getCmdId()))); } } @@ -222,7 +223,7 @@ public class A8kCanBusConnection extends WebSocketClient { private A8kPacket _priSend(A8kPacket pack, int overtime) throws AppException { // alloc new packetIndex packetIndex = packetIndex + 1; - if (packetIndex > 100) { + if (packetIndex > 30000) { packetIndex = 1; } @@ -233,7 +234,7 @@ public class A8kCanBusConnection extends WebSocketClient { // TX packet String txpacket = pack.toByteString(); - log.debug("Tx:|RAW:{}| {}", txpacket, pack); + log.debug("TX-RAW: {} | {}", txpacket, pack); send(txpacket); @@ -252,7 +253,6 @@ public class A8kCanBusConnection extends WebSocketClient { ) ); } - OS.forceSleep(10); return receipt; } diff --git a/src/main/java/a8k/app/hardware/channel/A8kCanBusService.java b/src/main/java/a8k/app/hardware/channel/A8kCanBusService.java index 40e631a..56eaf58 100644 --- a/src/main/java/a8k/app/hardware/channel/A8kCanBusService.java +++ b/src/main/java/a8k/app/hardware/channel/A8kCanBusService.java @@ -66,11 +66,11 @@ public class A8kCanBusService { } public void moduleSetReg(MId id, RegIndex regindex, Integer reg) throws AppException { - connection.callcmd(id, CmdId.module_set_reg, regindex.index, reg); + connection.callcmd2(id, CmdId.module_set_reg, 100,regindex.index, reg); } public Integer moduleGetReg(MId id, RegIndex regindex) throws AppException { - var packet = connection.callcmd(id, CmdId.module_get_reg, regindex.index); + var packet = connection.callcmd2(id, CmdId.module_get_reg, 50, regindex.index); return packet.getContentI32(0); } diff --git a/src/main/java/a8k/app/hardware/type/A8kPacket.java b/src/main/java/a8k/app/hardware/type/A8kPacket.java index 7a102fb..42bea3c 100644 --- a/src/main/java/a8k/app/hardware/type/A8kPacket.java +++ b/src/main/java/a8k/app/hardware/type/A8kPacket.java @@ -15,7 +15,7 @@ public class A8kPacket { // uint8_t packetType; // uint16_t cmdid; // uint8_t moduleId; - // uint8_t index; + // uint16_t index; // uint8_t datalen; // uint8_t data[]; // /* int8_t checksum;*/ @@ -30,14 +30,21 @@ public class A8kPacket { //} zcan_cmd_packet_type_t; // + /** + * + * @WARNING + * 1. 修改这里时,需要注意连同createPacket一起修改 + * 2. PACKET_MIN_LEN 比Header多一个字节,是因为还有一个字节的校验位 + */ + public static final int PACKET_TYPE_OFFSET = 0; public static final int CMDID_OFFSET = 1; public static final int MODULE_ID_OFFSET = 3; public static final int INDEX_OFFSET = 4; - public static final int DATA_LEN_OFFSET = 5; - public static final int DATA_OFFSET = 6; + public static final int DATA_LEN_OFFSET = 6; + public static final int DATA_OFFSET = 7; - public static final int PACKET_MIN_LEN = 7; + public static final int PACKET_MIN_LEN = 8;// public static final int CMD_OVERTIME = 1500; @@ -57,14 +64,14 @@ public class A8kPacket { } public void setPacketIndex(int packetIndex) { - ByteArray.setU8(raw, INDEX_OFFSET, packetIndex); + ByteArray.setU16bit(raw, INDEX_OFFSET, packetIndex); int checkcode = computeCheckcode(); ByteArray.setU8(raw, raw.length - 1, checkcode); } public int getPacketIndex() { - return ByteArray.readU8bit(raw, INDEX_OFFSET); + return ByteArray.readU16bit(raw, INDEX_OFFSET); } public int getCmdId() { @@ -197,7 +204,8 @@ public class A8kPacket { buffer.put((byte) (packetType & 0xff)); // packetType buffer.putShort((short) (cmdId & 0xffff)); // cmdid buffer.put((byte) (moduleId & 0xFF)); // moduleId - buffer.put((byte) 0); // index + buffer.put((byte) 0x4C); // index + buffer.put((byte) 0x00); // index buffer.put((byte) (params.length * 4)); // datalen for (int value : params) { buffer.putInt(value); @@ -211,4 +219,9 @@ public class A8kPacket { return new A8kPacket(buffer.array()); } + public static void main(String[] args) { + var packet = createPacket(41, A8kPacket.PACKET_TYPE_CMD, CmdId.module_stop.index, new Integer[]{}); + logger.info("{}", packet.toByteString()); + } + } diff --git a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java index 29c69a1..9b728aa 100644 --- a/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java +++ b/src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java @@ -53,6 +53,15 @@ public class A8kSubModuleRegInitService { } private void initModuleRegVal() { +// while(true){ +// try { +// canBus.moduleSetReg(MId.FeedingModInfeedM,RegIndex.kreg_step_motor_max_d,0); +// canBus.moduleSetReg(MId.FeedingModOutfeedM,RegIndex.kreg_step_motor_max_d,0); +// } catch (AppException e) { +// throw new RuntimeException(e); +// } +// } +// while (true) { try { log.info("forceInitA8kModParams");