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

📄 protocol.inc

📁 单相复费率MSP430硬件时钟参考代码,MSP413设计方案
💻 INC
📖 第 1 页 / 共 2 页
字号:
#define LEN_ADDRESS_OF_REQUIRE_CALM_PLUS      4
// 设备最大正谷需量     - 4字节
#define PTL_ADDRESS_OF_REQUIRE_VALE_PLUS      ADDRESS_OF_REQUIRE_VALE_PLUS
#define LEN_ADDRESS_OF_REQUIRE_VALE_PLUS      4

// 设备最大反峰需量     - 4字节
#define PTL_ADDRESS_OF_REQUIRE_APEX_MINUS     ADDRESS_OF_REQUIRE_APEX_MINUS
#define LEN_ADDRESS_OF_REQUIRE_APEX_MINUS     4
// 设备最大反平需量     - 4字节
#define PTL_ADDRESS_OF_REQUIRE_CALM_MINUS     ADDRESS_OF_REQUIRE_CALM_MINUS
#define LEN_ADDRESS_OF_REQUIRE_CALM_MINUS     4
// 设备最大反谷需量     - 4字节
#define PTL_ADDRESS_OF_REQUIRE_VALE_MINUS     ADDRESS_OF_REQUIRE_VALE_MINUS
#define LEN_ADDRESS_OF_REQUIRE_VALE_MINUS     4

//0xB01F 最大正向需量峰平谷 和 反向峰平谷发生时间
//最大需量所有信息的起始地址
#define PTL_ADDRESS_OF_START_REQUIRE_T        ADDRESS_OF_REQUIRE_POWER_PLUS_T
//最大需量信息的记录长度
#define LEN_ADDRESS_OF_REQUIRE_T             (ADDRESS_OF_REQUIRE_VALE_MINUS_T + 6 - ADDRESS_OF_REQUIRE_APEX_PLUS_T)

// 最大正峰需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_APEX_PLUS_T    ADDRESS_OF_REQUIRE_APEX_PLUS_T
#define LEN_ADDRESS_OF_REQUIRE_APEX_PLUS_T    6
// 最大正平需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_CALM_PLUS_T    ADDRESS_OF_REQUIRE_CALM_PLUS_T
#define LEN_ADDRESS_OF_REQUIRE_CALM_PLUS_T    6
// 最大正谷需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_VALE_PLUS_T    ADDRESS_OF_REQUIRE_VALE_PLUS_T
#define LEN_ADDRESS_OF_REQUIRE_VALE_PLUS_T    6

// 最大反峰需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_APEX_MINUS_T   ADDRESS_OF_REQUIRE_APEX_MINUS_T
#define LEN_ADDRESS_OF_REQUIRE_APEX_MINUS_T   6
// 最大反平需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_CALM_MINUS_T   ADDRESS_OF_REQUIRE_CALM_MINUS_T
#define LEN_ADDRESS_OF_REQUIRE_CALM_MINUS_T   6
// 最大反谷需量发生时间 - 6字节
#define PTL_ADDRESS_OF_REQUIRE_VALE_MINUS_T   ADDRESS_OF_REQUIRE_VALE_MINUS_T
#define LEN_ADDRESS_OF_REQUIRE_VALE_MINUS_T   6


// ---------------- 电量索引区域的起始地址 -----------------
// 日记录索引号 - 1字节 ???
#define PTL_ADDRESS_OF_DAY_LOG_INDEX        ADDRESS_OF_DAY_LOG_INDEX
#define LEN_OF_DAY_LOG_INDEX                1

// 月记录索引号 - 1字节  ???
#define PTL_ADDRESS_OF_MONTH_LOG_INDEX      ADDRESS_OF_MONTH_LOG_INDEX
#define LEN_OF_MONTH_LOG_INDEX              1  


#if 1   //暂时不用
// 月信息 - 1字节 ???   
#define PTL_ADDRESS_OF_RECODE_MONTH         ADDRESS_OF_RECODE_MONTH
#define LEN_OF_RECODE_MONTH                 1
// 日信息 - 1字节 ???   暂时不用
#define PTL_ADDRESS_OF_RECODE_DAY           ADDRESS_OF_RECODE_DAY
#define LEN_OF_RECODE_DAY                   1
#endif


// ---------------- 多费率存储区域定义 --------------------

