You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

244 lines
8.2 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/****************************************************************************
** File name : HTModbus.h
** Description : ISO Modbus protoclo api
** Create date : 2019.09.01
** Auther by : Liuyx
** Version info : V1.0.01
** Copyright (C) 2002-2019 xi'an huatek, Inc Co., Ltd
** Update record:
** DATE AUTHER DESC
** -------------------------------------------------------------------------
** 2019.09.01 Liuyx first build
****************************************************************************/
#ifndef __HT_MODBUS_PROTOCOL_H
#define __HT_MODBUS_PROTOCOL_H
#include "HTGlobal.h"
//#include "modbus/modbus.h"
#pragma pack (push ,1)
#ifdef _WIN32
//#pragma comment(lib,"modbus.lib")
#endif
// 设备地址
#define MODBUS_DEVICE_ADDR 0x01
// 控制参数地址定义
#define MODBUS_CONTROL_START_ADDR 0x00CF //控制参数寄存器起始地址-噪声启动信号
#define MODBUS_CONTROL_ADDR_COUNT 32 //控制参数寄存器个数
// 监测单元地址定义
#define MODBUS_MONITOR_START_ADDR 0x0000 // 监测单元寄存器起始地址
#define MODBUS_MONITOR_UNIT_COUNT 3 // 监测单元寄存器个数
// Modbus function code
#define MODBUS_FUNC_CODE3 0x03 // 3
#define MODBUS_FUNC_CODE6 0x06 // 6
#define MODBUS_FUNC_CODE16 0x10 // 16
// Modbus respone code
#define MODBUS_FUNC_CODE3_ERR 0x83 // 3异常代码
// Modbus通信方式
typedef enum{
HT_MODBUS_MODE_TCP = 1, /* modbus communication mode by tcp */
HT_MODBUS_MODE_RTU = 2, /* modbus communication mode by rtu */
HT_MODBUS_MODE_ASC = 3 /* modbus communication mode by ascii */
}HT_MODBUS_TYPE;
#define HT_MODBUS_RTU
// 监测单元定义
#define HT_UNIT_VOLTAGE 0x0001 // 母线电压单元
#define HT_UNIT_CAPACITY 0x0002 // 容性监测单元
#define HT_UNIT_ARRESTER 0x0003 // 避雷器监测单元
#define HT_UNIT_ICGE 0x0004 // 变压器铁芯监测单元
#define HT_UNIT_TEMP_HUMI 0x000A // 环境温湿度监测单元
#define HT_UNIT_SLV 0x000F // 声级振动监测单元
// 监测状态定义
#define HT_STAT_NORNAL 0x0000 // 正常
#define HT_STAT_NET_EXCEPTION 0x0001 // 通信异常
#define HT_STAT_SELF_CHECK 0x0002 // 自检异常
#define HT_STAT_SIGNAL 0x0004 // 信号异常
#define HT_STAT_POWER 0x0008 // 供电异常
// 告警分量定义
#define WARN_HIGT_BIT0_100HZ ((1<<16) & 0xff) // Bit0 = 1 原边加速度100HZ分量告警
//Bit1 = 1 原边加速度200HZ分量告警
//Bit2 = 1 原边加速度300HZ分量告警
//Bit3 = 1 原边加速度400HZ分量告警
//Bit4 = 1 原边加速度500HZ分量告警
//Bit5 = 1 原边加速度600HZ分量告警
//Bit6 = 1 原边加速度700HZ分量告警
//Bit7 = 1 原边加速度800HZ分量告警
//Bit8 = 1 原边加速度900HZ分量告警
//Bit9 = 1 原边加速度1000HZ分量告警
//Bit10 = 1 副边加速度100HZ分量告警
//Bit11 = 1 副边加速度200HZ分量告警
//Bit12 = 1 副边加速度300HZ分量告警
//Bit13 = 1 副边加速度400HZ分量告警
//Bit14 = 1 副边加速度500HZ分量告警
//Bit15 = 1 副边加速度600HZ分量告警
typedef struct {
char errcode;
char errmsg[64];
}ST_MODBUS_ERRMSG;
// 监测单元状态
typedef struct {
unsigned char rs0 : 1,// 预留位
rs1 : 1, // 预留位
rs2 : 1, // 预留位
rs3 : 1, // 预留位
rs4 : 1, // 预留位
st5 : 1, // Bit2=1 采样板3通讯异常
st6 : 1, // Bit1=1 采样板2通讯异常
st7 : 1; // Bit0=1 采样板1通讯异常
}UCTYPE;
// 监测状态位
struct BST {
unsigned char cex : 1, // 1-通信异常
cce : 1, // self check exception
sig : 1, // signal exception
pex : 1, // power exception
bt4 : 1, // reserve
bt5 : 1, // reserve
bt6 : 1, // reserve
bt7 : 1; // reserve
};
//监测告警位
struct BWL {
unsigned char p100 : 1, // 1-通信异常
p200 : 1, // self check exception
p300 : 1, // signal exception
p400 : 1, // power exception
p500 : 1, // reserve
p600 : 1, // reserve
p700 : 1, // reserve
p800 : 1; // reserve
};
//监测告警位
struct BWM {
unsigned char p900 : 1, // 1-通信异常
p1000 : 1, // self check exception
s100 : 1, // signal exception
s200 : 1, // power exception
s300 : 1, // reserve
s400 : 1, // reserve
s500 : 1, // reserve
s600 : 1; // reserve
};
//监测告警位
struct BWH {
unsigned char s700 : 1, // 1-通信异常
s800 : 1, // self check exception
s900 : 1, // signal exception
s1000 : 1, // power exception
s300 : 1, // reserve
s400 : 1, // reserve
s500 : 1, // reserve
s600 : 1; // reserve
};
// 按位定义unsigned short
struct stUSHORT{
char Low;
UCTYPE Hig;
};
typedef struct {
unsigned short usUtilType; // 监测单元类型
unsigned char ucL1; // 预留
UCTYPE ucH1; // 监测单元状态
unsigned char ucL2; // 预留
UCTYPE ucH2; // 监测单元故障
}ST_BIT_MAP;
// 控制参数
typedef struct {
// 控制参数-下设IED参数
unsigned short usEnvEnable; //13噪声启动信号
unsigned short usNeuEnable; //14中心点启动信号
unsigned short usAUpEnable; //1原边A相上侧启动信号
unsigned short usADnEnable; //2原边A相下侧启动信号
unsigned short usBUpEnable; //3原边B相上侧启动信号
unsigned short usBDnEnable; //4原边B相下侧启动信号
unsigned short usCUpEnable; //5原边C相上侧启动信号
unsigned short usCDnEnable; //6原边C相下侧启动信号
unsigned short usaupEnable; //7副边A相上侧启动信号
unsigned short usadnEnable; //8副边A相下侧启动信号
unsigned short usbupEnable; //9副边B相上侧启动信号
unsigned short usbdnEnable; //10副边B相下侧启动信号
unsigned short uscupEnable; //11副边C相上侧启动信号
unsigned short uscdnEnable; //12副边C相下侧启动信号
unsigned short usSmpProd; //15采集频率(KHz)
unsigned short usSmpInt; //16采样间隔(小时)
unsigned short usStartTime; //17起始时间
unsigned short usEnable; //18使能信号, true:yes false: no
unsigned short usEnvChannel; //19噪声传感器通道号
unsigned short usNeuChannel; //20电流传感器通道号
unsigned short usAUChannel; //21原边A相上侧传感器通道号
unsigned short usADChannel; //22原边A相下侧传感器通道号
unsigned short usBUChannel; //23原边B相上侧传感器通道号
unsigned short usBDChannel; //24原边B相下侧传感器通道号
unsigned short usCUChannel; //25原边C相上侧传感器通道号
unsigned short usCDChannel; //26原边C相下侧传感器通道号
unsigned short usauChannel; //27副边A相上侧传感器通道号
unsigned short usadChannel; //28副边A相下侧传感器通道号
unsigned short usbuChannel; //29副边B相上侧传感器通道号
unsigned short usbdChannel; //30副边B相下侧传感器通道号
unsigned short uscuChannel; //31副边C相上侧传感器通道号
unsigned short uscdChannel; //32副边C相下侧传感器通道号
}ST_MODBUS_CONTROL;
typedef struct {
unsigned short useqid; // 为此次通信事务处理标识符一般每次通信之后将被要求加1以区别不同的通信数据报文
unsigned short usprotol; // 协议标识符,00 00为modbus协议
unsigned short uslength; // 数据长度,用来指示接下来数据的长度,单位字节;
unsigned char bdevid; // 设备地址,应答报文要求与先前对应的请求保持一致,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头
unsigned char bfunc; // 功能码此时代码03为读取保持寄存器数据
}ST_MODBUS_HEADER;
typedef struct {
ST_MODBUS_HEADER stHeader; // 包头
unsigned short usbeginaddr; // 首个寄存器地址/索引
unsigned short uscount; // 寄存器的个数 RTU格式 无需CRC
}ST_REQ_READ_REGEDIT_FUNC3;
// 功能代码3应答报文格式
typedef struct {
ST_MODBUS_HEADER stHeader; // 包头
unsigned char blength; // 读取的字节数(功能代码3返回的每个寄存器的数值为2字节)
unsigned short *pusVal; // 寄存器数据 无需CRC
}ST_RSP_READ_REGEDIT_FUNC3;
typedef struct {
ST_MODBUS_HEADER stHeader; // 包头
unsigned short usbeginaddr; // 首个寄存器地址/索引
unsigned short uscount; // 寄存器的个数 RTU格式 无需CRC
unsigned char blen; // 发送字节个数
}ST_REQ_WRITE_REGEDIT_FUNC16;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void *thread_modbus_service_proc(void *arg);
#ifdef __cplusplus
}
#endif
#pragma pack (pop)
#endif /* end __HT_MODBUS_PROTOCOL_H */