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

📄 serialdataview.cpp

📁 CRC校验 CSerialPort串口类C RC校验 CSerialPort串口类
💻 CPP
字号:
// SerialDataView.cpp : CSerialDataView 类的实现
//

#include "stdafx.h"
#include "SerialData.h"

#include "SerialDataDoc.h"
#include "SerialDataView.h"
#include ".\serialdataview.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CSerialDataView

IMPLEMENT_DYNCREATE(CSerialDataView, CFormView)

BEGIN_MESSAGE_MAP(CSerialDataView, CFormView)
	ON_BN_CLICKED(IDC_WRITEBUTTON1, OnBnClickedWritebutton1)
	ON_MESSAGE(WM_GETSTR_FROMFRM, OnGetStr)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_WRITEBUTTON2, OnBnClickedWritebutton2)
	ON_BN_CLICKED(IDC_CLEAR_LIST, OnBnClickedClearList)
	ON_BN_CLICKED(IDC_WRITEBUTTON3, OnBnClickedWritebutton3)
	ON_BN_CLICKED(IDC_CRCBUT, OnBnClickedCrcbut)
END_MESSAGE_MAP()

// CSerialDataView 构造/析构

CSerialDataView::CSerialDataView()
	: CFormView(CSerialDataView::IDD)
{
	// TODO: 在此处添加构造代码
	nTimeFlag = false;

}

CSerialDataView::~CSerialDataView()
{
}

void CSerialDataView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, nListShow);
}

BOOL CSerialDataView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CFormView::PreCreateWindow(cs);
}

void CSerialDataView::OnInitialUpdate()
{

	GetDlgItem(IDC_ADRRESS)->SetWindowText("1");
	GetDlgItem(IDC_SRZMKD)->SetWindowText("0");
	GetDlgItem(IDC_COMM)->SetWindowText("4");

	CFormView::OnInitialUpdate();
	ResizeParentToFit();
}


// CSerialDataView 诊断

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

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

CSerialDataDoc* CSerialDataView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSerialDataDoc)));
	return (CSerialDataDoc*)m_pDocument;
}
#endif //_DEBUG


// CSerialDataView 消息处理程序

void CSerialDataView::OnBnClickedWritebutton1()
{
	CString addr;
	GetDlgItem(IDC_ADRRESS)->GetWindowText(addr);
	BYTE byCjdz = (BYTE)atoi((LPSTR)(LPCTSTR)addr);	//地址 字符串转换为十六进制的BYTE

	nControl1.SetCommVal(byCjdz);  //发送读数据命令
}
void CSerialDataView::OnDestroy()
{
//	nControl1.m_Ports.StopMonitoring();
	CFormView::OnDestroy();
	
	// TODO: 在此处添加消息处理程序代码
}

void CSerialDataView::ChangChar(const unsigned char* aData)
{
	
	
	CString strtemp, sTempStr, sSYSW, sXYSW, sZMGD, sDCDL, sKGL;	
	
	ltoa((aData[6]<<8 | aData[5]),(LPSTR)(LPCTSTR)sSYSW,10);
	GetDlgItem(IDC_SYSS)->SetWindowText(sSYSW);			//上游水位
	ltoa((aData[8]<<8 | aData[7]),(LPSTR)(LPCTSTR)sXYSW,10);
	GetDlgItem(IDC_XYSS)->SetWindowText(sXYSW);			//下游水位
	ltoa((aData[10]<<8 | aData[9]),(LPSTR)(LPCTSTR)sZMGD,10);
	GetDlgItem(IDC_ZMKD)->SetWindowText(sZMGD);			//闸门开度
	ltoa((aData[12]<<8 | aData[11]),(LPSTR)(LPCTSTR)sDCDL,10);
	GetDlgItem(IDC_DCDL)->SetWindowText(sDCDL);			//电池电量

	unsigned short unKGL[8];

	unKGL[1] = aData[13]>>1&0x01;
	ltoa(unKGL[1],(LPSTR)(LPCTSTR)sKGL,10);
	unKGL[2] = aData[13]>>2&0x01;
	ltoa(unKGL[2],(LPSTR)(LPCTSTR)sKGL,10);
	unKGL[3] = aData[13]>>3&0x01;
	ltoa(unKGL[3],(LPSTR)(LPCTSTR)sKGL,10);
	unKGL[4] = aData[13]>>4&0x01;
	ltoa(unKGL[4],(LPSTR)(LPCTSTR)sKGL,10);
	GetDlgItem(IDC_SHENG)->SetWindowText(sKGL);			//升
	unKGL[5] = aData[13]>>5&0x01;
	ltoa(unKGL[5],(LPSTR)(LPCTSTR)sKGL,10);
	GetDlgItem(IDC_JIANG)->SetWindowText(sKGL);			//降
	unKGL[6] = aData[13]>>6&0x01;
	ltoa(unKGL[6],(LPSTR)(LPCTSTR)sKGL,10);
	GetDlgItem(IDC_TING)->SetWindowText(sKGL);			//停

}

