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

📄 simsimensdoc.h

📁 用VC做的串口程序
💻 H
字号:
// SimSimensDoc.h : interface of the CSimSimensDoc class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_SIMSIMENSDOC_H__64B3510A_4ACE_11D6_9862_0050BF0A4880__INCLUDED_)
#define AFX_SIMSIMENSDOC_H__64B3510A_4ACE_11D6_9862_0050BF0A4880__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "SimSimens.h"

UINT CommProc(LPVOID pParam);                   //线程控制函数

class CSimSimensDoc : public CDocument
{
protected: // create from serialization only
	CSimSimensDoc();
	DECLARE_DYNCREATE(CSimSimensDoc)

// Attributes
public:
	CWinThread * m_pThread;       	            //代表辅助线程     
	volatile BOOL m_bConnected;                 //标志和串口的连接状态
	volatile HWND m_hTermWnd;                   //接收WM_COMMNOTIFY
	                                            //消息的视图窗口
	volatile HANDLE m_hPostMsgEvent;            //用于WM_COMMNOTIFY
	                                            //消息的事件对象,
	                                            //事件处于有信号状态
	                                            //时才可以发送消息
	OVERLAPPED m_osRead, m_osWrite;             //用于重叠读/写
	volatile HANDLE m_hCom;                     //串行口句柄

	int m_nStatus;                              //状态(0:读;1:写)
    int m_nReadStep;                            //读状态步骤
    int m_nWriteStep;                           //写状态步骤

	int rt_STX_number;                          //试发STX计数
	int rt_number;                              //数据块重发计数
	int rr_number;                              //数据块重收计数
	CStringArray replace_arr;                   //用于更新的字符数组
	bool is_replace;                            //标志处于数据更新状态

	int m_nBaud;                                //波特率
	int m_nDataBits;                            //数据位
	int m_nFlowCtrl;                            //流量控制
	int m_nParity;                              //奇/偶校验
	int m_nPort;                                //串行端口
	int m_nStopBits;                            //停止位
	BOOL m_bEcho;                               //是否回显                  
    BOOL m_bNewLine;                            //是否自动换行
    CString m_sPort;                            //校正端口名

    int m_nTextMode;                            //数据类型
    CString m_sD1;                              //数据域1
	CString m_sD2;                              //数据域2
    CString m_sD3;                              //数据域3
    CString m_sD4;                              //数据域4
    CString m_sD5;                              //数据域5
    char m_cTextMode;                           //校正数据类型
		
    char transmit_str[MAXBLOCK/4];              //发送区
	char receive_str[MAXBLOCK/4];               //接收区
	char temp_str[MAXBLOCK/4];                  //数据暂放区
    int transmit_number;                        //发送区计数
	int receive_number;                         //接收区计数
    char tc;                                    //发送字节暂存区
	char rc;                                    //接收字节暂存区

	char bcc;                                   //BCC值
    bool no_error;                              //记录错误
	int priority;                               //发送优先权

	CString m_strTrainNo;
	CString m_strDriverNo;
	CString m_strBodyHead;
	CString m_strBodyTail;
	CString m_strLineNo;
	CString m_strLocation;

// Operations
public:
	BOOL ConfigConnection();                    //设置串口设备
	BOOL OpenConnection();                      //打开串口设备
	void CloseConnection();                     //关闭串口设备

	void Transmit();                            //发送数据
	
	void GetTextBegin(CString str);             //获得发送数据首部
	void GetText(CString str);                  //获得发送数据
	void SetText();                             //获取消息
	bool SetData(CString &str);                 //获取消息数据
	void Rectify();                             //校正
	void AntiRectify();                         //反校正
	void RectifyText();                         //校正消息类型
    void AntiRectifyText();                     //反校正消息类型

    void EmptyTString();                        //初始化发送区
    void EmptyRString();                        //初始化接收区
	void SetTempStr();                          //暂放区赋值
	void EmptyTempStr();                        //清空暂放区
	void SetTString();                          //重新赋发送区值

    void LinkError();                           //报链路错
	bool OutTime(DWORD times);                  //记时器
    bool TextEnd(char string[MAXBLOCK/4]);      //数据存放区非空
    char GetBCC(char string[MAXBLOCK/4]);       //计算BCC值
    bool CheckBCC(char c);                      //校验BCC值
	void SmallReturnIdle();                     //返回空闲(小)
    void LargeReturnIdle();                     //返回空闲(大)
	void ReplaceData(CString string);           //数据同步

    char Read();                                //读串口
	DWORD Write(char c);                        //写串口

	void WriteText();                           //发送报文
	void Check();                               //检测意外
	void ReTransmit();                          //重发操作
	void ReadDLE_1();                           //首次接收DLE
	void ReadDLE_2();                           //二次接收DLE
    void ReadSTX();                             //接收STX
	void ReadText();                            //接收报文
	void ReadETX();                             //收到DLE后的处理
	void ReadBCC();                             //接收并校验BCC
	void ReadComm();                            //报文解释接收

	void Show_T_STX();                      	//(用于调试)
	void Show_T_DLE();                          
	void Show_T_NAK();
	void Show_T_DLEETXBCC();
	void Show_R_STX();
	void Show_R_DLE();
	void Show_R_NAK();
	void Show_R_DLEETXBCC();
	void Show_ZVZ_OUTTIME();
	void Show_QVZ_OUTTIME();
	void Show_BWA_OUTTIME();
	void Show_ZVZ_WAIT();
	void Show_TXA_OVER_STX();
	void Show_TXA_OVER_T_TEXT();
	void Show_TXA_OVER_R_TEXT();
	void Show_T_TEXT_SUCCESS();
	void Show_T_TEXT_UNSUCCESS();
	void Show_R_TEXT_SUCCESS();
	void Show_R_TEXT_UNSUCCESS();
	void Show_CHECKBCC_SUCCESS();
	void Show_CHECKBCC_UNSUCCESS();
	void Show_CHECK_SUCCESS();
	void Show_CHECK_UNSUCCESS();
	void Show_R_OTHER();
	void Show_T_A();
	void Show_R_A();

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSimSimensDoc)
	public:
	virtual BOOL OnNewDocument();
	virtual void Serialize(CArchive& ar);
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CSimSimensDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:
// Generated message map functions
protected:
	//{{AFX_MSG(CSimSimensDoc)
	afx_msg void OnCommSetting();
	afx_msg void OnConnect();
	afx_msg void OnDisconnect();
	afx_msg void OnProperty();
	afx_msg void OnTransmitN();
	afx_msg void OnTransmitM();
	afx_msg void OnTransmitE();
	afx_msg void OnTransmitP();
	afx_msg void OnTransmitT();
	afx_msg void OnTransmitD();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SIMSIMENSDOC_H__64B3510A_4ACE_11D6_9862_0050BF0A4880__INCLUDED_)

⌨️ 快捷键说明

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