1
zhang
2 天以前 c42a7c76e24940db9e81307dc67104d9068c3119
zy-acs-charge/src/main/java/com/zy/acs/charge/impl/AiPowerChargeServiceImpl.java
@@ -1,17 +1,15 @@
package com.zy.acs.charge.impl;
import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
import com.github.xingshuangs.iot.protocol.modbus.service.ModbusRtuOverTcp;
import com.zy.acs.charge.ChargeCoreService;
import com.zy.acs.charge.constant.AiPowerChargerCoilEnum;
import com.zy.acs.charge.constant.AiPowerChargerRegisterEnum;
import com.zy.acs.charge.model.ChargerStatus;
import com.zy.acs.common.utils.ByteUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
/**
@@ -23,29 +21,45 @@
public class AiPowerChargeServiceImpl implements ChargeCoreService {
      
    @Override
    public boolean startCharging(ModbusTcp modbusTcp) {
    public boolean startCharging(ModbusRtuOverTcp client) {
        // AGV车报告到位 -> true
        modbusTcp.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
        client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), true);
        return true;
    }
    @Override
    public boolean stopCharging(ModbusTcp modbusTcp)  {
        modbusTcp.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
    public boolean stopCharging(ModbusRtuOverTcp client) {
        client.writeCoil(AiPowerChargerCoilEnum.AGV_REPORTED_IN_POSITION.getAddr(), false);
        return true;
    }
    @Override
    public ChargerStatus getStatus(ModbusTcp modbusTcp)  {
    public boolean checkForwardRelayOnline(ModbusRtuOverTcp client) {
        return client.readBoolean(AiPowerChargerCoilEnum.FORWARD_RELAY_ONLINE.getAddr(), 1);
    }
    @Override
    public boolean checkBackwardRelayOffline(ModbusRtuOverTcp client) {
        return client.readBoolean(AiPowerChargerCoilEnum.BACKWARD_RELAY_OFFLINE.getAddr(), 1);
    }
    @Override
    public double getVoltage(ModbusRtuOverTcp client) {
        return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
    }
    @Override
    public double getCurrent(ModbusRtuOverTcp client) {
        return client.readInt16(AiPowerChargerRegisterEnum.CHARGE_CURRENT.getAddr(), 1) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw();
    }
    @Override
    public ChargerStatus getStatus(ModbusRtuOverTcp client) {
        ChargerStatus status = new ChargerStatus();
        // ---------- 批量读取线圈(地址100~115共16个) ----------
        List<Boolean> coils = modbusTcp.readCoil(100, 16);
        List<Boolean> coils = client.readCoil(100, 16);
        status.setWorking(coils.get(0));                      // 地址100
        status.setOverheat(coils.get(0));                     // 101
        status.setFault(coils.get(0));                        // 102
@@ -64,7 +78,7 @@
        status.setCommBmsSuccess(!coils.get(15));              // 115
        // ---------- 批量读取保持寄存器(地址100~116共17个) ----------
        byte[] bytes = modbusTcp.readHoldRegister(100, 16);
        byte[] bytes = client.readHoldRegister(100, 16);
        status.setVoltage(ByteUtils.getInt(bytes,0) * AiPowerChargerRegisterEnum.CHARGE_VOLTAGE.getRaw());
        status.setCurrent(ByteUtils.getInt(bytes,0) * AiPowerChargerRegisterEnum.CHARGE_CURRENT.getRaw());
        status.setChargingTime(ByteUtils.getInt(bytes,0));
@@ -89,22 +103,22 @@
    // 清除故障
    @Override
    public boolean clearFault(ModbusTcp modbusTcp)  {
        modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1);
    public boolean clearFault(ModbusRtuOverTcp client) {
        client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 1);
        return true;
    }
    // 完成退回命令
    @Override
    public boolean finishRetract(ModbusTcp modbusTcp)  {
        modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2);
    public boolean finishRetract(ModbusRtuOverTcp client) {
        client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 2);
        return true;
    }
    // 恢复待机状态
    @Override
    public boolean restoreStandby(ModbusTcp modbusTcp)  {
        modbusTcp.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3);
    public boolean restoreStandby(ModbusRtuOverTcp client) {
        client.writeInt16(AiPowerChargerRegisterEnum.SCHEDULE_FLAG.getAddr(), (short) 3);
        return true;
    }
}