/* 多费率索引说明
p个时区,暂定12份:      【月】【日】【日时段表的索引号】
q个日时段表q<=8个:      【时段索引号】---------------------我方实现12个
m个时段m<=10个:         【时】【分】【费率索引号n<=14】----我方实现12个
n个费率n<=14:           目前最多4种:平肩谷峰

N个公共假日区,暂定12份:      【月】【日】【日时段表的索引号】
一个周休日采用的日时段表号

// 时区设置数据存储地址,每项的存储格式为:
// typedef struct tag_TimeZone
// {
//     unsigned char Month; - 时区的起始月份
//     unsigned char Day; - 时区的起始日期
//     unsigned char Index; - 日时段表的索引号 <=8
// }TimeZone_S;
// 如此的存储格式限定了时段设置不能跨零点???
//3*8

// 时段设置数据存储地址,每项的存储格式为:
// typedef struct tag_TimeSect
// {
//     unsigned char Hour; - 时段的起始小时
//     unsigned char Minute; - 时段的起始分钟
//     unsigned char Attribute; - 时段属性
// }TimeSect_S;
// TimeSect_S strTimeSect[8][10];
// 如此的存储格式限定了时段设置不能跨零点 
//3字节*最大10个时段*最大8个日时段表

一个时区可选择 12个日时段表中的一个
每个日时段表 都有12个配置好的时段,用以标记何时何种计费方式
*/

#define  XXXXXXXXXXXX   2000

#ifdef TEMPORARILY_NOT_OFFER
// 年时区数  0xC310 固定12个,不可改
#define PTL_ADDRESS_OF_YEAR_TIME_ZONE_NUM       XXXXXXXXXXXX
#define LEN_OF_YEAR_TIME_ZONE_NUM               1

// 日时段表数 0xC311 固定12个,不可改
#define PTL_ADDRESS_OF_DAY_TIMESECTION_TABLE_NUM    XXXXXXXXXXXX    
#define LEN_OF_DAY_TIMESECTION_TABLE_NUM            1

// 日时段数  0xC312  固定12个,不可改
#define PTL_ADDRESS_OF_DAY_TIMESECTION_NUM      ADDRESS_OF_PERIOD_OF_TIME_COUNT
#define LEN_OF_DAY_TIMESECTION_NUM              1

// 费率数 0xC313 固定6种 正向峰平谷 反向峰平谷
#define PTL_ADDRESS_OF_CHARGE_TYPE_NUM          XXXXXXXXXXXX
#define LEN_CHARGE_TYPE_NUM                     1

// 公共假日数 0xC314
#define PTL_ADDRESS_OF_COMM_HOLIDAY_NUM         XXXXXXXXXXXX
#define LEN_OF_COMM_HOLIDAY_NUM                 1
#endif

// 时区信息集合 max 36字节 最多12个时区  0xC32F
#define PTL_ADDRESS_OF_TIME_ZONE      ADDRESS_OF_TIME_ZONE  //时区
#define LEN_OF_TIME_ZONE              36

// 日时段表  0xC33F--0xC3EF
#define PTL_ADDRESS_OF_DAY_TIMESECTION_TABLE    ADDRESS_OF_TIME_SECT
#define MAX_DAY_TIMESECTION_NUM                 12     //最大可设定的日时段数为12个,每个对应一个时段表,国标为10个
#define MAX_CHARGE_TYPE                         12     //最多有12种费率类型,国标为8个
#define LEN_OF_EVERY_TIMESECTION_TABLE          3      //每一个时段表为3字节
#define LEN_OF_EVERY_DAY_TIMESECTION_TABLE      37     //每一个日时段表为3*MAX_DAY_TIMESECTION_NUM=36字节,其中允许设置12个时段表,每个时段表3字节共36字节
//所有日时段表共占多少字节 = LEN_OF_EVERY_DAY_TIMESECTION_TABLE * MAX_CHARGE_TYPE
#define LEN_OF_TOTAL_DAY_TIMESECTION_TABLE      432

#ifdef TEMPORARILY_NOT_OFFER
//公共假日信息集合(第N公共假日日期及日时段表号) N=12个          0xC41F
#define PTL_ADDRESS_OF_COMM_HOLIDAY        XXXXXXXXXXXX
#define LEN_OF_COMM_HOLIDAY                36

//周休日采用的日时段表号  0x41E 或者 0x42E, 最后为0xC42E
#define PTL_ADDRESS_OF_WEEKEND             XXXXXXXXXXXX
#define LEN_OF_WEEKEND                     36
#endif

// ----------------- 历史数据 ----------------------

