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/
:: 重启远程服务器
ssh %REMOTE_USER%@%REMOTE_HOST% `systemctl start zapp`
@REM ssh %REMOTE_USER%@%REMOTE_HOST% `systemctl start zapp`
:: 判断 SCP 命令是否成功
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) {
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;
}

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 {
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);
}

27
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());
}
}

9
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");

Loading…
Cancel
Save