97 lines
2.5 KiB
C
97 lines
2.5 KiB
C
#ifndef _MODBUS_485_H_
|
||
#define _MODBUS_485_H_
|
||
|
||
#include "apps_gather.h"
|
||
|
||
//自定义线圈寄存器地址
|
||
#define COIL_ADDR_ON_OFF 0x00
|
||
#define COIL_ADDR_LIGHT 0x01
|
||
#define COIL_ADDR_CONFIG_SAVE 0x02
|
||
#define COIL_ADDR_CONFIG_RESET 0x03
|
||
#define COIL_ADDR_SCREEN_SWITCH 0x04
|
||
|
||
//自定义离散状态寄存器地址
|
||
|
||
//自定义保持寄存器地址
|
||
#define HOLD_ADDR_SET_WORK_MODE 0x00
|
||
#define HOLD_ADDR_MUX_PV_L 0x01
|
||
#define HOLD_ADDR_MUX_PV_H 0x02
|
||
#define HOLD_ADDR_PHY_UNIT 0x03
|
||
#define HOLD_ADDR_PHY_UP 0x04
|
||
#define HOLD_ADDR_PHY_LOW 0x05
|
||
#define HOLD_ADDR_SAMPLE_INTERVAL 0x06
|
||
#define HOLD_ADDR_PLOT_COUNTS 0x07
|
||
#define HOLD_ADDR_INPUT_COLOR 0x08
|
||
#define HOLD_ADDR_OUTPUT_COLOR 0x09
|
||
#define HOLD_ADDR_LANGUAGE 0x0A
|
||
|
||
//自定义输入寄存器地址
|
||
#define INPUT_ADDR_BATTERY 0x00
|
||
#define INPUT_ADDR_RUNTIME_SECOND 0x01
|
||
#define INPUT_ADDR_RUNTIME_HOUR 0x02
|
||
#define INPUT_ADDR_MUX_SV_L 0x03
|
||
#define INPUT_ADDR_MUX_SV_H 0x04
|
||
|
||
typedef enum
|
||
{
|
||
TRANSPARENT_WAIT = 0,
|
||
TRANSPARENT_RECIEVE_START,
|
||
TRANSPARENT_RECIEVE_FINISHED,
|
||
TRANSPARENT_TRANSMIT_END
|
||
}TRANS_PROCESS;
|
||
|
||
extern uint32_t tick_start;
|
||
extern uint32_t tick_middle;
|
||
extern uint32_t tick_end;
|
||
//extern uint32_t trans_log_rx;
|
||
extern uint32_t trans_log_tx;
|
||
extern uint8_t sig2slave_step;
|
||
extern TRANS_PROCESS st_flag;
|
||
|
||
void parse_scom_485(st_scom *scom);
|
||
|
||
//透传,DMA发送,与发送回调组合使用
|
||
void transparent_tim(void);
|
||
|
||
void trans_hart2pc(void);
|
||
|
||
void trans_pc2hart(void);
|
||
|
||
void trans_ble2pc(void);
|
||
|
||
void trans_pc2ble(void);
|
||
|
||
void trans_modbus_pc2sig(void);
|
||
|
||
//SIG作为主设备,向外发送数据之后,等待从机应答,持续一段时间(超时时间)无数据后停止接收,并对收到的数据进行解析
|
||
void trans_modbus_sig2slave(void);
|
||
|
||
//DMA接收只有半满中断、空闲中断和完成(溢出)中断,因此用以下函数尝试进行捕获
|
||
//该函数放置于TIM2的中断内,1ms为周期,尝试捕获前3帧
|
||
void trans_start_capture(void);
|
||
|
||
uint8_t trans_enable_check(st_scom *scom);
|
||
|
||
//处理modbus寄存器值的更新与写入
|
||
void modbus_registers_update(void);
|
||
|
||
//线圈寄存器,读写
|
||
void modbus_reg_update_coil(void);
|
||
|
||
//离散输入寄存器,上位机只读
|
||
void modbus_reg_update_dis(void);
|
||
|
||
//保持寄存器,读写
|
||
void modbus_reg_update_hold(void);
|
||
|
||
//输入寄存器,上位机只读
|
||
void modbus_reg_update_input(void);
|
||
|
||
//设置线圈寄存器,输入参数:地址、标志位
|
||
void set_coil_val(uint8_t addr, uint8_t bit_val);
|
||
|
||
//获取线圈值,应对上位机修改线圈的情况
|
||
uint8_t get_coil_val(uint8_t addr);
|
||
|
||
#endif
|