update modbus
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "bsp_Uart.h"
|
||||
#include "bsp_74HC4067.h"
|
||||
#include "bsp_Flash.h"
|
||||
#include "app_leakage.h"
|
||||
|
||||
#include "proto_print.h"
|
||||
#include "proto_modbus_lib.h"
|
||||
@@ -15,7 +16,8 @@
|
||||
#define TDLAS_MODBUS_ID (0xe8)
|
||||
#define TDLAS_DATA_ENDIAN (LITTLE_ENDIAN) /*<2A><><EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>*/
|
||||
|
||||
#define PROTO_TDLAS_GET_CURR_DATA_START_ADDR (20000)
|
||||
#define PROTO_LEAKAGE_READ_DATA_NUM (14) /*<2A><>ȡһ<C8A1><D2BB><EFBFBD>豸<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
#define PROTO_TDLAS_GET_CURR_DATA_START_ADDR (0x0000)
|
||||
#define PROTO_TDLAS_SET_ZERO_CALIB_START_ADDR (12)
|
||||
#define PROTO_TDLAS_SET_SPAN_CALIB_START_ADDR (13)
|
||||
#define PROTO_TDLAS_GET_RESET_START_ADDR (0x0000)
|
||||
@@ -147,7 +149,7 @@ static void proto_tdlas_control_fac_calib_data_get(u8 ch)
|
||||
static void proto_tdlas_tx_curr_data_get(void)
|
||||
{
|
||||
u16 addr = PROTO_TDLAS_GET_CURR_DATA_START_ADDR;
|
||||
u8 len = Usr_Flash.FlashData.modbus_read_reg_num;
|
||||
u8 len = PROTO_LEAKAGE_READ_DATA_NUM;
|
||||
modbus_lib_data_read(p_sensor->modbus_id,addr,len,proto_tdlas_send);
|
||||
}
|
||||
|
||||
@@ -316,8 +318,8 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
|
||||
u8 modbus_id,cmd;
|
||||
u16 check_crc16,modbus_crc16;
|
||||
u16 *p_u16_temp;
|
||||
u16 i;
|
||||
u8 *p_rx_valid;
|
||||
u16 i,ch;
|
||||
u8 *p_rx_valid,temp_value;
|
||||
|
||||
proto_tdlas_sys_t *p_sensor_sys;
|
||||
p_sensor_sys = &p_sensor->sys[p_sensor->sensor_index];
|
||||
@@ -337,7 +339,7 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
|
||||
check_crc16 = p_data[len-2] << 8 | p_data[len-1];
|
||||
|
||||
if(modbus_id != p_sensor->modbus_id) return ;
|
||||
if(cmd != 0x04 && cmd != 0x06 && cmd != 0x10 && cmd != 0x41) return ;
|
||||
if(cmd != 0x03 && cmd != 0x06 && cmd != 0x10 && cmd != 0x41) return ;
|
||||
|
||||
modbus_crc16 = modbus_lib_crc16(p_data,len-2);
|
||||
modbus_crc16 = (modbus_crc16 >> 8) | (modbus_crc16 << 8);
|
||||
@@ -348,6 +350,10 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
|
||||
{
|
||||
p_rx_valid = &p_data[6];
|
||||
}
|
||||
|
||||
u8 byte_count = p_data[3];
|
||||
p_rx_valid = &p_data[3];
|
||||
|
||||
rx_uart = (bsp_uart_t *)other_data;
|
||||
|
||||
p_sensor_sys->tx_time_out_count = 0;
|
||||
@@ -361,11 +367,98 @@ static void proto_tdlas_rx_task(u8 *p_data,u16 len,void *other_data)
|
||||
}break;
|
||||
case PROTO_TDLAS_SYS_STATE_CURR_DATA_GET:
|
||||
{
|
||||
p_u16_temp = (u16 *)&(gas_data[p_sensor->sensor_index]);
|
||||
for(i=0;i<Usr_Flash.FlashData.modbus_read_reg_num;i++)
|
||||
{
|
||||
p_u16_temp[i] = p_rx_valid[i * 2] << 8 | p_rx_valid[i * 2 + 1];
|
||||
}
|
||||
/*<2A><><EFBFBD>㵱ǰ<E3B5B1>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
|
||||
u8 device_global_idx = p_sensor->sensor_index;
|
||||
|
||||
if(device_global_idx >= APP_LEAKAGE_SUB_DEVICE_NUM)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
/*ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for(ch = 0;ch < APP_LEAKAGE_SUB_DEVICE_CH_NUM;ch++)
|
||||
{
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state = 0;
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state = 0;
|
||||
}
|
||||
|
||||
if(byte_count >=28)
|
||||
{
|
||||
ch = 0;
|
||||
temp_value = (p_rx_valid[0] << 8) | p_rx_valid[1];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[2] << 8) | p_rx_valid[3];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[4] << 8) | p_rx_valid[5];
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].distance = temp_value *0.01;
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x0003*/
|
||||
temp_value = (p_rx_valid[6] << 8) | p_rx_valid[7];
|
||||
p_leakage->sub_device_data[device_global_idx].heartbeat = temp_value & 0xFF;
|
||||
|
||||
/*ͨ<><CDA8>2<EFBFBD><32>0x0004-0x0006*/
|
||||
ch = 1;
|
||||
temp_value = (p_rx_valid[8] << 8) | p_rx_valid[9];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[10] << 8) | p_rx_valid[11];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[12] << 8) | p_rx_valid[13];
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].distance = temp_value *0.01;
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>0x0007*/
|
||||
temp_value = (p_rx_valid[14] << 8) | p_rx_valid[15];
|
||||
p_leakage->sub_device_data[device_global_idx].test_mode = temp_value & 0xFF;
|
||||
|
||||
/*ͨ<><CDA8>3<EFBFBD><33>0x0008-0x000A*/
|
||||
ch = 2;
|
||||
temp_value = (p_rx_valid[16] << 8) | p_rx_valid[17];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[18] << 8) | p_rx_valid[19];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[20] << 8) | p_rx_valid[21];
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].distance = temp_value *0.01;
|
||||
|
||||
/* ͨ<><CDA8>4<EFBFBD><34>0x000B-0x000D*/
|
||||
ch = 3;
|
||||
temp_value = (p_rx_valid[22] << 8) | p_rx_valid[23];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[24] << 8) | p_rx_valid[25];
|
||||
if(temp_value == 1) {
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].state |=
|
||||
APP_LEAKAGE_SUB_DEVICE_STATE_OPEN;
|
||||
}
|
||||
|
||||
temp_value = (p_rx_valid[26] << 8) | p_rx_valid[27];
|
||||
p_leakage->sub_device_data[device_global_idx].ch_data[ch].distance = temp_value *0.01;
|
||||
}
|
||||
}break;
|
||||
case PROTO_TDLAS_SYS_STATE_ZERO_CALIB:
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user