📄 cjq.h
字号:
//*[]======================================================
//Copyright(c)2007, 青岛东软电脑技术有限公司电子产品事业部
//All rights reserved
//
//文件名称: plc485m.h
//文件标识:
//摘要: 定义变量,引脚、划分内存
//[]=======================================================
//1. Port Define
//; Notes: *
//; ----------\/----------- *
//; --|1:VPP PGD/RB7:28|-- *
//; --|2:RA0 PGC/RB6:27|-- *
//; _Show485(O) --|3:RA1 RB5:26|-- RXD(I) *
//; _OnOff(I) --|4:RA2 RB4:25|-- IrfTXD(I) *
//; --|5:RA3 RB3:24|-- BATT(I) *
//; --|6:RA4 RB2:23|-- SDA(X) *
//; --|7:RA5 16F76 RB1:22|-- SCL(O) *
//; --|8:VSS RB0:21|-- WP(O) *
//; --|9:CLKIN VDD:20|-- *
//; --|10:CLIOUT VSS:19|-- *
//; PLCRXD(O) --|11:RC0 RC7:18|-- _485RXD(I) *
//; _IrfRXD(O) --|12:RC1 RC6:17|-- _485TXD(O) *
//; _Irf38KHz(O) --|13:RC2 RC5:16|-- SET(I) *
//; RTCSCL(O) --|14:RC3 RC4:15|-- RTCFMSDA(X)*
//; ----------------------- *
//; *
//**********************************************************
// #define DEBUG ON
//限定性常量定义
#define c_AmrSpaceTime 0xff //默认抄表时间间隔10分钟,只能取值10,15,30,60,0xff
#define c_FreezeData 0x25 //BCD码,默认例日25号零点
#define c_VER 0x50u //版本号50
#define c_FalseCont 0x03u //多次抄表循环不成功删除该表,c_FalseCont*c_AmrReCont
#define c_AmrReCont 0x02u //单次抄读失败重复次数!!
#define c_DataFCont 20 //内存数据有效时间 单位S
#define c_FrameOutT 80u //等待帧超时,80*10=800ms秒
#define c_ByteOutT 20u //字节间超时,20*10=200ms
#define c_BuffClrT 250u //只要2.5秒钟内没有动作就清485缓冲区,并停止所有任务
#define c_MaxMeterAmount 32 //最大不能超32只表
#define c_RetCont 0x02 //内存数据可直接上传次数
#define c_eepage 32 //EEPROM page页大小
// 1.1: PORTA
#define _Show485 RA1
#define _OnOff RA2
// 1.2: PORTB
#define _TRISFMSDA TRISB2
#define _RXD RB5 //PLC TO MCU
#define _IrfTXD RB4 //infrared to mcu
#define _BattLvp RB3
#define _FMSDA RB2
#define _FMSCL RB1
#define _FMWP RB0
// 1.3: PORTC
#define _RTCTRISSCL TRISC3
#define _RTCTRISSDA TRISC4
#define _PLCRXD RC0 //MCU TO PLC
#define _IrfRXD RC1 //mcu to infrared
#define _Irf38KHz RC2
#define _RTCSCL RC3
#define _RTCFMSDA RC4
#define _Set RC5
#define _485RXD RC6 //mcu to 485
#define _485TXD RC7 //485 to mcu
//2. 全局变量,bank0
unsigned char v_IntRunFlag;
unsigned char v_ExtRunFlag;
unsigned char v_frame_mark;
unsigned char v_msCont; //10ms计数器
unsigned char v_ssCont; //秒计数器
unsigned char v_mmCont; //分
unsigned char v_AmrSpace; //抄表间隔
unsigned char v_DirRetCont; //暂存数据计数器,10后销毁
unsigned char v_hhTask; //开始小时任务标志,0~23表示开始对应小时任务,0xff没有任务
unsigned char v_FreezeTask; //开始冻结任务标志,1~31对应天,0为没有任务
unsigned char v_RecPort;
unsigned char v_FrameC;
unsigned char v_RetCback; //暂存直接上传数据控制字
unsigned char v_FrameL;
unsigned char v_DI0; //DI0 DI1前后位置不能颠倒
unsigned char v_DI1;
unsigned char v_FrameC485;
unsigned char v_FrameL485;
unsigned char v_DI0485; //DI0 DI1前后位置不能颠倒
unsigned char v_DI1485;
unsigned char v_485len; //485接收专用
unsigned char v_PLClen; //载波接收专用
unsigned char v_OnOffSta; //开盖状态 1:开箱,0:关闭
#define c_OnSta 0x01
#define c_OffSta 0x00
bit _SysCheck; //系统检测标志
bank1 unsigned char *p_BuffPLC;
bank2 unsigned char *p_Buff485;
//结构体定义
typedef struct testtask //测试指令
{
unsigned char start; //开始自动测试任务
unsigned char Sta; //任务状态,完成,进行中,空闲
//测试类任务要抄读多次,所以有任务状态: 执行中
unsigned char serial; //当前任务电表序号,序号达到最大,任务结束
unsigned char MeterMark; //表类型
unsigned char MeterMarkSr; //表类型序号
unsigned char ReadItem; //抄读项
unsigned char DI0; //DI0, DI1
unsigned char DI1;
unsigned char reCont; //失败时重复次数
};
typedef struct amrtask //自动抄表指令
{
unsigned char start; //开始自动抄表任务
unsigned char Sta; //单只表的任务状态, 进行中,空闲
// 以上两字节结合判断是否开始下一字节抄读
unsigned char serial; //当前任务电表序号,序号达到最大,抄表任务结束
unsigned char DI0; //DI0, DI1,由表特征字得到 //
unsigned char DI1;
unsigned char reCont; //失败重复次数
unsigned char MeterMark;
unsigned char ReadItem; //抄读项,主要是不支持集合命令时
// 标示出需要抄读的分项,位定义同特征字
//抄完一项,该位清零,字节==0,完成
bank2 unsigned char *p_consume; //保存电量指针,分项抄读时会用到
};
typedef struct rt_task //实时任务,主要是指令透传
{
unsigned char Sta; //是否有实时任务c_Free:没有,c_TaskRun:有
unsigned char Port; //回应端口
unsigned char Ctr;
unsigned char len;
unsigned char DI0;
unsigned char DI1;
unsigned char FeCont; //fe个数
};
typedef struct upBuffMark //上行缓冲区状态结构
{
unsigned char RetCont; //标示直接上传次数
unsigned char otc; //字节超时记数器out time cont
unsigned char len; //当前缓冲区中数据长度
unsigned char Sta; //标示当前缓冲区状态,空闲,接受指令中,接收完成,发送指令中
bank1 unsigned char *ptr; //指向当前操作字节地址(发送接收时有效)
};
typedef struct downBuffmark //下行缓冲区状态
{
unsigned char feCont; //485发送前导符的个数
unsigned char otc; //485接收超时记数器out time cont
unsigned char goal; //标示当前缓冲区数据用途:透传,测试,抄表,交互命令
unsigned char len; //当前缓冲区中数据长度
unsigned char Sta; //标示当前缓冲区状态,空闲,接受指令中,接收完成,发送指令中
bank2 unsigned char *ptr; //指向当前操作字节地址(发送接收时有效)
};
bank1 struct testtask TestTask; //测试表类型
struct rt_task RtTask; //实时抄表任务
struct amrtask AmrTask; //自动抄表任务,优先级低
struct upBuffMark BuffPLCMark;
struct downBuffmark Buff485Mark;
//结构参量常量取值定义
#define c_Free 0x00u //空闲,任务空闲,缓冲区空闲
//Buff...Sta,缓冲区状态
#define c_Send 0x11u //发送中
#define c_WaitRec 0x12u //等待接收
#define c_RecNow 0x13u //接收中
#define c_RecEnd 0x14u //接收完成
#define c_RecOutT 0x15u //超时无数据
//Buff485Mark.goal,缓冲区使用目的
#define c_Test 0x21u //485表类型测试
#define c_DirReturn 0x22u //透传
#define c_AMR 0x23u //抄表
//任务常量
#define c_TaskFree 0x00 //任务空闲
//..Tast.Start 自动任务任务性质,单只还是全部
//测试任务: 只对全部电表,因为一次可能填加多只电表
// 单只: 删除一只电表时可能开始单只表的测试任务,特征字序号不从零开始
// 测试完序号不加,完成整个测试任务
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -