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

📄 datatype.h

📁 组态王驱动的实例,这个例子与亚控的例子有很大不同
💻 H
字号:
#ifndef  __DATATYPE_H__
#define  __DATATYPE_H__


/////////Device Type////////////////////
#define  SERIAL_DEV_TYPE    0x00
#define  BOARD_DEV_TYPE		0x01


#define  RX_QUEU	1024
#define  TX_QUEU	512
#define  MAX_SEND_BYTES 0x180 //384

#define  MAX_PACKET_NUMER  512  //包队列中能支持的最大包数目
#define  RM_FLAG   0
#define  RM_CHAR   1

#define  COM_PRO  3475
#define  VERSION1 1023

#define  TIME_INTERVAL  10

//Packet Type
#define  PT_READ		0
#define  PT_WRITE		1
/*
#define  MAX_FLOAT      9999999999.00
#define  MIN_FLOAT      0.000000001
#define  MAX_STRING_LEN 80   //DDE传输中所支持的最大字符串长度.
*/

////MACRO of character.
/*
#define   NUL	0x00
#define	  SOH	0x01
#define   STX   0x02
#define   ETX	0x03
#define   EOT	0x04
#define   ENQ	0x05
#define   ACK	0x06
#define   DLE	0x10
#define   NAK	0x15
*/
//MACRO of datatype.
#define  FLOAT_TYPE       1
#define  LONG_TYPE        2
#define  STRING_TYPE      3
#define  DISC_TYPE        4

//Macro of Datatype in device //Old  Unsurpport in Later version.
//#define DEV_BIT_TYPE   0
//#define DEV_INT_TYPE   1
//#define DEV_LONG_TYPE  2
//#define DEV_FLOAT_TYPE 3

////MACRO of character.
/*#define   NUL	0x00
#define	  SOH	0x01
#define   STX   0x02
#define   ETX	0x03
#define   EOT	0x04
#define   ENQ	0x05
#define   ACK	0x06
#define   DLE	0x10
#define   NAK	0x15
*/
//AD filter mode
#define  FILTER_NO    0

typedef  ATOM  STR;
union DDEValue
{
	long  lValue;
	float fValue;
	BOOL  bValue;
	//char  c[4];
	STR	  sValue;
};

union PlcValue
{
	BOOL  bitVal;
	BYTE  byteVal;
	short intVal;
	UINT  uintVal;
	WORD  bcdVal;
	long  longVal;
	float floatVal;
	DWORD longbcdVal;
	STR	  strVal;
} vv;

#define BIT_DATATYPE       0x01
#define BYTE_DATATYPE      0x02
#define INT_DATATYPE       0x04
#define UINT_DATATYPE      0x08
#define BCD_DATATYPE       0x10
#define LONG_DATATYPE      0x20
#define LONGBCD_DATATYPE   0x40
#define FLOAT_DATATYPE     0x80
#define STRING_DATATYPE    0x100

typedef struct 
{
	int    nFlag[2];//驱动程序配置文件特征字
	char   sComment[8];//简短说明
	int    nVersion[2];//版本号
	int    nVarNum;    //变量数
	int    nCommConfig;//是否记录串口配置
	int    reserved[24];//预留48字节
}CFG_FILE_HEAD;
#define  COMM_CONFIG_OFFSET   256				//Config Part1 offset. ----- Store Comm Config.
#define  VAR_CONFIG_OFFSET    512				//Config Part2 offset. ----- Store Var  Config.

typedef struct
{
	char     szDevName[32];   // 设备名称
	char     szRegister[128]; // 寄存器变量的名称
	short    nDataType;       // 数据类型
//	short    nFrequency;
	short    nAccessMode;     // 访问类型 读写
	short    reserved[2];
}MiniDbItem;
typedef  MiniDbItem    MINIDBITEM;

struct CommConfig
{
    BYTE  bId;
    UINT  nBaudRate;
    BYTE  bByteSize;
    BYTE  bStopBits;
    BYTE  bParity;

	char  evtChr;
	WORD  wRxMode;

	UINT  nTimeOut;

	WORD  reserved[5];
};
typedef CommConfig  COMM_CONFIG;


struct ComDevice//size: 54
{
	short nFlag;//为1,表示此位置有串口,为-1,无。
	WORD  deviceKind;//此值为1,表示串行设备
	char  deviceName[32];//逻辑名称=={COM1,COM2...}
	int   baudRate;//波特率
	short dataBits;//数据位
	short stopBits;//停止位
	short parity;//校验方式
	short timeOut;//超时
	short failTimes;//失败次数
	short retryInterval;//尝试恢复间隔
	short isRs232;//是RS232通讯还是RS485
};//Wang Mingyu Added in 98/10/12.


typedef struct CommData
{
	char  szProtocolName[16];//该串口的协议名
	CLSID clsidProtocol;	 //该串口的协议ID
	IUnknown  *pComProtocol;
	CPtrList  PacketList;	//包队列
}COMM_DATA;


#define   MAX_DEV_LEN   64

typedef struct _DevAddr
{
	UINT	nDevAddr;
	char	sDevAddr[MAX_DEV_LEN];
}DEVADDR, * PDEVADDR;

typedef struct Device
{
	char	szDevName[32];
	char	szDevAddr[32];
	DEVADDR devAddress;

	int		nCommId;
	int		nFailTime;
	BOOL	bBad;
	UINT	nTimerCount;
}DEVICE, * PDEVICE;

typedef struct var
{                 
	WORD wVarID;      			// 组态王中变量ID 
   	WORD wVarType;      		// 组态王变量类型
   	char szVarName[32]; 		// 组态王变量名称 
   
   	short  nDeviceIndex;		// PLC索引        
	short  nUnitNo;				// PLC地址
	DEVADDR *pDevAddr;			// 设备地址指针,新添内容
   	
	char   *pszRegName;			//寄存器名称
	
	short  nRegType;     		// 寄存器类型     
	short  nSubType;			// 类型子码
	short  nSubType1;
	short  nSubType2;			// 类型子码2
   	short  nNo;          		// 地址            

   	short  nDataType;    		// 数据类型 

   	short  nAccessMode;      	// I/O Mode.

   	long   nFrequency;   		// 采样频率(基频的倍数)
   	long  nTimerCount;  		// 采样计数器
    
	CWinThread* pComThread;     // 该变量所在的线程
	DDEValue   maxRaw;			// 最大原始值
	DDEValue   minRaw;			// 最小原始值
	short      bConvertion;		// 转换方式
	short      isBad;			//设备坏
	short      isUnvalid;		//变量无效
	//   	WORD   unused[2];			//no used
}PLCVAR;
typedef  PLCVAR * PPLCVAR;

typedef  unsigned short USHO;
#define  PS_SOP  0x0000
#define  PS_EOP  0x8000

//协议处理核心
typedef struct Packet 
{ 
	short    nDeviceIndex;  //-----------//	
	short    nUnitNo;       // 设备地址  |
	DEVADDR *pDevAddr;      // 设备地址指针, 新添内容
	char    *pszDevName;    // 设备名称  // 
	char    *pszRegName;    // 寄存器名称
	short    nRegType;      // 类型码
	short    nSubType;      // 子类型码
	short    nSubType1;
	short    nSubType2;     // 子类型码(附加)
	int      nStartNo;      // 起始偏移量
	int      nEndNo;        // 结束偏移量
    
	short    nPacketType;     // Read, write, something else.
	//WORD   wState;		// Packet state.
	CPtrList varList;       // store 'struct id_no'
}PACKET;
typedef PACKET * PPACKET;

typedef struct IdNo
{
	WORD wVarId;
//	WORD wVarType;

	WORD wNo;             /* 变量对应的寄存器号? */
	WORD wDataType;

	BYTE Special[4];

	PlcValue  plcValue;
}ID_NO;

//////////////////////////
typedef  struct reginfo
{
	char  sRegName[8];  //寄存器名

	int   nLowIndex;
	int   nUpperIndex;

	WORD  wDataType;	//所支持的基本数据类型
	int   nData;
}REG_INFO;
#define  MAX_REG_NUM   256
//////////////////////////

//used for COM
#define  RF_BAD_REGISTER     1
#define  RF_NO_OVERFLOW_LOW  2
#define  RF_NO_OVERFLOW_HIGH 3

#define  RF_INVALID_DATATYPE 0x8001

#endif

⌨️ 快捷键说明

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