Browse Source

修复一些底层传输相关BUG

master
zhaohe 4 months ago
parent
commit
54b1203b3a
  1. 2
      deply.bat
  2. 18
      src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java
  3. 4
      src/main/java/a8k/app/hardware/channel/A8kCanBusService.java
  4. 27
      src/main/java/a8k/app/hardware/type/A8kPacket.java
  5. 9
      src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java

2
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/ @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 命令是否成功 :: 判断 SCP 命令是否成功
if %errorlevel% neq 0 ( if %errorlevel% neq 0 (

18
src/main/java/a8k/app/hardware/channel/A8kCanBusConnection.java

@ -64,12 +64,14 @@ public class A8kCanBusConnection extends WebSocketClient {
synchronized void pushReceipt(A8kPacket receipt) { synchronized void pushReceipt(A8kPacket receipt) {
if (this.cmdPacket != null if (this.cmdPacket != null
&& this.cmdPacket.getPacketIndex() == receipt.getPacketIndex() && 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; throw e;
} catch (Exception e) { } catch (Exception e) {
log.error("priSend error", 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()))); 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 { private A8kPacket _priSend(A8kPacket pack, int overtime) throws AppException {
// alloc new packetIndex // alloc new packetIndex
packetIndex = packetIndex + 1; packetIndex = packetIndex + 1;
if (packetIndex > 100) {
if (packetIndex > 30000) {
packetIndex = 1; packetIndex = 1;
} }
@ -233,7 +234,7 @@ public class A8kCanBusConnection extends WebSocketClient {
// TX packet // TX packet
String txpacket = pack.toByteString(); String txpacket = pack.toByteString();
log.debug("Tx:|RAW:{}| {}", txpacket, pack);
log.debug("TX-RAW: {} | {}", txpacket, pack);
send(txpacket); send(txpacket);
@ -252,7 +253,6 @@ public class A8kCanBusConnection extends WebSocketClient {
) )
); );
} }
OS.forceSleep(10);
return receipt; return receipt;
} }

4
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 { 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 { 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); return packet.getContentI32(0);
} }

27
src/main/java/a8k/app/hardware/type/A8kPacket.java

@ -15,7 +15,7 @@ public class A8kPacket {
// uint8_t packetType; // uint8_t packetType;
// uint16_t cmdid; // uint16_t cmdid;
// uint8_t moduleId; // uint8_t moduleId;
// uint8_t index;
// uint16_t index;
// uint8_t datalen; // uint8_t datalen;
// uint8_t data[]; // uint8_t data[];
// /* int8_t checksum;*/ // /* int8_t checksum;*/
@ -30,14 +30,21 @@ public class A8kPacket {
//} zcan_cmd_packet_type_t; //} 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 PACKET_TYPE_OFFSET = 0;
public static final int CMDID_OFFSET = 1; public static final int CMDID_OFFSET = 1;
public static final int MODULE_ID_OFFSET = 3; public static final int MODULE_ID_OFFSET = 3;
public static final int INDEX_OFFSET = 4; 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; public static final int CMD_OVERTIME = 1500;
@ -57,14 +64,14 @@ public class A8kPacket {
} }
public void setPacketIndex(int packetIndex) { public void setPacketIndex(int packetIndex) {
ByteArray.setU8(raw, INDEX_OFFSET, packetIndex);
ByteArray.setU16bit(raw, INDEX_OFFSET, packetIndex);
int checkcode = computeCheckcode(); int checkcode = computeCheckcode();
ByteArray.setU8(raw, raw.length - 1, checkcode); ByteArray.setU8(raw, raw.length - 1, checkcode);
} }
public int getPacketIndex() { public int getPacketIndex() {
return ByteArray.readU8bit(raw, INDEX_OFFSET);
return ByteArray.readU16bit(raw, INDEX_OFFSET);
} }
public int getCmdId() { public int getCmdId() {
@ -197,7 +204,8 @@ public class A8kPacket {
buffer.put((byte) (packetType & 0xff)); // packetType buffer.put((byte) (packetType & 0xff)); // packetType
buffer.putShort((short) (cmdId & 0xffff)); // cmdid buffer.putShort((short) (cmdId & 0xffff)); // cmdid
buffer.put((byte) (moduleId & 0xFF)); // moduleId 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 buffer.put((byte) (params.length * 4)); // datalen
for (int value : params) { for (int value : params) {
buffer.putInt(value); buffer.putInt(value);
@ -211,4 +219,9 @@ public class A8kPacket {
return new A8kPacket(buffer.array()); 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());
}
} }

9
src/main/java/a8k/app/service/appsetup/A8kSubModuleRegInitService.java

@ -53,6 +53,15 @@ public class A8kSubModuleRegInitService {
} }
private void initModuleRegVal() { 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) { while (true) {
try { try {
log.info("forceInitA8kModParams"); log.info("forceInitA8kModParams");

Loading…
Cancel
Save