⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uartcomm.h

📁 Modbus串口通讯协议通讯源代码
💻 H
字号:
/****************************************************************************
* 文件名:UartComm.h           (头文件)

* 功能:文件UartWaitFunc.c所调用的功能函数,采用该类函数,可使读写操作命令得以
        实现,返回给调用函数执行的结果。

* 说明:主要包括发送读,写命令,数据帧的接受与检验,以及对接受数据帧的解码
****************************************************************************/
#ifndef UART_COMM_H
#define UART_COMM_H

#define DEF_MaxOutTime   1000    //默认通讯函数返回的最长允许时间
extern INT32S g_iMaxOutTime;
#define DEF_COM1 1
extern INT32S g_iComNumber;      //默认操作为COM1
#define DEF_MaxFrameSize   50
extern INT32U g_iMaxFrameSize;  //默认最大帧长为50字节,从':'起到'0x0a'

#define TAG_COMMAND_WRITE  1    //对TAG报告写操作
#define TAG_COMMAND_READ   2    //对TAG执行读操作

typedef enum {
  ENUM_OPER_BIT = 0,        //位TAG
  ENUM_OPER_BYTE,           //字节TAG
  ENUM_OPER_WORD,           //字TAG
  ENUM_OPER_DWORD           //双字TAG
} EOperType;                //EOperType 表示操作对象的种类

typedef struct STC_TAG
{
  INT8S      cFlag;         //表示是对哪种寄存器的操作,如'M','T'等
  EOperType  enmType;
  INT32S     addr;
  INT32S     bit;           //仅当为位TAG有效时,表示为0-7的有效值
} STC_TAG;                  //STC_TAG 操作对象的具体信息


typedef struct STC_TAG_COMMAND
{
  INT8U   byTagOper;        //Tag 操作方式 TAG_COMMAND_WRITE 或 TAG_COMMAND_READ
  STC_TAG stcTag;           //Tag 定义
  INT8U   byRange;          //Tag连续操作范围
  INT8U   *pbyVal;          //Tag读取值或写入值, 为动态分配类型
} STC_TAG_COMMAND;

extern INT8U IsDecodeSuccess(const char *pszDecTag, STC_TAG *pstcTag, INT8U byTestRW);

extern INT32S SendReadBitCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr);
extern INT32S SendReadByteCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr);
extern INT32S SendReadWordCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr);
extern INT32S SendReadDWordCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr);

extern INT32S GetModbusFrame(INT8U* const pbyResult);
extern INT32S ModbusFrameCheck(const INT8U *pbyResult, INT32U len, INT8U byAddr, EUartCommand enumCmd, INT32U dwSize);


extern INT32U GetFinalBitData(INT8U* const pbyResult, const INT8U* pszFrame, INT32U len);
extern INT32U GetFinalByteData(INT8U* const pbyResult, const INT8U* pszFrame, INT32U len);
extern INT32U GetFinalWordData(INT16U* const pwdResult, const INT8U* pszFrame, INT32U len);
extern INT32U GetFinalDWordData(INT32U* const pdwResult, const INT8U* pszFrame, INT32U len);

extern INT32S SendWriteBitCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr, const INT8U *pabyInput);
extern INT32S SendWriteByteCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr, const INT8U *pabyInput);
extern INT32S SendWriteWordCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr, const INT16U *pawInput) ;
extern INT32S SendWriteDWordCommand(const STC_TAG_COMMAND *pstcTagCmd, INT8U byAddr, const INT32U *padwInput);


#endif //#ifndef UART_COMM_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -