This commit is contained in:
2026-03-20 21:19:53 +08:00
parent 9d3b4b836f
commit 6a749331db
125 changed files with 29972 additions and 23051 deletions

View File

@@ -49,18 +49,16 @@ void ModBusErrorInfo(u8 ErrorCode)
void ModBusReadMultiByte(void)
{
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserReadDataProtocol();
else InternalReadParameterProtocolInFlash();//InternalReadParameterProtocolInFlash InternalReadParameterProtocol
else InternalReadParameterProtocol();
}
/******************************************************************************/
void ModBusWriteMultiByte(void)
{
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserWriteDataProtocol();
else InternalWriteParameterProtocolToFlash();//InternalWriteParameterProtocol(); InternalWriteParameterProtocol_withflash
else InternalWriteParameterProtocol();
}
/******************************************************************************/
//ModBus<75><73><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
void ModBusDataProcessing(void)
@@ -72,20 +70,24 @@ void ModBusDataProcessing(void)
MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.ByteNumber = ((u16)MBBuf.RxPointer[4] << 8) | (u16)MBBuf.RxPointer[5];
if(MBBuf.ByteNumber > ENABLE_REG_MAX) { MBBuf.BusError = SLAVE_DEVICE_FAILURE; break; }
if(MBBuf.ByteNumber > ENABLE_REG_MAX) {
MBBuf.BusError = SLAVE_DEVICE_FAILURE;
break;
}
MBBuf.ByteNumber <<= 1;
MBBuf.TxdLen = MBBuf.ByteNumber;
MBBuf.TxdLen = MBBuf.ByteNumber;
MBBuf.RxPointer[2] = MBBuf.TxdLen;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ֽ<EFBFBD><D6BD><EFBFBD>
MBBuf.TxdLen += 4;
MBBuf.Index = 3;
MBBuf.TxdLen += 4;
MBBuf.Index = 3;
ModBusReadMultiByte();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case PRESET_SINGLE_REGISTER: //0x06 дԤ<D0B4>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>---------------------------------------------
MBBuf.StartAddr = MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.EndAddr = MBBuf.StartAddr + 1;
MBBuf.TxdLen = 7;
MBBuf.TxdLen = 7;
MBBuf.ByteNumber = 2;
MBBuf.Index = 4; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ʼ
MBBuf.Index = 4; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ʼ
ModBusWriteMultiByte();//д<><D0B4><EFBFBD><EFBFBD>
break;
@@ -93,8 +95,10 @@ void ModBusDataProcessing(void)
//if(RxdIndex < 11) return;
MBBuf.StartAddr = ((u16)MBBuf.RxPointer[2] << 8) | (u16)MBBuf.RxPointer[3];
MBBuf.ByteNumber = ((u16)MBBuf.RxPointer[4] << 8) | (u16)MBBuf.RxPointer[5];
if(MBBuf.ByteNumber > ENABLE_REG_MAX) { MBBuf.BusError = SLAVE_DEVICE_FAILURE; break; }
if(MBBuf.ByteNumber > ENABLE_REG_MAX) {
MBBuf.BusError = SLAVE_DEVICE_FAILURE;
break;
}
MBBuf.EndAddr = MBBuf.StartAddr + MBBuf.ByteNumber;
MBBuf.ByteNumber <<= 1;
//׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -103,26 +107,23 @@ void ModBusDataProcessing(void)
MBBuf.Index = 7;
ModBusWriteMultiByte();//д<><D0B4><EFBFBD><EFBFBD>
break;
case ERROR_TEST : //0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------------------------------------------------------------
if (MBBuf.RxPointer[0] != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ㲥<C7B9><E3B2A5>ַ <20><><EFBFBD>ظ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ
break;
// <09><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>
case 0x2B:
BLEModBusReturnDevice();
break;
case 0x42:
BLEModBusReturnData();
break;
case 0x43:
BLEModBusReturnparameter();
break;
break;
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʶ<CEB4><CAB6>-----------------------------------------------------------------------
MBBuf.BusError = ILLEGAL_FUNCTION;
break;
}
if(MBBuf.BusError != 0) ModBusErrorInfo(MBBuf.BusError);
if(MBBuf.RxPointer[0] == 0x00) { MBBuf.TxdLen = 0; return; } //<2F><EFBFBD><E3B2A5>ַ <20><>Ĭ
//<2F><EFBFBD><E3B2A5>ַ <20><>Ĭ
if(MBBuf.RxPointer[0] == 0x00) {
MBBuf.TxdLen = 0;
return;
}
if(MBBuf.TxdLen == 0) return;
ComputeTxdDataCRC();
memmove( (char *)MBBuf.TxPointer, (char *)MBBuf.RxPointer, MBBuf.TxdLen);
@@ -136,49 +137,40 @@ u8 ModBusProtocolDetection(void)
MBBuf.TxdLen = 0;
if(MBBuf.RxdLen < 5) return 0;
localAddress= 1 ;
//if((MBBuf.RxPointer[0] != 0) && (MBBuf.RxPointer[0] != localAddress)) // <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
if(MBBuf.RxPointer[0] != localAddress) return 0; // <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
tempL.Byte[1] = MBBuf.RxPointer[MBBuf.RxdLen-1];
tempL.Byte[0] = MBBuf.RxPointer[MBBuf.RxdLen-2];
CRCTempRX = tempL.Word[0];
// <20>жϵ<D0B6>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if(MBBuf.RxPointer[0] == localAddress) goto DetecteNext;
else if(MBBuf.RxPointer[0] == 0) goto DetecteNext;
else return 0;
DetecteNext:
//tempL.Byte[1] = MBBuf.RxPointer[MBBuf.RxdLen-1];
//tempL.Byte[0] = MBBuf.RxPointer[MBBuf.RxdLen-2];
//CRCTempRX = tempL.Word[0];
CRCTempRX = ((u16)MBBuf.RxPointer[MBBuf.RxdLen-1] << 8) | (u16)MBBuf.RxPointer[MBBuf.RxdLen-2];
CRCTempCX = ModBusCRC(MBBuf.RxPointer, MBBuf.RxdLen-3); // <20><><EFBFBD><EFBFBD>CRC
if(CRCTempRX != CRCTempCX)
return 0; // CRC<52><43><EFBFBD><EFBFBD>
return 1;
if(CRCTempRX != CRCTempCX) return 0; // CRC<52><43><EFBFBD><EFBFBD>
else return 1;
}
/******************************************************************************/
//Modbus<75><73><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB4A6>
u8 ModbusVariablePointerProcess(void)
{
if(MBBuf.ByteNumber >= MBBuf.DataByte) MBBuf.ByteNumber -= MBBuf.DataByte;
else return 1;
if(MBBuf.ByteNumber < 2) return 1;
MBBuf.DataByte >>= 1;
MBBuf.StartAddr += MBBuf.DataByte;
if(MBBuf.ByteNumber >= MBBuf.DataByte) MBBuf.ByteNumber -= MBBuf.DataByte;
else return 1;
return 0;
if(MBBuf.ByteNumber < 2) return 1;
MBBuf.DataByte >>= 1;
MBBuf.StartAddr += MBBuf.DataByte;
return 0;
}
/******************************************************************************/
u8 ModbusVariablePointerDec(void)
{
if(MBBuf.ByteNumber < MBBuf.DataByte + 2)
{
if(MBBuf.ByteNumber < MBBuf.DataByte + 2) {
MBBuf.ByteNumber = 0;
return 1;
}