LRESULT CSerialDataView::OnGetStr(WPARAM wParam, LPARAM lParam)
{
      CString nGetframStr = *(CString*)wParam; 
	  int n = nGetframStr.GetLength();
	  unsigned char outbuff[16];
	if(n == 32)
	{
	  CStringChang::String2Bytes(nGetframStr,32,outbuff);
	  
	  nListShow.InsertItem(0,nGetframStr);
      ChangChar(outbuff);

	}
	if(n == 20)
	{
	  CStringChang::String2Bytes(nGetframStr,20,outbuff);	  
	  nListShow.InsertItem(0,nGetframStr);	
	}	
	return 0L;
	  
}

void CSerialDataView::OnBnClickedWritebutton2()
{
	// TODO: 在此添加控件通知处理程序代码
	CString addr, sOrder,sZmkd;

	GetDlgItem(IDC_ADRRESS)->GetWindowText(addr);

	GetDlgItem(IDC_SRZMKD)->GetWindowText(sZmkd);
	BYTE byCjdz = (BYTE)atoi((LPSTR)(LPCTSTR)addr);	//地址 字符串转换为十六进制的BYTE

	unsigned short ZMKD =atoi(sZmkd);					//闸门开度 字符串转换为short
	unsigned char buf[10];

	buf[0] = 0xDB;
	buf[1] = 0x90;
	buf[2] = 0xDB;
	buf[3] = 0x90;
	buf[4] = byCjdz;
	buf[5] = 0x01;
    buf[6] = ZMKD & 0xff;	//字符串高8位
	buf[7] = ZMKD>>8;		//低8位
	unsigned short getcrc = CCRC::RunCRC16(buf,8,0X1021);
    buf[8] = getcrc>>8;			//字符串高8位
	buf[9] = getcrc & 0xff;			//低8位
	nControl1.m_Ports.WriteToPort(buf,10);
}
//清除列表LIST
void CSerialDataView::OnBnClickedClearList()
{
	// TODO: 在此添加控件通知处理程序代码
	nListShow.DeleteAllItems();
}

void CSerialDataView::OnBnClickedWritebutton3()
{
	// TODO: 在此添加控件通知处理程序代码
	CString nPorts;
	int m_nPorts;
	GetDlgItem(IDC_COMM)->GetWindowText(nPorts);
    m_nPorts = atoi(nPorts); 
	ports = m_nPorts;
	nControl1.InitialCom(m_nPorts);
}

void CSerialDataView::OnBnClickedCrcbut()
{
	// TODO: 在此添加控件通知处理程序代码
	CString sCRCIN,sCRCOUT;
	char tempbuf1[64];
	unsigned char incrcbuf1[16];
	int lenfirst;
	GetDlgItem(IDC_INCRC)->GetWindowText(sCRCIN);
	lenfirst = sCRCIN.GetLength();


	CStringChang::String2Bytes(sCRCIN,lenfirst,incrcbuf1);
    lenfirst = lenfirst/2;
	unsigned short outcrc = CCRC::RunCRC16(incrcbuf1,14,0X1021);

	incrcbuf1[14] = outcrc>>8;
	incrcbuf1[15] = outcrc & 0xff;

	CStringChang::Bytes2String(incrcbuf1,16,tempbuf1);
	sCRCOUT.Format("%s",tempbuf1);
	GetDlgItem(IDC_OUTCRC)->SetWindowText(sCRCOUT);
}

⌨️ 快捷键说明

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