|
@@ -1248,6 +1248,58 @@ int BuildTimeCmd(uint8_t *pBuf)
|
|
|
return send_pos;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ ***************************************
|
|
|
+ * 构建40命令数据 电子铅封 -- hex制式
|
|
|
+ * 输入:pBuf-构建数据的存放首地址
|
|
|
+ * 返回: 构建数据的字节总数
|
|
|
+ ***************************************
|
|
|
+ */
|
|
|
+int BuildSealTxCmd(uint8_t *pBuf, uint8_t *pEmergy) // 40命令
|
|
|
+{
|
|
|
+ Return_data *ret;
|
|
|
+ int n = 0;
|
|
|
+ uint8_t emergy = 0;
|
|
|
+
|
|
|
+ *pBuf++ = 0x40;
|
|
|
+ ret = Seal_Tx_Readvalue(0,0);
|
|
|
+ *pBuf++ = ret->length/2; // 调用返回的数据是asii制式的,所以真实的hex数是其一半
|
|
|
+
|
|
|
+ for(n=0; n < ret->length/2 && n < 100; n++) {
|
|
|
+ pBuf[n] = MODBUS_ASCII_AsciiToHex(ret->data + 2*n);
|
|
|
+ }
|
|
|
+
|
|
|
+ emergy = pBuf[0];
|
|
|
+ if(pEmergy) *pEmergy = emergy;
|
|
|
+ return n+2;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ ***************************************
|
|
|
+ * 构建91命令数据 IO状态 -- hex制式
|
|
|
+ * 输入:pBuf-构建数据的存放首地址
|
|
|
+ * 返回: 构建数据的字节总数
|
|
|
+ ***************************************
|
|
|
+ */
|
|
|
+int Build91Cmd(uint8_t *pBuf, uint8_t *pEmergy)
|
|
|
+{
|
|
|
+ Return_data *ret;
|
|
|
+ int n = 0;
|
|
|
+ uint8_t emergy = 0;
|
|
|
+
|
|
|
+ *pBuf++ = 0x91;
|
|
|
+ ret = IO_Tx_Readvalue(0,0);
|
|
|
+ *pBuf++ = ret->length/2; // 调用返回的数据是asii制式的,所以真实的hex数是其一半
|
|
|
+
|
|
|
+ for(n=0; n < ret->length/2 && n < 100; n++) {
|
|
|
+ pBuf[n] = MODBUS_ASCII_AsciiToHex(ret->data + 2*n);
|
|
|
+ }
|
|
|
+
|
|
|
+ emergy = pBuf[0];
|
|
|
+ if(pEmergy) *pEmergy = emergy;
|
|
|
+ return n+2;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
***************************************
|
|
|
* xy,新透传,41串口透传,模拟F3轮询传感器
|
|
@@ -1262,25 +1314,49 @@ int BuildTimeCmd(uint8_t *pBuf)
|
|
|
*/
|
|
|
void DoInternalSensorScanAndPost()
|
|
|
{
|
|
|
- uint8_t len=0;
|
|
|
+ int xlen=0, ylen=0;
|
|
|
uint8_t emergy=0;
|
|
|
uint8_t *pSendBuf = USART1_TX_BUF;
|
|
|
static int step = 0;
|
|
|
static int nstep = 0;
|
|
|
|
|
|
- if(++step % SensorScanParam.step == 0)
|
|
|
- {
|
|
|
+ if(++step % SensorScanParam.step == 0){
|
|
|
pSendBuf[0] = 1;
|
|
|
- pSendBuf[1] = 2;
|
|
|
+ pSendBuf[1] = SensorScanParam.cmd_num + 1;
|
|
|
pSendBuf += 2;
|
|
|
- len = BuildA1Cmd(pSendBuf, &emergy); // 目前只实装了A1命令,后续根据新命令设计再行拓展
|
|
|
- len += BuildTimeCmd(pSendBuf+len); // 目前总是会附加时间戳命令数据
|
|
|
+ ylen += 2;
|
|
|
+
|
|
|
+ for(int n=0; n<SensorScanParam.cmd_num; n++) {
|
|
|
+ switch (SensorScanParam.cmd_arr[n]){
|
|
|
+ case 0x40:
|
|
|
+ xlen = BuildSealTxCmd(pSendBuf, emergy?NULL:&emergy);
|
|
|
+ pSendBuf += xlen;
|
|
|
+ ylen += xlen;
|
|
|
+ break;
|
|
|
+ case 0x91:
|
|
|
+ xlen = Build91Cmd(pSendBuf, emergy?NULL:&emergy);
|
|
|
+ pSendBuf += xlen;
|
|
|
+ ylen += xlen;
|
|
|
+ break;
|
|
|
+ case 0xA1:
|
|
|
+ xlen = BuildA1Cmd(pSendBuf, emergy?NULL:&emergy);
|
|
|
+ pSendBuf += xlen;
|
|
|
+ ylen += xlen;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ xlen = BuildTimeCmd(pSendBuf); // 目前总是会附加时间戳命令数据
|
|
|
+ ylen += xlen;
|
|
|
|
|
|
if(emergy) {
|
|
|
- TerminalSlave485_Send_Data(USART1_TX_BUF,len+2);
|
|
|
+ TerminalSlave485_Send_Data(USART1_TX_BUF,ylen);
|
|
|
nstep = 0;
|
|
|
+ emergy = 0;
|
|
|
} else {
|
|
|
- if(++nstep % SensorScanParam.nstep == 0) TerminalSlave485_Send_Data(USART1_TX_BUF,len+2);
|
|
|
+ if(++nstep % SensorScanParam.nstep == 0) TerminalSlave485_Send_Data(USART1_TX_BUF,ylen);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -5220,6 +5296,10 @@ int Process_CMD_0x39_RemoteCali(uint8_t dataMode)
|
|
|
FM25L16B_Read_N_Bytes(ADDR_OiLType_Data,T2C_RemoteCaliDat001.PayLoadData,32);
|
|
|
T2C_RemoteCaliDat001.NumberOfRegs = 32;
|
|
|
break;
|
|
|
+ case ADDR_Sensor_Scan_Param:
|
|
|
+ FM25L16B_Read_N_Bytes(ADDR_Sensor_Scan_Param,T2C_RemoteCaliDat001.PayLoadData,16);
|
|
|
+ T2C_RemoteCaliDat001.NumberOfRegs = 16;
|
|
|
+ break;
|
|
|
default:
|
|
|
|
|
|
//memset(&USART1_TX_BUF[33], '=', sizeof(USART1_TX_BUF) - 33);
|
|
@@ -5528,9 +5608,9 @@ int Process_CMD_0x39_RemoteCali(uint8_t dataMode)
|
|
|
break;
|
|
|
|
|
|
case ADDR_Sensor_Scan_Param:
|
|
|
- FM25L16B_Write_N_Bytes(ADDR_Sensor_Scan_Param,T2C_RemoteCaliDat001.PayLoadData,11);
|
|
|
+ FM25L16B_Write_N_Bytes(ADDR_Sensor_Scan_Param,T2C_RemoteCaliDat001.PayLoadData,16);
|
|
|
InitSensorScanParam();
|
|
|
- T2C_RemoteCaliDat001.NumberOfRegs = 11;
|
|
|
+ T2C_RemoteCaliDat001.NumberOfRegs = 16;
|
|
|
break;
|
|
|
|
|
|
case ADDR_TiltAngle_Sensor://倾角补偿参数 ----长度为16字节
|