📄 serialdataview.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 + -