// 之前12个月的冻结数据存储地址,每月的存储格式为:
// typedef struct tag_MonthLog
// {
//     unsigned char Year; - 年信息
//     unsigned char Month; - 月信息
//     unsigned long PlusTotalLog; - 正总电量
//     unsigned long PlusApexLog; - 正峰电量数据
//     unsigned long PlusCalmLog; - 正平电量数据
//     unsigned long PlusValeLog; - 正谷电量数据
//                      //不要unsigned long PlusShodLog; - 正肩电量数据
//     unsigned long MinusTotalLog; - 反总电量
//     unsigned long MinusApexLog; - 反峰电量数据
//     unsigned long MinusCalmLog; - 反平电量数据
//     unsigned long MinusValeLog; - 反谷电量数据
//                      //不要unsigned long MinusShodLog; - 反肩电量数据
// }MonthLog_S;
// 共占用34*12=408个字节
#define PTL_ADDRESS_OF_MONTH_LOG      ADDRESS_OF_MONTH_LOG
#define LEN_OF_EVERY_MONTH_LOG        40
#define OFF_OF_POWER_IN_MONTH_LOG     0
#define LEN_OF_MONTH_LOG              480

// 之前30天的冻结数据存储地址,每天的存储格式为:
// typedef struct tag_DayLog
// {
//     unsigned char Month; - 月信息
//     unsigned char Day; - 日信息
//     unsigned long PlusCalmLog; - 正平电量数据
//     unsigned long MinusCalmLog; - 反平电量数据
//     unsigned long PlusShodLog; - 正肩电量数据
//     unsigned long MinusShodLog; - 反肩电量数据
//     unsigned long PlusValeLog; - 正谷电量数据
//     unsigned long MinusValeLog; - 反谷电量数据
//     unsigned long PlusApexLog; - 正峰电量数据
//     unsigned long MinusApexLog; - 反峰电量数据
// }DayLog_S;
// 共占用34*30=1020个字节
#define PTL_ADDRESS_OF_DAY_LOG          ADDRESS_OF_DAY_LOG
#define LEN_OF_DAY_LOG                  780

//=================== END ==================




extern unsigned char UartState;

extern unsigned char PowerAttribute;   // 当前记量属性


////////////////////////////////////////////////////////////////
//================    函数声明区 ==================

//设置系统当前时间信息,包括年月日时分秒
extern void SetSystemTime(void);

//从数据存储体里面的指定位置ucAddr,获取指定长度ucLen的数据,存到指定的内存地址pucData开始的地方
extern void E2promRead(unsigned short addr,unsigned char *data,unsigned char len);

//向数据存储体的指定位置ucAddr,写入指定长度ucLen的数据,这些数据存放在地址pucData开始的地方
extern void E2promWrite(unsigned short addr,unsigned char *data,unsigned char len);

//系统运行状态字,江苏省通信规约里面指定的,其他规约未见有此内容???
extern unsigned char SystemRunningState(unsigned char *);

extern void E2promInit(void);
extern void RealtimeInit(void);
extern void RealtimeRead(unsigned char addr,unsigned char *data,unsigned char len);
extern void RealtimeWrite(unsigned char addr,unsigned char *data,unsigned char len);


/* 为处理通讯规约里面年月日时分秒与RTC内的索引地址反序问题 */
extern void PLT_RealtimeRead(unsigned char addr,unsigned char *data,unsigned char len);
extern void PLT_RealtimeWrite(unsigned char addr,unsigned char *data,unsigned char len);

extern unsigned char __bcd_to_char(unsigned char a);
extern unsigned short __bcd_add_short(unsigned short a, unsigned short b);
////////////////////////////////////////////////////////////////
//通信协议初始化函数
//void Protocol_Init();

//接收帧信息,底层驱动在每接收到一个字符后,调用本函数,利用全局结构strFrameInfo来记录接收数据
unsigned char Rx_FrameInfo(void);

//比较主站发来的地址信息是否正确,???AAH 和 广播地址是否可以在任何时候都被使用,而没有具体命令和类型的限制???
unsigned char CompareAddressArea(void);

void ReversalDataArray(unsigned char *pucData, unsigned char ucDataLen);

//读从站数据,函数内根据各种读操作进行了区分
unsigned char Read_SlaveStationData(void);

//写数据到从站,函数内根据各种不同的写操作,进行了区分
unsigned char Write_SlaveStationData(void);

//解析一个接收到帧结构,看是读操作、写操作、广播校时等
extern void Parse_RxFrame(void);

//为了将发送函数与底层驱动适配

//发送应答帧
void Tx_FrameInfo(void);

//检测提供的密码是否正确
unsigned char CheckPassword(unsigned char *);

////////////////////////////////////////////////////////////////


#endif

#ifdef __cplusplus
   #if __cplusplus
      }
   #endif
#endif

⌨️ 快捷键说明

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