/****************************************************************************
** 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.h"

#pragma pack (push ,1)

#ifdef _WIN32
#pragma comment(lib,"modbus.lib") 
#endif

// 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分量告警


// 预留字节
struct RBS {
    unsigned char	rs1 : 1,		// 1-通信异常
    rs2 : 1,		// self check exception
    rs3 : 1,		// signal exception
    rs4 : 1,		// power exception
    rs5 : 1,		// reserve
    rs6 : 1,		// reserve
    rs7 : 1,		// reserve 
    rs8 : 1;		// reserve
};

// 监测状态位
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
};

typedef struct {
    struct BST    btl;  // 监测单元状态
    struct RBS    brs;  // reserve
    struct BWL    bwl;  // 告警分量定义
    struct BWM    bwm;  // 告警分量定义
    struct BWH    bwh;  // 告警分量定义
    unsigned char rsv;  // reserve
}ST_BIT_MAP;

//负荷计算：
//发电状态下：P1 = 电压(V)x电流(A)x发电持续时间(秒)
//抽水状态下：P2 = 电压(V)x电流(A)x发电持续时间(秒)
//空闲状态下：P3 = 电压(V)x电流(A)x发电持续时间(秒)
//P = ((P1+P2+P3)/(主变额定容量(VA)x1000*1000*24*3600))*100%
//主变额定容量(MVA)x1000 * 1000: 是单位转为VA.
//24*3600 : 一天的秒数。


#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 */

