亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? examviewview.cpp

?? 一個很好的串口程序,利用modbus協議來寫的,對很多人可能會有幫助.
?? CPP
字號:
// examviewView.cpp : implementation of the CExamviewView class
//

#include "stdafx.h"
#include "examview.h"

#include "examviewDoc.h"
#include "examviewView.h"

#include "ComSetSheet.h"
#include "ComSetDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define CHECKVALUE(pt,nl)	if((btData==NULL)||(nLength<=0)){AfxMessageBox("無效數組!");return -1;}
/////////////////////////////////////////////////////////////////////////////
// CExamviewView

//CComSetSheet m_ComSetSheet("多路溫度儀");//參數是指顯示標題
IMPLEMENT_DYNCREATE(CExamviewView, CFormView)

BEGIN_MESSAGE_MAP(CExamviewView, CFormView)
	//{{AFX_MSG_MAP(CExamviewView)
	ON_WM_CREATE()
	ON_COMMAND(ID_FILE_EXPORT, OnFileExport)
	ON_COMMAND(ID_FILE_IMPORT, OnFileImport)
	ON_COMMAND(IDM_COM_SETUP, OnComSetup)
	ON_COMMAND(IDM_COM_OPEN, OnComOpen)
	ON_COMMAND(IDM_COM_CLOSE, OnComClose)
	ON_WM_TIMER()
	ON_COMMAND(IDM_COM_READ, OnComRead)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CExamviewView construction/destruction

CExamviewView::CExamviewView()
	: CFormView(CExamviewView::IDD)
{
	//{{AFX_DATA_INIT(CExamviewView)
	m_bTune1 = FALSE;
	m_bTune2 = FALSE;
	m_bTune4 = FALSE;
	m_bTune3 = FALSE;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CExamviewView::~CExamviewView()
{
}

void CExamviewView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CExamviewView)
	DDX_Control(pDX, IDC_MSCOMM1, m_MSComm);
	DDX_Check(pDX, IDC_TUNE1, m_bTune1);
	DDX_Check(pDX, IDC_TUNE2, m_bTune2);
	DDX_Check(pDX, IDC_TUNE4, m_bTune4);
	DDX_Check(pDX, IDC_TUNE3, m_bTune3);
	//}}AFX_DATA_MAP
}

BOOL CExamviewView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CExamviewView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CExamviewView printing

BOOL CExamviewView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CExamviewView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CExamviewView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CExamviewView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CExamviewView diagnostics

#ifdef _DEBUG
void CExamviewView::AssertValid() const
{
	CFormView::AssertValid();
}

