Message0203.java 5.79 KB
package com.bsth.socket.protocol;

import com.bsth.constant.Constant;
import com.bsth.util.ConvertUtil;

import java.util.Arrays;

/**
 * @author Hill
 * 燃料电池数据
 */
public class Message0203 implements IMessageBody02 {

	/**
	 * 信息类型
	 * 默认应该为0x03
	 */
	private byte infoType;

	/**
	 * 电池电压 0-20000
	 * 分辨率0.1v
	 * 0xff 0xfe 异常
	 * 0xff 0xff 无效
	 */
	private short voltage;

	/**
	 * 电池电流 0-20000
	 * 分辨率0.1v
	 * 0xff 0xfe 异常
	 * 0xff 0xff 无效
	 */
	private short current;

	/**
	 * 燃料消耗率 0-60000
	 * 分辨率0.01kg/100km
	 * 0xff 0xfe 异常
	 * 0xff 0xff 无效
	 */
	private short fuelConsumeRate;

	/**
	 * 电池温度探针数量 0-65531
	 * n
	 * 0xff 0xfe 异常
	 * 0xff 0xff 无效
	 */
	private short tempProbeQuantity;

	/**
	 * 累计里程 0-240
	 * 分辨率1℃ 偏移量-40 n*1
	 * 0xff 0xff 0xff 0xfe 异常
	 * 0xff 0xff 0xff 0xff 无效
	 */
	private byte[] temps;

	/**
	 * 氢系统中最高温度值 0-2400
	 * 分辨率0.1℃ 偏移量-400
	 * 0xff 0xfe 异常
	 * 0xff 0xff 无效
	 */
	private short hydrogenMaxTemp;

	/**
	 * 氢系统最高温度探针代号 1-252
	 * 0xfe 异常
	 * 0xff 无效
	 */
	private byte maxTempSensorCode;

	/**
	 * 氢气最大浓度 0-60000
	 * 分辨率1mg/kg
	 * 0xFF 0xFE 异常
	 * 0xFF 0xFF 无效
	 */
	private short hydrogenMaxConcentration;

	/**
	 * 氢气最大浓度传感器代号 1-252
	 * 0xfe 异常
	 * 0xff 无效
	 */
	private byte maxConcentrationSensorCode;

	/**
	 * 氢气最高压力 0-1000
	 * 分辨率0.1MPa
	 * 0xFF 0xFE 异常
	 * 0xFF 0xFF 无效
	 */
	private short hydrogenMaxPressure;

	/**
	 * 氢气最大浓度传感器代号 1-252
	 * 0xfe 异常
	 * 0xff 无效
	 */
	private byte maxPressureSensorCode;

	/**
	 * dc-dc状态
	 * 0x01 工作
	 * 0x02 断开
	 * 0xFE 异常
	 * 0xFF 无效
	 */
	private byte dcState;

	@Override
	public void read(byte[] bytes, int idx) {
		// TODO Auto-generated method stub
		infoType = bytes[idx]; idx++;
		voltage = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		current = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		fuelConsumeRate = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		tempProbeQuantity = bytes[idx]; idx++;
		temps = Arrays.copyOfRange(bytes, idx, idx + (tempProbeQuantity & Constant.BYTE_INT)); idx += tempProbeQuantity & Constant.BYTE_INT;
		hydrogenMaxTemp = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		maxTempSensorCode = bytes[idx]; idx++;
		hydrogenMaxConcentration = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		maxConcentrationSensorCode = bytes[idx]; idx++;
		hydrogenMaxPressure = (short) ConvertUtil.bytes2int(bytes, idx, 2); idx += 2;
		maxPressureSensorCode = bytes[idx]; idx++;
		dcState = bytes[idx]; idx++;
	}

	@Override
	public int getByteLen() {
		return 19 + temps.length;
	}

	public byte getInfoType() {
		return infoType;
	}

	public void setInfoType(byte infoType) {
		this.infoType = infoType;
	}

	public short getVoltage() {
		return voltage;
	}

	public void setVoltage(short voltage) {
		this.voltage = voltage;
	}

	public short getCurrent() {
		return current;
	}

	public void setCurrent(short current) {
		this.current = current;
	}

	public short getFuelConsumeRate() {
		return fuelConsumeRate;
	}

	public void setFuelConsumeRate(short fuelConsumeRate) {
		this.fuelConsumeRate = fuelConsumeRate;
	}

	public short getTempProbeQuantity() {
		return tempProbeQuantity;
	}

	public void setTempProbeQuantity(short tempProbeQuantity) {
		this.tempProbeQuantity = tempProbeQuantity;
	}

	public byte[] getTemps() {
		return temps;
	}

	public void setTemps(byte[] temps) {
		this.temps = temps;
	}

	public short getHydrogenMaxTemp() {
		return hydrogenMaxTemp;
	}

	public void setHydrogenMaxTemp(short hydrogenMaxTemp) {
		this.hydrogenMaxTemp = hydrogenMaxTemp;
	}

	public byte getMaxTempSensorCode() {
		return maxTempSensorCode;
	}

	public void setMaxTempSensorCode(byte maxTempSensorCode) {
		this.maxTempSensorCode = maxTempSensorCode;
	}

	public short getHydrogenMaxConcentration() {
		return hydrogenMaxConcentration;
	}

	public void setHydrogenMaxConcentration(short hydrogenMaxConcentration) {
		this.hydrogenMaxConcentration = hydrogenMaxConcentration;
	}

	public byte getMaxConcentrationSensorCode() {
		return maxConcentrationSensorCode;
	}

	public void setMaxConcentrationSensorCode(byte maxConcentrationSensorCode) {
		this.maxConcentrationSensorCode = maxConcentrationSensorCode;
	}

	public short getHydrogenMaxPressure() {
		return hydrogenMaxPressure;
	}

	public void setHydrogenMaxPressure(short hydrogenMaxPressure) {
		this.hydrogenMaxPressure = hydrogenMaxPressure;
	}

	public byte getMaxPressureSensorCode() {
		return maxPressureSensorCode;
	}

	public void setMaxPressureSensorCode(byte maxPressureSensorCode) {
		this.maxPressureSensorCode = maxPressureSensorCode;
	}

	public byte getDcState() {
		return dcState;
	}

	public void setDcState(byte dcState) {
		this.dcState = dcState;
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append(" 信息类型: ").append(String.format("%02x", infoType))
		.append(" 电池电压: ").append(voltage)
		.append(" 电池电流: ").append(current)
		.append(" 燃料消耗率: ").append(fuelConsumeRate)
		.append(" 电池温度探针数量: ").append(tempProbeQuantity)
		.append(" 氢系统最高温度值: ").append(hydrogenMaxTemp)
		.append(" 氢系统最高温度探针代号: ").append(maxTempSensorCode)
		.append(" 氢气最大浓度: ").append(hydrogenMaxConcentration)
		.append(" 氢气最大浓度传感器代号: ").append(maxConcentrationSensorCode)
		.append(" 氢气最高压力: ").append(hydrogenMaxPressure)
		.append(" 氢气最高压力传感器代号: ").append(maxPressureSensorCode)
		.append(" dc-dc状态: ").append(dcState);

		return sb.toString();
	}
}