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

📄 serialview.cpp

📁 用vc编的调试omron_PLC的串口通讯程序
💻 CPP
字号:
// serialView.cpp : implementation of the CSerialView class
//

#include "stdafx.h"
#include "serial.h"

#include "serialDoc.h"
#include "serialView.h"
#include "comutil.h" 

#pragma comment( lib, "comsupp.lib" ) 

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

/////////////////////////////////////////////////////////////////////////////
// CSerialView

IMPLEMENT_DYNCREATE(CSerialView, CFormView)

BEGIN_MESSAGE_MAP(CSerialView, CFormView)
	//{{AFX_MSG_MAP(CSerialView)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CSerialView construction/destruction

CSerialView::CSerialView()
	: CFormView(CSerialView::IDD)
{
	//{{AFX_DATA_INIT(CSerialView)
	m_send = _T("@00RR0000000444*");
	m_receive = _T("");
	m_botelv = _T("9600");
	m_datanum = _T("7");
	m_stopnum = _T("2");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CSerialView::~CSerialView()
{
}

void CSerialView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSerialView)
	DDX_Control(pDX, IDC_JIAOYAN, m_jiaoyan);
	DDX_Control(pDX, IDC_COMNUM, m_comnum);
	DDX_Control(pDX, IDC_MSCOMM1, m_Com);
	DDX_Text(pDX, IDC_EDITSEND, m_send);
	DDX_Text(pDX, IDC_EDITRECEIVE, m_receive);
	DDX_Text(pDX, IDC_BOTELV, m_botelv);
	DDX_Text(pDX, IDC_DATANUM, m_datanum);
	DDX_Text(pDX, IDC_STOPNUM, m_stopnum);
	//}}AFX_DATA_MAP
}

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

	return CFormView::PreCreateWindow(cs);
}

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

//	m_Com.SetCommPort(1);
//	m_Com.SetInBufferSize(4096); 
//  m_Com.SetOutBufferSize(4096);
	

	m_Com.SetPortOpen(true);
//	m_Com.SetSettings("9600,E,7,2");
	m_Com.SetRThreshold(1);
	m_Com.SetInputLen(0);

	m_comnum.SetCurSel(0);
	m_jiaoyan.SetCurSel(1);


}

/////////////////////////////////////////////////////////////////////////////
// CSerialView printing

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

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CSerialView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CSerialView message handlers

void CSerialView::OnSend() 
{
	// TODO: Add your control notification handler code here
	CString str,strset;

	strset=m_botelv+",E,"+m_datanum+","+m_stopnum;
	m_Com.SetSettings(strset);

	

	UpdateData(true);
		
	str = m_send;
	str += '\r';
// 	str += '\n';

		
	m_Com.SetOutput(COleVariant(str));
//	this->OnOnCommMscomm1();

	
}

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

void CSerialView::OnOnCommMscomm1() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
//	int n;
//	CString str1,str2,str;


	if (m_Com.GetCommEvent()==2)
  	{  
	
		Sleep(30);
		variant_inp=m_Com.GetInput();
		m_receive=VariantToCString(variant_inp);
//		MessageBox(str,"",NULL);
//		str1 = str.Left(1);
//		str2 =str.Right(2);
//		str2 = str2.Left(1);
//		if ((str1 != "@")||(str2 != "*"))
//		{
//			return;
//		}
// 		m_receive = str;
//
//
		
 		UpdateData(false);	
  	}
	
}

CString   CSerialView::VariantToCString(VARIANT   var)   
  {   
  CString   strValue;   
  _variant_t   var_t;   
  _bstr_t   bst_t;   
  time_t   cur_time;   
  CTime   time_value;   
  COleCurrency   var_currency;   
  switch(var.vt)   
  {   
  case   VT_EMPTY:   
  strValue=_T("");   
  break;   
  case   VT_UI1:   
  strValue.Format("%d",var.bVal);   
  break;   
  case   VT_I2:   
  strValue.Format("%d",var.iVal);   
  break;   
  case   VT_I4:   
  strValue.Format("%d",var.lVal);   
  break;   
  case   VT_R4:   
  strValue.Format("%f",var.fltVal);   
  break;   
  case   VT_R8:   
  strValue.Format("%f",var.dblVal);   
  break;   
  case   VT_CY:   
  var_currency=var;   
  strValue=var_currency.Format(0);   
  break;   
  case   VT_BSTR:   
  var_t=var;   
  bst_t=var_t;   
  strValue.Format   ("%s",(const   char*)bst_t);   
  break;   
  case   VT_NULL:   
  strValue=_T("");   
  break;   
  case   VT_DATE:   
  cur_time   =   (long)var.date;   
  time_value=cur_time;   
  strValue=time_value.Format("%A,%B%d,%Y");   
  break;   
  case   VT_BOOL:   
  strValue.Format("%d",var.boolVal   );   
  break;   
  default:     
  strValue=_T("");   
  break;   
  }   
  return   strValue;   
    
}   

⌨️ 快捷键说明

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