void CExamviewView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CExamviewDoc* CExamviewView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CExamviewDoc)));
	return (CExamviewDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CExamviewView message handlers

BEGIN_EVENTSINK_MAP(CExamviewView, CFormView)
    //{{AFX_EVENTSINK_MAP(CExamviewView)
	ON_EVENT(CExamviewView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CExamviewView::OnComm() //OnComm的編寫是主要的問題
{
	// TODO: Add your control notification handler code here
//	if(stop)return;
	VARIANT variant_inp;
	COleSafeArray safearray_inp;
	long length,i;
	BYTE data[4096];
	CString strtemp;
	CString strDisp;
	int nEvent=m_MSComm.GetCommEvent();
	int k;
	switch (nEvent)
//接收緩沖區內有字符
	{
	case 2:
		k=m_MSComm.GetInBufferCount();
		if(k>0)
		{
		variant_inp=m_MSComm.GetInput();//讀取緩沖區內的數據
		safearray_inp=variant_inp;//將VARIANT型變量轉換為ColeSafeArray型變量
		length=safearray_inp.GetOneDimSize();//確定數據長度
		for(i=0;i<length;i++)
		safearray_inp.GetElement(&i,data+i);//將數據轉換為BYTE型數組
		for(i=0;i<length;i++)
		{
			BYTE bt=*(char*)(data+i);//字符型
			strtemp.Format("%02X",bt);//將字符送入臨時變量strtemp存放
			strDisp+=strtemp;//加入接收編輯框對應字符串
		}
		CString w;
		w.Format("%d",k);
		MessageBox(w);
		CDC* pDC=GetDC();
		pDC->TextOut(200,100,"Com1接收到"+strDisp);
		ReleaseDC(pDC);


//		strtemp.Format("OK,'%s' Received",strDisp);
//		m_MSComm.SetOutput(COleVariant(SendData));//發送數據
		
		}
		break;
		
				
										
												
											
/*此例是溫度采集程序的例子
			CFile file;//將數組轉換為Cstring型變量
			CString tempstr;
			BYTE a=* (char *)(data+i);
			BYTE b=* (char *)(data+(++i));
			float c=(float)a+(float)(b%10)/10;
			strtemp.Format("%2.1f ",c);//將a格式化
			if (strtemp.GetLength()<5) strtemp="0"+strtemp;
			strtemp = strtemp.Right(5);
			m_ReceiveData+=strtemp;//將剛采集的數加到編輯框中
			LineHight[121]=a;
			Display();//對數據顯示前的處理
			//將數據保存到文件中
			if (m_ReceiveData.GetLength()>=600)//600個字符剛好對應120個數據
			{
				CStdioFile readfile; 
				CString readstr,readstr2;
				if(readfile.Open(FilePath,CFile::modeRead))
				{
					while(readfile.ReadString(readstr))//逐行查詢,至到文件尾
					{
						readstr2+=readstr;
					}
					readfile.Close();
				}

				if (file.Open(FilePath,CFile::modeCreate|CFile::modeReadWrite))
				{
					file.Write(readstr2,readstr2.GetLength());//原來的數據
 					file.Write(m_ReceiveData,600);//寫入新的120個數據
					file.Close();
					m_ReceiveData="";//清除編輯框內容
					break;
				}
			}
		}
*/	}
	UpdateData(FALSE);//更新編輯框內容

}

int CExamviewView::OnCreate(LPCREATESTRUCT lpCreateStruct) //來源于VC-TC串口編程實例P65
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	DWORD style=WS_VISIBLE;
	// TODO: Add your specialized creation code here
	m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
	m_MSComm.SetCommPort(1);//在設置選項里的port值不能初始時未能傳遞過來
	m_MSComm.SetInputMode(1);
	m_MSComm.SetInBufferSize(1024);
	m_MSComm.SetOutBufferSize(512);

	m_MSComm.SetRThreshold(1);
	m_MSComm.SetInputLen(0);
	m_MSComm.SetSettings("9600,n,8,1");
	if(!m_MSComm.GetPortOpen())
		m_MSComm.SetPortOpen(TRUE);
	else
		MessageBox("打開串口出錯");
	m_MSComm.GetInput();//先預讀以清除殘留數據
	return 0;
}

void CExamviewView::OnFileExport() 
{
	// TODO: Add your command handler code here
	CString ch="abcd";
	CFileDialog fileDlg(FALSE);//FALSE為保存
	fileDlg.m_ofn.lpstrTitle="導出數據";//標題
	fileDlg.m_ofn.lpstrDefExt="xxl";//默認保存的文件類型
	fileDlg.m_ofn.lpstrFilter="XXL Files(*.xxl)\0*.xxl\0All Files(*.*)\0*.*\0\0";//過濾
	if(IDOK==fileDlg.DoModal())
	{
		CFile file(ch,CFile::modeCreate | CFile::modeWrite);
		file.Write(ch,strlen(ch));
		file.Close();//響應文件名的輸出方式還有問題存在
	}
}

void CExamviewView::OnFileImport() 
{
	// TODO: Add your command handler code here
	CFileDialog fileDlg(TRUE);//FALSE為保存
	fileDlg.m_ofn.lpstrTitle="導出數據";//標題
	fileDlg.m_ofn.lpstrFilter="XXL Files(*.xxl)\0*.txt\0All Files(*.*)\0*.*\0\0";//過濾
	if(IDOK==fileDlg.DoModal())
	{
		CString ch="abcd";
		CFile file(ch,CFile::modeRead);
		char *pBuf;
		DWORD dwFileLen;
		dwFileLen=file.GetLength();
		pBuf=new char[dwFileLen+1];
		pBuf[dwFileLen]=0;
		file.Read(pBuf,dwFileLen);
		file.Close();//響應文件名的輸出方式還有問題存在
		MessageBox(pBuf);	
	}
}

void CExamviewView::OnComSetup() //在此處實現端口設置參數的傳遞。但是參數的具體傳遞細節沒有解決
{
	// TODO: Add your command handler code here
	CComSetSheet m_ComSetSheet("多路溫度儀");//參數是指顯示標題
	UpdateData(TRUE);
	CString porttemp;
	if(IDOK==m_ComSetSheet.DoModal())
	{
		baudtemp=m_ComSetSheet.m_ComSetDlg.m_sBaud;//屬性表屬性值的訪問方式。得到的是CString類型
		porttemp=m_ComSetSheet.m_ComSetDlg.m_sPort;
		porttemp=porttemp.Mid(3,1);
		char portt=atoi(porttemp);
 		switch(portt)
		{
		case 1:
			port=1;
			break;
		case 2:
			port=2;
			break;
		case 3:
			port=3;
			break;
		case 4:
			port=4;
			break;
		default:
			break;
		}
//		DevID=m_ComSetSheet.m_ComSetDlg.m_sDevID;
//		DevID=1;
/*		if(m_MSComm.GetCommPort==port)
		;
		else{
		m_MSComm.SetPortOpen(FALSE);
		m_MSComm.SetCommPort(port);
		baudtemp.Format("%d,n,8,1",baudtemp);
		m_MSComm.SetSettings(baudtemp);
		m_MSComm.SetPortOpen(TRUE);
		}//		itoa(port,1,10);
*/
  //		char cc[10];
	//		((CComboBox*)GetDlgItem(IDC_PORT))->GetLBText(index,cc);
		
//		port=index+1;
//		itoa(port,cc,10);
//		MessageBox(/*"波特率是:"+baud+"端口是COM"+*/port);
	}
	m_ComSetSheet.m_ComSetDlg.m_sBaud=baudtemp;//屬性表屬性值的訪問方式。得到的是CString類型
	m_ComSetSheet.m_ComSetDlg.m_sPort=porttemp;	
	UpdateData(FALSE);//TRUE控件到變量.FALSE變量到控件

//		char index;
//		index=GetDlgItem(IDC_PORT)->GetCurSel();
//		port=atoi(index)+1;
//		MessageBox(port);

}

void CExamviewView::OnComClose() 
{
	// TODO: Add your command handler code here
	if(m_MSComm.GetPortOpen())
		m_MSComm.SetPortOpen(FALSE);
}


void CExamviewView::OnComOpen() 
{
	// TODO: Add your command handler code here
	if(!m_MSComm.GetPortOpen())
	m_MSComm.SetPortOpen(TRUE);//打開串口
		//應該還有一些后續的操作情形,暫時留待協議能完成之后再行添加


}

WORD CExamviewView::ANSI_CRC_16(BYTE *btData, int nLength)
{
	CHECKVALUE(btData,nLength);
	WORD CRC=0xFFFF;
	BYTE j,Tmp=0;
	int i;
    for(i=0;i<nLength;i++)
    {     
		CRC^=btData[i];                      
		for (j=0;j<8;j++)                   	
		{                                   	
			Tmp=CRC&0x0001;             	
			CRC=CRC>>1;                 	
			if(Tmp)CRC=(CRC^0xA001);    	
		}                                   	
    }
	return ((CRC>>8)+(CRC<<8));	/* 應用時高在先 */
}

//把CString轉成16進制數
int CExamviewView::StrToHex(CString str, BYTE *btData)
{
	int nLength=str.GetLength();
	if(nLength<2)	return 0;
	for(int i=0;i<nLength;i+=2)	_stscanf(str.Mid(i,2),"%02X",&btData[i/2]);
	return (i+1)/2;
/*以下是得到CRC校驗碼的主函數過程
	CString strTemp;
	strTemp=m_strCRC;
	
	WORD CRC;
	BYTE btData[4096*2];	
	int nLength=StrToHex(strTemp,btData);
     
	CRC=ANSI_CRC_16(btData,nLength);	//ANSI-16
	CString str;
	str.Format(" %02X %02X",(BYTE)(CRC>>8),(BYTE)CRC);
*/

}


CString CExamviewView::Combine(CString DevID, CString Address)
{
	CString sendtemp1,CRCAdd;
	sendtemp1=DevID+"03"+Address+"0002";
	WORD CRC;
	BYTE btData[4096];
	int nLength=StrToHex(sendtemp1,btData);

	CRC=ANSI_CRC_16(btData,nLength);
	CRCAdd.Format("%02X%02X",(BYTE)(CRC>>8),(BYTE)CRC);

	sendtemp1+=CRCAdd;
	return sendtemp1;
}

void CExamviewView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	OnComRead();
	CFormView::OnTimer(nIDEvent);
}

