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

📄 class.h

📁 一个完整的RTU程序源码,用DOS平台,支持16串口,在天津港用的很多,8个规约103,modbus,cdt,1801,u4f
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _CLASS_H_
#define _CLASS_H_

#include "common.h"

class CWindows {
	private:
		char pageno;
		char pagelineno;
		char pagedotno;
		keyin_buf_t keyin_buf;
	public:
		char mainmenuno;            //set main menu item no to the first
		char itemmenuno;            //set sub menu item no to the first
		char oldmainmenuno;
		char olditemmenuno;
		BOOLEAN item_flag;        //if a menu is opened
		BOOLEAN window_flag;      //if a window is opened
		BOOLEAN clr_brand_flag;
		BOOLEAN siginput;			// signal of input data
		BOOLEAN sigcreat;			// signal of create window
		BOOLEAN sigcursor;			// signal of cursor move
		check_time_t check_time;
	public:
		void initial();
		void DrawBackGround();
		void PopSubMenu(INT8U menuno);
		void ClrSubMenu(INT8U menuno);
		void DrawMainMenu();
		void MessageBox(INT8U *s);

		void parakeyin(INT8U key);
		void KeyDrop();
		void ResetKeyBuf();
		void DispKeyInput(INT8U x, INT8U y, INT8U len, INT8U color, BOOLEAN mask);

		INT16U ProcessWord();
		int ProcessInt();
		void mainmenucheck();
		void SubMenuCheck();
		void mainenter();
		void mainltarr();
		void mainrtarr();
		void mainuparr();
		void maindnarr();
		void mainesc();
		void mainf2();
		void mainf4();
		void mainf5();
		void mainf6();
		void mainf7();
		void mainf9();
		void mainpgup();
		void mainpgdn();
		void scrollup(INT8U topx, INT8U topy, INT8U endx, INT8U endy);

		void PassWindow(BOOLEAN *flag);
		void WinMessage();
		void SetMessage();
		void hardset();
		void winportset();
		void datasourceset();
		void protocolpar();
		void doykopinfo();
		void doykop();
		void checktime();
		void showwindow();
		void boot_record();

		void ycdefine();
		void ymdefine();
		void yxdefine();
		void ykdefine();

		void update_yx_info();
		void update_yc_info();
		void update_ym_info();
		void update_port_info();

		void yxinfo();
		void ycinfo();
		void yminfo();
		void portinfo();
		void boot_info();

		void UpdatePopMenu();
		void UpdateMainMenu();
		void UpdateInfo();
		void UpdateClock();
		void UpdateWindow();

		void between_check(INT16U small, INT16U big, INT16U *ret);
		void between_check(INT8U small, INT8U big, INT8U *ret);
		void between_check(int small, int big, int *ret);
		void between_check(BOOLEAN *ret);

		BOOLEAN IsPolling(INT8U portno);
};

class CYx {
	private:
		INT16U ioport;
		BOOLEAN first_board_sample;
	public:
		void init();
		void boardyxget();
		void yxgetdeal();
};

class CYm {
	private:
		INT16U ioport;
		BOOLEAN first_board_sample;
	public:
		void init();
		INT8U Get8Ym(INT8U address, INT8U orderno);
		void boardymget();
		void ymdeal();
};

class CYc {
	public:
		INT16U ioport;
		INT16U adport;
		INT8U intno;
	public:
		void init();
		void selectayc();
		void startayc();
		void ycdeal();
};

class CYk {
	private:
		INT16U ioport;
	public:
		void init();
		BOOLEAN ykselect();
		void boardyk();
		void boardykreset();
		void portyk();
		void doyk();
};

// the base class of each protocol
class CProtocol {
	public:
		INT8U myportno;
	public:
		CProtocol() {}
		CProtocol(INT8U portno);
		~CProtocol() {}

		int get_yc_dot(INT16U dotno);
		INT16U get_yx_16dot(INT16U dotno);
		INT32U get_ym_dot(INT16U dotno);
		INT16U get_yx_dot(INT16U dotno);
		void yx_update_db(INT16U dotno, INT16U value);
		void yc_update_db(INT16U dotno, INT16U value);
		void ym_update_db(INT16U dotno, INT32U value);
		INT8U get_crc8_code(INT8U *buf, INT8U len);
		INT16U get_crc16_code(INT8U *msg, INT8U len);
		INT8U checksum(INT8U *buf, INT8U len);
		void ProtocolProcessYX(int orderno, INT8U val);
		virtual void deal() {};
		virtual void master_send() {};
		virtual void master_receive() {};
};

class CMasterProtocol: public CProtocol {
	public:
		INT16U *pyc_tbl;
		INT16U *pyx_tbl;
		INT16U *pym_tbl;
		INT16U *pyk_tbl; // query table in this port

		int yc_num;
		int yx_num;
		int ym_num;
		int yk_num; // info amount in this port

	public:
		CMasterProtocol() {}
		CMasterProtocol(INT8U portno);
		~CMasterProtocol();
};

