This commit is contained in:
CSSC-WORK\murmur 2024-12-13 17:08:28 +08:00
parent 33c8967a37
commit 7831469c66

View File

@ -87,7 +87,7 @@ void updateDeviceStatus(DeviceStatus_t status) {
*
*
* @param index (12)
* @param angle (120°210°)
* @param angle (0-360)
*/
void updateValveStatus(uint8_t index, ValveAngle_t angle) {
if (index == 1) {
@ -322,7 +322,7 @@ uint8_t WritePump2Reg(uint8_t index, uint16_t reg, uint32_t value) {
* @param acc
* @return 0: :
*/
static uint8_t WriteJogAcc(uint8_t index, uint16_t acc) {
static uint8_t SetPumpJogAcc(uint8_t index, uint16_t acc) {
WritePump1Reg(index, RTU_PUMP_CMD_JA, acc);
}
@ -333,7 +333,7 @@ static uint8_t WriteJogAcc(uint8_t index, uint16_t acc) {
* @param dec
* @return 0: :
*/
static uint8_t WriteJogDec(uint8_t index, uint16_t dec) {
static uint8_t SetPumpJogDec(uint8_t index, uint16_t dec) {
WritePump1Reg(index, RTU_PUMP_CMD_JL, dec);
}
@ -344,14 +344,14 @@ static uint8_t WriteJogDec(uint8_t index, uint16_t dec) {
* @param speed
* @return 0: :
*/
static uint8_t WriteJogSpeed(uint8_t index, uint16_t speed) {
static uint8_t SetPumpJogSpeed(uint8_t index, uint16_t speed) {
WritePump1Reg(index, RTU_PUMP_CMD_JS, speed);
}
// Jog=慢跑
// CJ=start jogging
// 写入命令操作码寄存器(40125)数据0x0096(CJ)即执行启动Jog控制
static uint8_t StartJogControl(uint8_t index) {
static uint8_t StartPumpJog(uint8_t index) {
WritePump1Reg(index, RTU_PUMP_CMD_CO, 0x0096);
}
@ -359,7 +359,7 @@ static uint8_t StartJogControl(uint8_t index) {
// 写入命令操作码寄存器(40125)数据0x00D8(SJ)即执行停止Jog控制
// CJ与SJ一一对应单次SJ无法停止所有全部CJ
// 直接停止泵需要使用SK命令
static uint8_t StopJogControl(uint8_t index) {
static uint8_t StopPumpJog(uint8_t index) {
WritePump1Reg(index, RTU_PUMP_CMD_CO, 0x00D8);
}
@ -383,7 +383,7 @@ static uint8_t StopJogControl(uint8_t index) {
* @param acc
* @return 0: :
*/
static uint8_t WriteStepAcc(uint8_t index, uint16_t acc) {
static uint8_t SetPumpStepAcc(uint8_t index, uint16_t acc) {
WritePump1Reg(index, RTU_PUMP_CMD_AC, acc);
}
/**
@ -393,7 +393,7 @@ static uint8_t WriteStepAcc(uint8_t index, uint16_t acc) {
* @param dec
* @return 0: :
*/
static uint8_t WriteStepDec(uint8_t index, uint16_t dec) {
static uint8_t SetPumpStepDec(uint8_t index, uint16_t dec) {
WritePump1Reg(index, RTU_PUMP_CMD_DE, dec);
}
/**
@ -404,7 +404,7 @@ static uint8_t WriteStepDec(uint8_t index, uint16_t dec) {
* @param speed (0-100)
* @return 0: :
*/
static uint8_t WriteStepSpeed(uint8_t index, uint16_t speed) {
static uint8_t SetPumpStepSpeed(uint8_t index, uint16_t speed) {
// 目标速度转换为实际速度
speed = (uint16_t)(speed * dp.pump[index].maxSpeed / 100);
WritePump1Reg(index, RTU_PUMP_CMD_VE, speed);
@ -416,29 +416,29 @@ static uint8_t WriteStepSpeed(uint8_t index, uint16_t speed) {
* @param target
* @return 0: :
*/
static uint8_t WriteStepTarget(uint8_t index, uint32_t target) {
static uint8_t SetPumpStepTarget(uint8_t index, uint32_t target) {
WritePump2Reg(index, RTU_PUMP_CMD_DI, target);
}
/**
*
*
* FL(feed length)
*
* @param index
* @return 0: :
*/
static uint8_t RelativePositionControl(uint8_t index) {
static uint8_t PumpRelativePositionControl(uint8_t index) {
WritePump1Reg(index, RTU_PUMP_CMD_CO, 0x0066);
}
/**
*
* 使
* FP(feed position)
*
* @param index
* @return 0: :
*/
static uint8_t AbsolutePositionControl(uint8_t index) {
static uint8_t PumpAbsolutePositionControl(uint8_t index) {
WritePump1Reg(index, RTU_PUMP_CMD_CO, 0x0067);
}
@ -459,7 +459,7 @@ static uint8_t StopPump(uint8_t index) {
* @param index
* @return 0: :
*/
uint8_t ReadHWReg(uint8_t index) {
uint8_t ReadPumpHWReg(uint8_t index) {
ReadPump1Reg(index, RTU_PUMP_CMD_HW);
}
/**
@ -469,7 +469,7 @@ uint8_t ReadHWReg(uint8_t index) {
* @param br
* @return 0: :
*/
uint8_t WriteBRReg(uint8_t index, uint16_t br) {
uint8_t SetPumpBR(uint8_t index, uint16_t br) {
WritePump1Reg(index, RTU_PUMP_CMD_BR, br);
}
/**
@ -479,7 +479,7 @@ uint8_t WriteBRReg(uint8_t index, uint16_t br) {
* @param pr
* @return 0: :
*/
uint8_t WritePRReg(uint8_t index, uint16_t pr) {
uint8_t SetPumpPR(uint8_t index, uint16_t pr) {
WritePump1Reg(index, RTU_PUMP_CMD_PR, pr);
}
@ -562,6 +562,45 @@ void DecodePumpStatusMsg(uint16_t reg4002) {
return 0;
}
/**
*
*
*/
void UpdatePumpStatus() {
// 更新设备状态
ReadPumpStatus(0);
ReadPumpStatus(1);
ReadPumpAlarm(0);
ReadPumpAlarm(1);
}
/**
*
*
*
* @return 0: :
*/
uint8_t InitPump(void) {
// 初始化泵
log_e("InitPump");
WriteJogAcc(dp.pump[0].id, dp.pump[0].maxAccel);
WriteJogDec(dp.pump[0].id, dp.pump[0].maxDecel);
WriteJogSpeed(dp.pump[0].id, dp.pump[0].maxSpeed);
WriteStepAcc(dp.pump[0].id, dp.pump[0].maxAccel);
WriteStepDec(dp.pump[0].id, dp.pump[0].maxDecel);
WriteStepSpeed(dp.pump[0].id, dp.pump[0].maxSpeed);
WriteJogAcc(dp.pump[1].id, dp.pump[1].maxAccel);
WriteJogDec(dp.pump[1].id, dp.pump[1].maxDecel);
WriteJogSpeed(dp.pump[1].id, dp.pump[1].maxSpeed);
WriteStepAcc(dp.pump[1].id, dp.pump[1].maxAccel);
WriteStepDec(dp.pump[1].id, dp.pump[1].maxDecel);
WriteStepSpeed(dp.pump[1].id, dp.pump[1].maxSpeed);
}
// valve
/*
# 轮廓位置模式,配置流程
@ -807,15 +846,16 @@ uint8_t ValveRunInit(uint8_t index) {
*
*
* @param index
* @param angle (0/120/210)
* @param angle 0-360
* @return 0: :
*/
uint8_t ValveRunToAngle(uint8_t index, uint32_t angle) {
// 限制角度为0,120,210
if(angle != 0 && angle != 120 && angle != 210) {
printf("阀门角度设置错误\r\n");
// 限制角度的逻辑不在这里,此处只执行控制逻辑
if(angle > 360) {
log_e("阀门角度设置错误");
return 1;
}
// 其它配置不变的情况下只需要写3个控制字
SetValvePPPos(index, (uint32_t)(angle*VALVE_PULSE_PER_ROUND/360));
// 电机以绝对位置,立即更新的方式运行
@ -841,42 +881,6 @@ uint8_t InitValve(void) {
SetValvePPDec(dp.valve[1].id, dp.valve[1].maxDecel);
}
/**
*
*
*/
void UpdatePumpStatus() {
// 更新设备状态
ReadPumpStatus(0);
ReadPumpStatus(1);
ReadPumpAlarm(0);
ReadPumpAlarm(1);
}
/**
*
*
*
* @return 0: :
*/
uint8_t InitPump(void) {
// 初始化泵
log_e("InitPump");
WriteJogAcc(dp.pump[0].id, dp.pump[0].maxAccel);
WriteJogDec(dp.pump[0].id, dp.pump[0].maxDecel);
WriteJogSpeed(dp.pump[0].id, dp.pump[0].maxSpeed);
WriteStepAcc(dp.pump[0].id, dp.pump[0].maxAccel);
WriteStepDec(dp.pump[0].id, dp.pump[0].maxDecel);
WriteStepSpeed(dp.pump[0].id, dp.pump[0].maxSpeed);
WriteJogAcc(dp.pump[1].id, dp.pump[1].maxAccel);
WriteJogDec(dp.pump[1].id, dp.pump[1].maxDecel);
WriteJogSpeed(dp.pump[1].id, dp.pump[1].maxSpeed);
WriteStepAcc(dp.pump[1].id, dp.pump[1].maxAccel);
WriteStepDec(dp.pump[1].id, dp.pump[1].maxDecel);
WriteStepSpeed(dp.pump[1].id, dp.pump[1].maxSpeed);
}
/**
*
* 线
@ -916,7 +920,7 @@ static uint8_t HandleStatusQuery(void) {
// 填充并返回数据
uint8_t txBuf[sizeof(DeviceStatus)] = {0};
memcpy(txBuf, &deviceStatus, sizeof(DeviceStatus));
// sendMsgToHost(txBuf, sizeof(txBuf));
sendMsgToHost(txBuf, sizeof(txBuf));
return 0;
}
@ -936,7 +940,7 @@ static uint8_t HandleValveControl(uint8_t *Buff, uint8_t len) {
return 0;
}
uint8_t index = Buff[0];
uint8_t direction = Buff[1];
uint8_t direction = Buff[1];//此状态位无效目前三通阀有硬件限位且指定角度必须为120或210
uint16_t angle = (Buff[2]<<8) | Buff[3];
if(angle > 360) {
log_e("三通阀控制错误");
@ -948,7 +952,7 @@ static uint8_t HandleValveControl(uint8_t *Buff, uint8_t len) {
}
// 具体实现
ValveRunToAngle(index,angle);
// 更新三通阀状态
updateValveStatus(index, angle);
@ -991,7 +995,7 @@ static uint8_t HandlePumpSpeedControl(uint8_t *Buff, uint8_t len) {
log_e("泵速度设置错误");
return 0;
}
WriteJogSpeed(index, speed);
SetPumpJogSpeed(index, speed);
index = Buff[2];
speed = Buff[3];
@ -999,7 +1003,7 @@ static uint8_t HandlePumpSpeedControl(uint8_t *Buff, uint8_t len) {
log_e("泵速度设置错误");
return 0;
}
WriteJogSpeed(index, speed);
SetPumpJogSpeed(index, speed);
return 1;
}
@ -1019,7 +1023,7 @@ static uint8_t HandlePumpStepControl(uint8_t *Buff, uint8_t len) {
}
uint8_t index = Buff[0];
int32_t step = (Buff[1]<<24) | (Buff[2]<<16) | (Buff[3]<<8) | Buff[4];
WriteStepTarget(index, step);
SetPumpStepTarget(index, step);
return 0;
}
@ -1045,8 +1049,8 @@ static uint8_t HandleSoftStop(uint8_t *rxBuf, uint16_t rxLen) {
// 急停状态
StopPump(0);
StopPump(1);
StopJogControl(0);
StopJogControl(1);
StopPumpJog(0);
StopPumpJog(1);
updateEmergencyStop(ESTOP_PRESSED);
}
return 0;
@ -1120,22 +1124,22 @@ void packMsgToHost(uint16_t funcCode, uint8_t isOK) {
CmdFrameError_t checkHostCmd(uint8_t *rxBuf, uint16_t rxLen) {
// 检查命令是否正确
// FRAME_HEADER是按小端序存储的而rxBuf是按大端序存的
uint32_t header;
FillBigEndian32(&header, FRAME_HEADER);
uint32_t tail;
FillBigEndian32(&tail, FRAME_TAIL);
uint8_t header[sizeof(FRAME_HEADER)];
FillBigEndian32(header, FRAME_HEADER);
uint8_t tail[sizeof(FRAME_TAIL)];
FillBigEndian32(tail, FRAME_TAIL);
if(memcmp(rxBuf, &header, 4) != 0)
if(memcmp(rxBuf, header, sizeof(FRAME_HEADER)) != 0)
{
return CMD_FRAME_HEADER_ERROR;
}
if (memcmp(rxBuf + rxLen - 4, &tail, 4) != 0)
if (memcmp(rxBuf + rxLen - sizeof(FRAME_TAIL), tail, sizeof(FRAME_TAIL)) != 0)
{
return CMD_FRAME_TAIL_ERROR;
}
uint16_t crc = CalculateCRC16(rxBuf+4, rxLen - 8);// 计算crc不包含帧头和帧尾
if (memcmp(rxBuf + rxLen - 4, &crc, 2) != 0)
uint16_t crc = CalculateCRC16(rxBuf+sizeof(FRAME_HEADER), rxLen - sizeof(FRAME_HEADER)-sizeof(FRAME_TAIL))-2;// 计算crc不包含帧头和帧尾和crc自身
if ((rxBuf[rxLen-sizeof(FRAME_TAIL)-6]<<8) | rxBuf[rxLen-sizeof(FRAME_TAIL)-5] != crc)
{
return CMD_FRAME_CHECK_ERROR;
}