void CExamviewView::OnComRead() 
{
	// TODO: Add your command handler code here
	CString sDevID;
	CComSetSheet m_ComSetSheet("多路溫度儀");//參數是指顯示標題
//	UpdateData(TRUE);
	int DevIDtemp=m_ComSetSheet.m_ComSetDlg.m_sDevID;
//	int DevIDtemp=5;
	sDevID.Format("%X",DevIDtemp);

	int DevNum=sDevID.GetLength();
//	int d=aoti(DevNum.GetBuffer(DevNum.GetLength()));

	switch(DevNum)
	{
	case 1:
		sDevID="0"+sDevID;
		break;
	case 0:
		MessageBox("請確認已經輸入了站地址DE");
		break;
	default:
		break;
	}
	CByteArray hexdata;
	CString SendData=Combine(sDevID,"0012");
	int len=String2Hex(SendData,hexdata); //此處返回的len可以用于計算發送了多少個十六進制數
	m_MSComm.SetOutput(COleVariant(hexdata)); //發送十六進制數據
	MessageBox(SendData);
}

int CExamviewView::String2Hex(CString str, CByteArray &senddata)
{
	int hexdata,lowhexdata;
	int hexdatalen=0;
	int len=str.GetLength();
	senddata.SetSize(len/2);
	for(int i=0;i<len;)
	{
		char lstr,hstr=str[i];
		if(hstr==' ')
		{
			i++;
			continue;
		}
		i++;
		if(i>=len)
		break;
		lstr=str[i];
		hexdata=ConvertHexChar(hstr);
		lowhexdata=ConvertHexChar(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
			i++;
			senddata[hexdatalen]=(char)hexdata;
			hexdatalen++;
	}
	senddata.SetSize(hexdatalen);
	return hexdatalen;
}


char CExamviewView::ConvertHexChar(char ch)
{
	if((ch>='0')&&(ch<='9'))
		return ch-0x30;
	else if((ch>='A')&&(ch<='F'))
		return ch-'A'+10;
	else if((ch>='a')&&(ch<='f'))
		return ch-'a'+10;
	else return (-1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品日韩区二区麻豆天美 | 亚洲一区在线观看网站| 欧美xxxxx牲另类人与| 精品视频免费看| 欧美视频一区二| 欧美日韩精品欧美日韩精品一| 91蜜桃传媒精品久久久一区二区| 成人av网站免费观看| 国产精品一区二区在线观看不卡| 久久不见久久见免费视频7| 蜜臀av一区二区三区| 麻豆91精品视频| 国产一区二区三区免费观看| 久久精品国产亚洲一区二区三区| 日本成人在线不卡视频| 黄色小说综合网站| 国产精品一品视频| av激情综合网| 欧美在线观看一区| 日韩一区二区三区观看| 欧美成人三级电影在线| 亚洲国产精品黑人久久久| 自拍视频在线观看一区二区| 亚洲午夜免费福利视频| 久久精品国产99| 成人综合婷婷国产精品久久| 色综合久久中文字幕综合网| 欧美色图免费看| 亚洲精品在线观| 综合久久综合久久| 日本特黄久久久高潮| 国产一区二区精品久久99| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲成人av福利| 蜜桃精品视频在线| 99视频精品在线| 欧美精品色一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 国产精品国产三级国产aⅴ原创| 一区二区三区免费| 激情六月婷婷久久| 欧美天堂亚洲电影院在线播放| 91精品国产色综合久久久蜜香臀| 国产欧美视频一区二区| 亚洲国产你懂的| 国产精品91xxx| 在线综合+亚洲+欧美中文字幕| 国产欧美一区二区精品性| 日韩国产在线观看| 色综合久久中文综合久久97| 久久久亚洲午夜电影| 亚洲午夜影视影院在线观看| 国产福利一区二区三区| 91精品国产高清一区二区三区 | 亚洲国产精品久久不卡毛片| 国产裸体歌舞团一区二区| 欧美丝袜自拍制服另类| 欧美高清在线一区| 久久精品久久99精品久久| 在线观看三级视频欧美| 国产精品视频观看| 九九国产精品视频| 欧美日本视频在线| 亚洲一区二区三区小说| 成人精品免费网站| 2017欧美狠狠色| 日韩高清一区在线| 欧美人与性动xxxx| 夜夜精品视频一区二区| 在线观看欧美黄色| 国产精品国产三级国产有无不卡 | 欧美一级午夜免费电影| 一区二区免费视频| 日本韩国视频一区二区| 中文字幕中文字幕一区| 懂色av一区二区三区免费观看 | 91国在线观看| 亚洲六月丁香色婷婷综合久久| 福利一区二区在线观看| 国产欧美一区二区精品性色超碰 | 亚洲一区二区高清| 在线观看日韩一区| 亚洲第一福利视频在线| 欧美日韩精品二区第二页| 亚洲高清免费视频| 欧美高清精品3d| 奇米一区二区三区av| 日韩欧美一二三四区| 韩国av一区二区三区在线观看| 精品国产一区二区精华| 国产成人在线视频网址| 国产视频911| aa级大片欧美| 亚洲一区二区三区四区五区中文| 欧美亚洲丝袜传媒另类| 亚洲午夜影视影院在线观看| 欧美一区二区免费观在线| 激情欧美日韩一区二区| **性色生活片久久毛片| 欧美午夜精品免费| 国内久久婷婷综合| 国产色一区二区| 色丁香久综合在线久综合在线观看| 亚洲综合一区二区三区| 日韩三级中文字幕| 国产91精品入口| 亚洲午夜羞羞片| 国产人久久人人人人爽| 91黄色在线观看| 国产精品一区在线| 亚洲精品菠萝久久久久久久| 制服丝袜一区二区三区| 国产久卡久卡久卡久卡视频精品| 亚洲欧洲一区二区在线播放| 精品视频在线免费| 国产麻豆成人传媒免费观看| 亚洲自拍偷拍av| 久久久久99精品一区| 在线这里只有精品| 国产精品一卡二卡在线观看| 亚洲精品乱码久久久久久日本蜜臀| 欧美一级夜夜爽| 色综合天天综合狠狠| 美女一区二区在线观看| 亚洲免费在线观看| 久久影视一区二区| 欧美日韩一区二区三区在线 | 成人av电影在线网| 奇米精品一区二区三区在线观看一| 国产精品国产三级国产aⅴ无密码| 7777女厕盗摄久久久| 99久久国产综合色|国产精品| 免费在线看成人av| 亚洲国产日韩a在线播放| 国产精品视频在线看| 精品av综合导航| 欧美精品丝袜中出| 欧美日韩国产免费一区二区| 94色蜜桃网一区二区三区| 国产主播一区二区| 奇米精品一区二区三区在线观看| 亚洲图片欧美综合| 亚洲日本电影在线| 国产精品天天看| 久久蜜桃av一区精品变态类天堂| 91精品国产黑色紧身裤美女| 91国偷自产一区二区三区成为亚洲经典 | 91麻豆精品国产91久久久久久| 国产91在线看| 国产精品自拍av| 国产一区 二区| 久久99热这里只有精品| 天天综合天天综合色| 亚洲美女在线一区| 亚洲精品中文字幕在线观看| 国产精品理论片在线观看| 国产欧美一区二区三区在线老狼| 久久久国际精品| 日本一区二区视频在线| 国产亚洲精品7777| 中文字幕的久久| 综合久久综合久久| 亚洲综合视频在线观看| 亚洲一区在线观看免费 | 2024国产精品| 久久影院视频免费| 国产欧美一区二区三区鸳鸯浴| 中文一区二区在线观看| 久久久精品tv| 亚洲乱码国产乱码精品精小说 | 国产一区视频在线看| 国产精品1区2区| 99精品久久99久久久久| 97精品视频在线观看自产线路二| 色综合天天综合在线视频| 欧美中文字幕不卡| 欧美一区午夜精品| 久久久久9999亚洲精品| 国产精品不卡在线| 天天综合网天天综合色| 国产一区二区三区免费| 99久久久国产精品免费蜜臀| 欧洲亚洲国产日韩| 精品捆绑美女sm三区| 中文字幕的久久| 三级一区在线视频先锋| 国产一区二区调教| 在线视频国产一区| 26uuu精品一区二区在线观看| 国产精品午夜在线| 亚洲成人在线观看视频| 国产一区啦啦啦在线观看| 成人av免费网站| 欧美电影免费观看高清完整版在| 久久精品一区四区| 亚洲va韩国va欧美va精品 | 中文字幕在线不卡| 日韩和欧美一区二区三区| 国产91在线观看丝袜| 91精品国产美女浴室洗澡无遮挡|