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

📄 device.h

📁 一个电力系统方面的ISA通讯规约
💻 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 + -