📄 device.h
字号:
// Device.h: interface for the CDevice class.
//
//////////////////////////////////////////////////////////////////////
// create : Benny 2001.7.25
#if !defined(AFX_DEVICE_H__89A09701_6D19_11D4_B872_00E04C49B0A7__INCLUDED_)
#define AFX_DEVICE_H__89A09701_6D19_11D4_B872_00E04C49B0A7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "nsIRdbTable.h"
#include "Premapi.h"
#include "nsCOMPtr.h"
#include "Mandb.h"
#define DEVICENAMELEN 32 // 设备名长度
#define COMSETTINGLEN 32 // 串口设置字符串长度
#define PROTOCOLNAME "ISA" // 规约名
#define TIMER_ELAPSE 800 // 轮询时间
#define PROTOCOL_INIFILE "ISA.ini" // 该规约的配置文件
#define CHANNEL_IDLE_TIME 300 // 串口空闲时间
#define MINFRAMELEN 7 // 上装报文最短长度
// 特殊报文
#define ISA_ACK 0x06 // 接受正确
#define ISA_NAK 0x15 // 接收不正确
// 下行报文
#define ISA_C1 0x48 // 查询命令
#define ISA_C2 0x40 // 申请定值
#define ISA_C3 0x53 // 申请定值
#define ISA_C4 0x4D // 申请模拟量
#define ISA_C5 0x4F // 申请信号复归
#define ISA_C6 0x54 // 修改定值命令
#define ISA_C7 0x04 // 修改时间
// 上行报文
#define ISA_R1 0x40 // 事件上送
#define ISA_R2 0x53 // 定值上送
#define ISA_R3 0x4D // 模拟量上送
#define ISA_R4 0x51 // 自诊断量上送
#define ISA_R5 0x54 // 定值返校信息
// 报文结构
#define ISA_SYNCCODE0 0
#define ISA_SYNCCODE1 1
#define ISA_SYNCCODE2 2
#define ISA_SYNCCODE3 3
#define ISA_STARTCODE 4
#define ISA_ADDR 5
#define ISA_CODE 6
#define ISA_LENGTH 7
#define ISA_DATA 8
// 报文特殊字符
#define ISA_START_CODE 0x02
#define ISA_END_CODE 0x03
// 事件类型
#define ISA_TYPE_ACC 0 // 故障事件
#define ISA_TYPE_PROT 1 // 保护报告
#define ISA_TYPE_ANA 2 // 模拟量
#define ISA_TYPE_DZH 3 // 定值
#define ISA_TYPE_DIAG 4 // 故障报告
// 显示类型
#define ISA_FLOAT 0
#define ISA_BINARY 1
#define ISA_STRING 2
// 设备状态
typedef enum
{
STATE_FREE,
STATE_REQ,
STATE_ASKVALUE,
STATE_SIGNALRESET,
STATE_ASKSIMULATION,
STATE_CHECKTIME,
STATE_CHANGEVALUE,
STATE_ACKCHANGEVALUE,
STATE_NAKCHANGEVALUE,
STATE_ASKTYPE,
STATE_ACK_R,
} DEVICESTATE;
struct DZTableFieldInfo
{
SWORD nSQLType;
TCHAR* strName;
};
static struct DZTableFieldInfo DZFieldInfos[] =
{
{SQL_SMALLINT, "代码" },
{SQL_VARCHAR, "定值名称" },
{SQL_VARCHAR, "类型" },
{SQL_VARCHAR, "定值" },
{SQL_VARCHAR, "新定值" }
};
static struct DZTableFieldInfo ANAFieldInfos[] =
{
{SQL_SMALLINT, "代码" },
{SQL_VARCHAR, "名称" },
{SQL_VARCHAR, "值" }
};
#define DZFIELDCOUNT ( sizeof(DZFieldInfos) / sizeof(struct DZTableFieldInfo) )
#define ANAFIELDCOUNT ( sizeof(ANAFieldInfos) / sizeof(struct DZTableFieldInfo) )
#define SENDIDLE 0
#define SENDING 1
class CDevice : public CObject
{
public:
CDevice();
virtual ~CDevice();
public:
UINT m_uCTTimer; // 对时时间
UINT m_uWait; // 超时三次后该设备的轮询时间
UINT m_uTimeOutCount; // 超时计数器
DEVICESTATE m_nState; // 设备状态
DEVICESTATE m_nCommand; // 设备命令
DEVICESTATE m_nLastReqCommand; // 上一次查询命令
HANDLE m_hComPort; // 串口句柄
BYTE m_btAddr; // 设备地址(设备编号)
BYTE m_btSendState;
public:
int m_nCount;
BOOL SetValueTable(BYTE btCode,WORD wValue);
int CheckTime( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 对时
int SignalReset( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 信号复归
int AskValue( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 召定值
int ChangeValue( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 修改定值
int AckChangeValue( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 确认修改定值
int NakChangeValue( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 放弃修改定值
BOOL CheckProtParam( PREMDZHPARAM* pDZHParam ); // 检查保护命令参数
BOOL CheckRecvFrame( BYTE* pData, int nLength ); // 检查接收报文
void OnTimer(); // 定时器
void OnTimeOut(); // 超时处理
void OnCommOK(); // 通报设备通信恢复
void OnCommError(); // 通报设备通信中断
void OnInit( DBHANDLE dbHandle ); // 初始化
void ProcessSend(); // 发送命令
void ProcessReceive( BYTE* pData, int nLength ); // 接收报文
int AskProtectAna(PREMDZHPARAM* pDZHParam, UINT uMsg);
void GetFieldInfo( RDBFIELDINFO& RdbFieldInfo, DZTableFieldInfo* pInfo );
nsIRdbTable* g_pTable ;
BYTE m_btArea; // 定值区号
WORD m_wParent;
protected:
PREMDZHPARAM m_DZHParam; // 下发保护命令参数
CString m_szName; // 设备名称
CString m_szParent; // 父设备名称
CString m_szType;
BOOL m_bComm; // 当前设备通讯情况
UINT m_uDZHMsg; // 下发保护命令消息
// 父设备地址(设备编号)
BYTE m_btCPU; // 定值CPU号
BYTE m_btOrder; // 报文序号
// DIGITALVALUE m_DigValue[32];
protected:
BOOL InitProtParam( PREMDZHPARAM* pDZHParam, UINT uMsg ); // 初始化保护参数
void GetDeviceType(); // 得到设备类型
void DZHCallBack( int nResultCode ); // 通报定值执行结果
void SendCommand( BYTE btCode ); // 发送命令
WORD CheckSum( BYTE* pData, int nLength ); // 校验和
void ProcessAck( BYTE* pData, BYTE btLength );
void ProcessNak( BYTE* pData, BYTE btLength );
BOOL ProcessR1( BYTE* pData, BYTE btLength );
BOOL ProcessR2( BYTE* pData, BYTE btLength );
BOOL ProcessR3( BYTE* pData, BYTE btLength );
BOOL ProcessR4( BYTE* pData, BYTE btLength );
BOOL ProcessR5( BYTE* pData, BYTE btLength );
BOOL ProcessEventWord( WORD wEvent, BYTE btType,CString &szInfo );
BOOL SetDZTable(BYTE btCode,WORD wValue);
int SendTableMessage( int nResultCode );
void ProcessAcc();
void ProcessTime( BYTE*& pData, EVENTITEM& EventItem );
};
#endif // !defined(AFX_DEVICE_H__89A09701_6D19_11D4_B872_00E04C49B0A7__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -