118 lines
2.7 KiB
C
118 lines
2.7 KiB
C
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* 模块名称 : MODEBUS 通信模块 (主机程序)
|
|
* 文件名称 : modbus_host.h
|
|
* 版 本 : V1.4
|
|
* 说 明 : 头文件
|
|
*
|
|
* Copyright (C), 2020-2030, 安富莱电子 www.armfly.com
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
#ifndef __MOSBUS_HOST_H
|
|
#define __MOSBUS_HOST_H
|
|
|
|
#define SlaveAddr 0x01 /* 面板作为时,主板作从机 */
|
|
#define HBAUD485 UART3_BAUD
|
|
|
|
/* 01H 读强制单线圈 */
|
|
/* 05H 写强制单线圈 */
|
|
#define REG_D01 0x0101
|
|
#define REG_D02 0x0102
|
|
#define REG_D03 0x0103
|
|
#define REG_D04 0x0104
|
|
#define REG_DXX REG_D04
|
|
|
|
/* 02H 读取输入状态 */
|
|
#define REG_T01 0x0201
|
|
#define REG_T02 0x0202
|
|
#define REG_T03 0x0203
|
|
#define REG_TXX REG_T03
|
|
|
|
/* 03H 读保持寄存器 */
|
|
/* 06H 写保持寄存器 */
|
|
/* 10H 写多个保存寄存器 */
|
|
#define REG_P01 0x0301
|
|
#define REG_P02 0x0302
|
|
|
|
/* 04H 读取输入寄存器(模拟信号) */
|
|
#define REG_A01 0x0401
|
|
#define REG_AXX REG_A01
|
|
|
|
/* RTU 应答代码 */
|
|
#define RSP_OK 0 /* 成功 */
|
|
#define RSP_ERR_CMD 0x01 /* 不支持的功能码 */
|
|
#define RSP_ERR_REG_ADDR 0x02 /* 寄存器地址错误 */
|
|
#define RSP_ERR_VALUE 0x03 /* 数据值域错误 */
|
|
#define RSP_ERR_WRITE 0x04 /* 写入失败 */
|
|
|
|
#define H_RX_BUF_SIZE 64
|
|
#define H_TX_BUF_SIZE 128
|
|
|
|
typedef struct
|
|
{
|
|
uint8_t RxBuf[H_RX_BUF_SIZE];
|
|
uint8_t RxCount;
|
|
uint8_t RxStatus;
|
|
uint8_t RxNewFlag;
|
|
|
|
uint8_t RspCode;
|
|
|
|
uint8_t TxBuf[H_TX_BUF_SIZE];
|
|
uint8_t TxCount;
|
|
|
|
uint16_t Reg01H; /* 保存主机发送的寄存器首地址 */
|
|
uint16_t Reg02H;
|
|
uint16_t Reg03H;
|
|
uint16_t Reg04H;
|
|
|
|
uint8_t RegNum; /* 寄存器个数 */
|
|
|
|
uint8_t fAck01H; /* 应答命令标志 0 表示执行失败 1表示执行成功 */
|
|
uint8_t fAck02H;
|
|
uint8_t fAck03H;
|
|
uint8_t fAck04H;
|
|
uint8_t fAck05H;
|
|
uint8_t fAck06H;
|
|
uint8_t fAck10H;
|
|
|
|
}MODH_T;
|
|
|
|
typedef struct
|
|
{
|
|
/* 03H 06H 读写保持寄存器 */
|
|
uint16_t P01;
|
|
uint16_t P02;
|
|
|
|
/* 02H 读写离散输入寄存器 */
|
|
uint16_t T01;
|
|
uint16_t T02;
|
|
uint16_t T03;
|
|
|
|
/* 04H 读取模拟量寄存器 */
|
|
uint16_t A01;
|
|
|
|
/* 01H 05H 读写单个强制线圈 */
|
|
uint16_t D01;
|
|
uint16_t D02;
|
|
uint16_t D03;
|
|
uint16_t D04;
|
|
|
|
}VAR_T;
|
|
|
|
void MODH_Poll(void);
|
|
uint8_t MODH_ReadParam_01H(uint16_t _reg, uint16_t _num);
|
|
uint8_t MODH_ReadParam_02H(uint16_t _reg, uint16_t _num);
|
|
uint8_t MODH_ReadParam_03H(uint16_t _reg, uint16_t _num);
|
|
uint8_t MODH_ReadParam_04H(uint16_t _reg, uint16_t _num);
|
|
uint8_t MODH_WriteParam_05H(uint16_t _reg, uint16_t _value);
|
|
uint8_t MODH_WriteParam_06H(uint16_t _reg, uint16_t _value);
|
|
uint8_t MODH_WriteParam_10H(uint16_t _reg, uint8_t _num, uint8_t *_buf);
|
|
|
|
extern MODH_T g_tModH;
|
|
|
|
#endif
|
|
|
|
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
|