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

📄 link_unbalance_slave.h

📁 101规约从站库我们用100人年开发的通信规约程序库
💻 H
字号:
#ifndef _link_unbalance_slave_
#define _link_unbalance_slave_

#include "typedef.h"
#include "SerialComm.h"
#define MAXLINKBUFF 256
#define MAXSERIALBUFF 256

#define STA_SLAVE_UNRESET				1
	
#define STA_RESET_EXEC					2
	
#define STA_LINKLAYER_AVAIL				3
	
#define STA_LINK_CALMING_SUPERVISORY	4
	
#define STA_EVAL_SENDNOREPLY				5
	
#define STA_EVAL_SENDCONFIRM				6
	
#define	STA_EVAL_REQRESPONSE			7
		
#define STA_WAIT_RESPONSE				8
	
#define STA_SLAVE_BUSY					9
	
#define STA_BUSY_CALMING_SUPERVISORY	10

#define RESETLINKSTATUS					200
#define CLASS1_DATA						101
#define CLASS2_DATA						102
#define ERROR_SENDNOREPLY				103

#define REQ_SendConfirm				1	

#define SRVTIME 50

class AFX_EXT_CLASS CLink_unbalance_slave:public CSerialPort
{
public:
	virtual void On_init_Link_process(){};
	_int testtype;
	_BYTE testtag;
	_BYTE test_once;
	_int  test_once_len;
	_BYTE textLinkUpMsg[256];
	_BYTE textLinkDnMsg[256];
	_int textLinkUpLen;
	_int textLinkDnLen;
	void printLinkDnMsg(_BYTE *sour,_int len);
	void printLinkUpMsg(_BYTE *sour,_int len);
	_char textLinkUpRemark[128];
	_char textLinkDnRemark[128];
	void printLinkDnRemark(_BYTE func);
	void printLinkUpRemark(_BYTE func,_BYTE tACD,_BYTE tDFC);
	virtual void OnLinkDnRemark(){On_RecvMsg(textLinkDnMsg,textLinkDnLen);};
	virtual void OnLinkUpRemark(){On_SendMsg(textLinkUpMsg,textLinkUpLen);};

	virtual void On_RecvMsg(_BYTE *msgbuf,_int len ){};
	virtual void On_SendMsg(_BYTE *msgbuf,_int len){};


	CLink_unbalance_slave();
	~CLink_unbalance_slave();

public:
	void readlinkconfig();
	bool rxbuff_dealing_flag;// 0:idle    1:busy
	
	_int GetSizeofInput_buffer();
	_int GetSizeofOutput_buffer();
	

	//Copy ASDU msg to the Input_buffer
	// When exit ,inputbuff_available=0;
	// if urgent equ 1 then ACD=1;
	void ApplayerToLink(_BYTE *asbuff,_int aslen,_int type,_BYTE urgent);// put msg into input_buffer

	bool inputbuff_available;//0:unavailable   1:available
	
//	bool GetLinkerDecodeMsgRemark(_char * string);
//	bool GetLinkerEncodeMsgRemark(_char * string);

	//The class inherited from this class,
	virtual void OnApplayer(_int type)=0; //
	void StartASpp(_int type); //
	_int LinkToApplayer(_BYTE *asbuff,_int asmaxlen,_int *type);// get msg from output_buffer , when exit outputbuff_available=0;
	bool outputbuff_available;//0:unavailable   1:available
	_WORD slave_addr;
	_BYTE slave_addr_size;
protected:
//	void OnRxOneFrame(_BYTE *rxbuf,_int *rxlen);
//	void readSerialConfig();
	bool InitLink();
	bool CloseLink();
	_DWORD dwStart;
private:
	
	_int AStype;
	static void link_thread(void *pp);
	static void ASpp_thread(void *pp);
//	void linkprocess();
	HANDLE	ASppEvent;
	HANDLE link_handle;
	HANDLE ASpp_handle;

	///////////////DecodeFrame() or EncodeFrame()
	////////////////////////////////////////////////////////
	_BYTE rxDIR,txDIR;
	_BYTE rxPRM,txPRM;
	_BYTE FCB,ACD,FCBtoggle;//
	_BYTE FCV,DFC;
	_BYTE rxfunc,txfunc;
	_BYTE frame_error;
	////////////////////////////////////////////////////////

	_int state;

	_BYTE Input_buffer[MAXLINKBUFF];
	_int Inlength;

	_BYTE Output_buffer[MAXLINKBUFF];
	_int Outlength;

	_BYTE rxbuffer[MAXSERIALBUFF];
	_BYTE txbuffer[MAXSERIALBUFF];
	_int rxlength;
	_int txlength;

	void State_process();
	bool state_proc_flag;
	void testLINKprocess(_BYTE *pbuf,_int *plen);

	_int RxOneFrame(_BYTE *rxbuf,_int maxbuflen);
	void DecodeFrame(_BYTE *rxbuf,_int rxlen);
	_int TxOneFrame(_BYTE *txbuf,_int txlen);
	_int EncodeFrame(_BYTE *txbuf);

	void STA_SLAVE_UNRESET_moveto();
	
	void STA_RESET_EXEC_moveto();					
		
	void STA_LINKLAYER_AVAIL_moveto();				
		
	void STA_LINK_CALMING_SUPERVISORY_moveto();	
		
	void STA_EVAL_SENDNOREPLY_moveto();			
		
	void STA_EVAL_SENDCONFIRM_moveto();			
		
	void STA_EVAL_REQRESPONSE_moveto();		
			
	void STA_WAIT_RESPONSE_moveto();			
		
	void STA_SLAVE_BUSY_moveto();				
		
	void STA_BUSY_CALMING_SUPERVISORY_moveto();
	
	//when enter, rxbuff_dealing_flag=1;
	//when exit, rxbuff_dealing_flag=0 outputbuff_available=1;
	//make output_buffer full of msg
	// rxbuffer(msg: linker+ASDU)===>Output_buffer(msg: ASDU)
	_int IND_decodeApplayer(_BYTE *rxbuf,_int rxlen);
	
	
	
	//when enter
	//when exit,  inputbuff_available=1;
	//make output_buffer full of msg
	//Input_buffer(msg: ASDU)===>txbuffer(msg: linker+ ASDU)
	_int REQ_encodeApplayer(_BYTE *inputbuf,_int inputlen);//when enter, rxbuff_dealing_flag=1;when exit, rxbuff_dealing_flag=0
	
	_WORD GetlinkAddr(_BYTE *buf);
	_int SetlinkAddr(_BYTE *buf,_WORD addr);
	_int	GetSizeoflinkaddr();
	void DetectHead(_BYTE *Rxbuf,_int &Rxlen);
	_BYTE verify(_BYTE *buffer, _int length);
	_int make_shortframe(_BYTE *txbuf,_BYTE only_shortframe=1);
	_int make_longframe(_BYTE *txbuf);
};
#endif

⌨️ 快捷键说明

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