typedef enum QueryStatus_t {QUERY=0,ANSWER=1,BOARDCAST=2};
class CMasterPollingProtocol: public CMasterProtocol {
	public:
		INT8U DevStartAddr;
		INT8U DevEndAddr;
		QueryStatus_t QueryStatus;
		INT8U rece_end;
		INT8U *LINK_flag;
		BOOLEAN *isLink;
		INT8U *fail_count;
		INT8U dev_num;
		INT8U CurrentQueryAddr;
		INT32U QueryGap;
		INT32U GapTimer;
	public:
		CMasterPollingProtocol() {}
		CMasterPollingProtocol(INT8U portno);
		~CMasterPollingProtocol();
		void SetQueryGap(INT32U TimerGap);
		virtual void PreProcess() {}; // to do some works before query
		void CommunicateProcess();
		void deal();
};

class CNbb: public CProtocol {
	public:
		INT8U frame_count;	// counting frame word send
		INT8U packet_count;	// counting packet word (6 byte) send
		INT8U frame_type, frame_length;
		BOOLEAN isFrameHead;		// indicate send head or packet word
		INT8U YxHead,YcHead,YmHead; // the leader function code
		INT8U source_add, dest_add;
		INT8U len_a, len_b, len_c, len_d1, len_d2, len_e;
		INT8U FrameInsertNum; // insert frame length
		BOOLEAN sync_flag, ControlFlag;			// rece in sync flag
		INT8U RecvIndex; // receive buf pointer index the free buf beginning
		INT8U soe_count;
		BOOLEAN soe_sending; // keep current sending soe because need 3 times
		soe_record_t current_soe; // when preset err need to return a failure check
		yk_preset_err_t yk_preset_err;
		INT8U recbuf[NBB_RECE_BUFSIZE];
		static const INT8U nbb_sync_code[6];
		static const INT8U FRAME_A;
		static const INT8U FRAME_B;
		static const INT8U FRAME_C;
		static const INT8U FRAME_D1;
		static const INT8U FRAME_D2;
		static const INT8U FRAME_E;

	public:
		CNbb() {};
		CNbb(INT8U portno);
		~CNbb() {};
	public:
		INT8U get_frame_type(INT8U count);
		INT8U get_frame_length(INT8U type);
		BOOLEAN PacketSend(INT8U type, INT8U length);
		BOOLEAN FrameYCPacketSend(INT8U FrameType,INT8U length);
		BOOLEAN FrameD1PacketSend(INT8U length);
		BOOLEAN FrameD2PacketSend(INT8U length);
		BOOLEAN FrameEPacketSend(INT8U length);
		BOOLEAN FrameYCAssemble(INT8U *buf, INT8U length, INT8U FrameType);
		BOOLEAN FrameD1Assemble(INT8U *buf, INT8U length);
		BOOLEAN FrameD2Assemble(INT8U *buf, INT8U length);
		BOOLEAN FrameEAssemble(INT8U *buf, INT8U length);
		BOOLEAN BWPacketSend(INT8U FrameType, INT8U length);
		BOOLEAN YkRetPacketSend(INT8U FrameType, INT8U length, BOOLEAN preset_noerr);
		BOOLEAN isFrameOver(INT8U count, INT8U length);
		BOOLEAN packet_crc_check(INT8U *ptr);
		void yk_preset(INT8U *ptr);
		void yk_cancel(INT8U *ptr);
		void yk_execute(INT8U *ptr);
		void time_setting(INT8U *ptr);
		void identify_packet(INT8U *ptr);
		void master_send();
		void master_receive();
		void deal();
};

class CDISA3: public CNbb {
	public:
		CDISA3() {};
		CDISA3(INT8U portno);
		~CDISA3() {};
	public:
		BOOLEAN FrameYCAssemble(INT8U *buf, INT8U length, INT8U FrameType);
		BOOLEAN BWPacketSend(INT8U FrameType, INT8U length);
		BOOLEAN YkRetPacketSend(INT8U FrameType, INT8U length, BOOLEAN preset_noerr);
		BOOLEAN PacketSend(INT8U type, INT8U length);
		BOOLEAN FrameYCPacketSend(INT8U FrameType,INT8U length);
		void master_send();
		void deal();
};

class CIec103M: public CMasterPollingProtocol {
	public:
		INT8U *FCB;
		INT8U *ACDFlag;		// class1 flag
		BOOLEAN *isGI;	// general interration indicate
		INT8U *LastCommand;						// record last command
		INT16U send_cycle;						// cycle counter
		static const INT8U RESET_CU;
		static const INT8U CALL_CLASS1;
		static const INT8U CALL_CLASS2;
		static const INT8U CALL_ALL;
	public:
		CIec103M() {};
		CIec103M(INT8U portno);
		~CIec103M() {};
	public:
		void master_receive();
		void master_send();
		void process_fixed(INT8U *buf);
		void process_var(INT8U *buf);
		void process_asdu1(INT8U *buf);
		void process_asdu2(INT8U *buf);
		void process_asdu9(INT8U *buf);
		void process_asdu205(INT8U *buf);
		void reset_cu();
		void query_class1_data();
		void query_class2_data();
		void send_asdu6();
		void send_asdu7();
		void send_asdu20_yk();
		void PreProcess();
};

class CDCModbus: public CMasterPollingProtocol {
	public:
		INT8U station_add;		// this station address
		INT8U send_add;
		INT8U currentCMD;			// current command indicate
		INT8U askbuf[MODBUS_SEND_BUFSIZE];
		INT8U recbuf[MODBUS_RECE_BUFSIZE];
		INT8U dcmauchhi[256];

⌨️ 快捷键说明

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