NULL
This commit is contained in:
98
user/Protocol/MODBUS.c
Executable file → Normal file
98
user/Protocol/MODBUS.c
Executable file → Normal file
@@ -49,16 +49,18 @@ void ModBusErrorInfo(u8 ErrorCode)
|
||||
void ModBusReadMultiByte(void)
|
||||
{
|
||||
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserReadDataProtocol();
|
||||
else InternalReadParameterProtocol();
|
||||
else InternalReadParameterProtocolInFlash();//InternalReadParameterProtocolInFlash InternalReadParameterProtocol
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void ModBusWriteMultiByte(void)
|
||||
{
|
||||
if(MBBuf.StartAddr < INT_PARAMETER_PROTOCOL) UserWriteDataProtocol();
|
||||
else InternalWriteParameterProtocol();
|
||||
else InternalWriteParameterProtocolToFlash();//InternalWriteParameterProtocol(); InternalWriteParameterProtocol_withflash
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
//ModBus<75><73><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
||||
void ModBusDataProcessing(void)
|
||||
@@ -70,24 +72,20 @@ 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;
|
||||
|
||||
@@ -95,10 +93,8 @@ 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>
|
||||
@@ -107,23 +103,26 @@ 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;
|
||||
|
||||
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;
|
||||
default: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δʶ<CEB4><CAB6>-----------------------------------------------------------------------
|
||||
MBBuf.BusError = ILLEGAL_FUNCTION;
|
||||
break;
|
||||
}
|
||||
|
||||
if(MBBuf.BusError != 0) ModBusErrorInfo(MBBuf.BusError);
|
||||
//<2F>㲥<EFBFBD><E3B2A5>ַ <20><>Ĭ
|
||||
if(MBBuf.RxPointer[0] == 0x00) {
|
||||
MBBuf.TxdLen = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if(MBBuf.RxPointer[0] == 0x00) { MBBuf.TxdLen = 0; return; } //<2F>㲥<EFBFBD><E3B2A5>ַ <20><>Ĭ
|
||||
if(MBBuf.TxdLen == 0) return;
|
||||
ComputeTxdDataCRC();
|
||||
memmove( (char *)MBBuf.TxPointer, (char *)MBBuf.RxPointer, MBBuf.TxdLen);
|
||||
@@ -137,40 +136,49 @@ u8 ModBusProtocolDetection(void)
|
||||
|
||||
MBBuf.TxdLen = 0;
|
||||
if(MBBuf.RxdLen < 5) return 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];
|
||||
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];
|
||||
CRCTempCX = ModBusCRC(MBBuf.RxPointer, MBBuf.RxdLen-3); // <20><><EFBFBD><EFBFBD>CRC
|
||||
if(CRCTempRX != CRCTempCX) return 0; // CRC<52><43><EFBFBD><EFBFBD>
|
||||
else return 1;
|
||||
if(CRCTempRX != CRCTempCX)
|
||||
return 0; // CRC<52><43><EFBFBD><EFBFBD>
|
||||
|
||||
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;
|
||||
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;
|
||||
MBBuf.DataByte >>= 1;
|
||||
MBBuf.StartAddr += MBBuf.DataByte;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u8 ModbusVariablePointerDec(void)
|
||||
{
|
||||
if(MBBuf.ByteNumber < MBBuf.DataByte + 2) {
|
||||
if(MBBuf.ByteNumber < MBBuf.DataByte + 2)
|
||||
{
|
||||
MBBuf.ByteNumber = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user