MFC GUI设置从pic(ASCII)中读取和读取十六进制数据 [英] MFC GUI-setting COMPort and read hex data from pic (ASCII)

查看:117
本文介绍了MFC GUI设置从pic(ASCII)中读取和读取十六进制数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过串行通信设置基于MFC的对话框IDD_LOADCELL,以便在弹出该对话框时,来自PIC(外部设备)的数据为hex文件格式显示在编辑控制框上对话。编辑控制框的变量名是m_loadP和m_loadT1。两者的变量类型都是字符串。我想获取COMPort设置的代码并从pic中读取数据,最后将其显示在对话框上创建的编辑控制框中。如果我的ComPort设置代码我不知道是否正确。我还是不知道如何将这组代码的读取数据结合起来。请帮帮我...



I want to setup my MFC-based dialogue "IDD_LOADCELL" with serial communication so that when that dialogue is pop up, the data from PIC (external device) which is in hex file format is display on the edit control box on the dialogue. The variable name of the edit control box is "m_loadP "and "m_loadT1". type of variable for both are string. I want to get the code for the COMPort setting and reading the data from pic and finally display it on the edit control box created on the dialogue. Below if my code for ComPort setting which I dont know whether correct or not. I'm still dont know how to combine read data funcion o this bunch of code. please help me...




// Loadcell .cpp:实现文件

//



#includestdafx.h

#include3Dbalance .h

#includeLoadcell.h

#ifdef _DEBUG

#define new DEBUG_NEW

# undef THIS_FILE

静态字符THIS_FILE [] = __FILE__;

#endif





// CLoadcell



CLoadcell :: CLoadcell()

{

}



CLoadcell :: ~CLoadcell()

{

}





BEGIN_MESSAGE_MAP(CLoadcell,CWnd)

// {{AFX_MSG_MAP(CSerialCom)

//注意 - ClassWizard将添加和删除这里映射宏。

//}} AFX_MSG_MAP

END_MESSAGE_MAP()





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

// CLoadCell留言处理程序



BOOL CLoadcell :: OpenPort(CString portname)

{

portname =//./+ portname;



hComm = CreateFile(portname,

GENERIC_READ | GENERIC_WRITE,

0,

0,

OPEN_EXISTING,

0,

0);

if(hComm == INVALID_HANDLE_VALUE){

// MessageBox(无法打开通讯Port.Please \\\
Quit程序并重新启动你的电脑。 ,Com Port Error,MB_OK + MB_ICONERROR);

返回false;}

else

返回true;



}



BOOL CLoadcell :: ConfigurePort(DWORD BaudRate,BYTE ByteSize,DWORD fParity,BYTE奇偶校验,BYTE StopBits)<如果((m_bPortReady = GetCommState(hComm,& m_dcb))== 0)$

MessageBox(_T(GetCommState Error) ,错误,MB_OK + MB_ICONERROR));

CloseHandle(hComm);

返回false;}

m_dcb.BaudRate = BaudRate ;

m_dcb.ByteSize = ByteSize;

m_dcb.Parity =奇偶校验;

m_dcb.StopBits = StopBits;

m_dcb.fBinary = TRUE;

m_dcb.fDsrSensitivity = false;

m_dcb.fParity = fParity;

m_dcb.fOutX = false;

m_dcb.fInX = false;

m_dcb.fNull = false;

m_dcb.fAbortOnError = TRUE;

m_dcb.fOutxCtsFlow = FALSE;

m_dcb.fOutxDsrFlow = false;

m_dcb.fDtrControl = DTR_CONTROL_DISABLE;

m_dcb.fDsrSensitivity = false;

m_dcb.fRtsControl = RTS_CONTROL_DISABLE;

m_dcb.fOutxCtsFlow = false;

m_dcb.fOutxCtsFlow = false;



m_bPortReady = SetCommState(hComm,& m_dcb);

if(m_bPortReady == 0){

MessageBox(_T(SetCommState Error ,错误,MB_OK + MB_ICONERROR));

CloseHandle(hComm);

返回false;}

返回true;

}



BOOL CLoadcell :: SetCommunicationTimeouts(DWORD ReadIntervalTimeout,DWORD ReadTotalTimeoutMultiplier,DWORD ReadTotalTimeoutConstant,DWORD WriteTotalTimeoutMultiplier,DWORD WriteTotal TimeoutConstant)

{

if((m_bPortReady = GetCommTimeouts(hComm,& m_CommTimeouts))== 0)

返回false;

m_CommTimeouts.ReadIntervalTimeout = ReadIntervalTimeout;

m_CommTimeouts.ReadTotalTimeoutConstant = ReadTotalTimeoutConstant;

m_CommTimeouts.ReadTotalTimeoutMultiplier = ReadTotalTimeoutMultiplier;

m_CommTimeouts。 WriteTotalTimeoutConstant = WriteTotalTimeoutConstant;

m_CommTimeouts.WriteTotalTimeoutMultiplier = WriteTotalTimeoutMultiplier;

m_bPortReady = SetCommTimeouts(hComm,& m_CommTimeouts);

if(m_bPortReady == 0){

MessageBox(_T(StCommTimeouts函数失败,Com Port错误,MB_OK + MB_ICONERROR));

CloseHandle(hComm);

返回false;}

返回true;

}



BOOL CLoadcell :: WriteByte( BYTE bybyte)

{

iBytesWritten = 0;

if(WriteFile(hComm,& bybyte,1,& iBytesWri) tten,NULL)== 0)

返回false;

else返回true;

}



BOOL CLoadcell :: ReadByte(BYTE& resp)

{

BYTE rx;

resp = 0;



DWORD dwBytesTransferred = 0;



if(ReadFile(hComm,& rx,1,& dwBytesTransferred,0)){

if(dwBytesTransferred == 1){

resp = rx;



返回true;}}



返回false;

}





void CLoadcell :: ClosePort()

{

CloseHandle(hComm);

返回;

}


// Loadcell.cpp : implementation file
//

#include "stdafx.h"
#include "3Dbalance.h"
#include "Loadcell.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


// CLoadcell

CLoadcell::CLoadcell()
{
}

CLoadcell::~CLoadcell()
{
}


BEGIN_MESSAGE_MAP(CLoadcell, CWnd)
//{{AFX_MSG_MAP(CSerialCom)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CLoadCell message handlers

BOOL CLoadcell::OpenPort(CString portname)
{
portname= "//./" +portname;

hComm = CreateFile(portname,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
if(hComm==INVALID_HANDLE_VALUE){
//MessageBox("Cannot open Communication Port.Please\nQuit the program and Re-start your PC.","Com Port Error",MB_OK+MB_ICONERROR);
return false;}
else
return true;

}

BOOL CLoadcell::ConfigurePort(DWORD BaudRate, BYTE ByteSize, DWORD fParity, BYTE Parity, BYTE StopBits)
{
if((m_bPortReady = GetCommState(hComm, &m_dcb))==0){
MessageBox(_T("GetCommState Error","Error",MB_OK+MB_ICONERROR));
CloseHandle(hComm);
return false;}
m_dcb.BaudRate =BaudRate;
m_dcb.ByteSize = ByteSize;
m_dcb.Parity =Parity ;
m_dcb.StopBits =StopBits;
m_dcb.fBinary=TRUE;
m_dcb.fDsrSensitivity=false;
m_dcb.fParity=fParity;
m_dcb.fOutX=false;
m_dcb.fInX=false;
m_dcb.fNull=false;
m_dcb.fAbortOnError=TRUE;
m_dcb.fOutxCtsFlow=FALSE;
m_dcb.fOutxDsrFlow=false;
m_dcb.fDtrControl=DTR_CONTROL_DISABLE;
m_dcb.fDsrSensitivity=false;
m_dcb.fRtsControl=RTS_CONTROL_DISABLE;
m_dcb.fOutxCtsFlow=false;
m_dcb.fOutxCtsFlow=false;

m_bPortReady = SetCommState(hComm, &m_dcb);
if(m_bPortReady ==0){
MessageBox(_T("SetCommState Error","Error",MB_OK+MB_ICONERROR));
CloseHandle(hComm);
return false;}
return true;
}

BOOL CLoadcell::SetCommunicationTimeouts(DWORD ReadIntervalTimeout, DWORD ReadTotalTimeoutMultiplier, DWORD ReadTotalTimeoutConstant, DWORD WriteTotalTimeoutMultiplier, DWORD WriteTotalTimeoutConstant)
{
if((m_bPortReady = GetCommTimeouts (hComm, &m_CommTimeouts))==0)
return false;
m_CommTimeouts.ReadIntervalTimeout =ReadIntervalTimeout;
m_CommTimeouts.ReadTotalTimeoutConstant =ReadTotalTimeoutConstant;
m_CommTimeouts.ReadTotalTimeoutMultiplier =ReadTotalTimeoutMultiplier;
m_CommTimeouts.WriteTotalTimeoutConstant = WriteTotalTimeoutConstant;
m_CommTimeouts.WriteTotalTimeoutMultiplier =WriteTotalTimeoutMultiplier;
m_bPortReady = SetCommTimeouts (hComm, &m_CommTimeouts);
if(m_bPortReady ==0){
MessageBox(_T("StCommTimeouts function failed","Com Port Error",MB_OK+MB_ICONERROR));
CloseHandle(hComm);
return false;}
return true;
}

BOOL CLoadcell::WriteByte(BYTE bybyte)
{
iBytesWritten=0;
if(WriteFile(hComm,&bybyte,1,&iBytesWritten,NULL)==0)
return false;
else return true;
}

BOOL CLoadcell::ReadByte(BYTE &resp)
{
BYTE rx;
resp=0;

DWORD dwBytesTransferred=0;

if (ReadFile (hComm, &rx, 1, &dwBytesTransferred, 0)){
if (dwBytesTransferred == 1){
resp=rx;

return true;}}

return false;
}


void CLoadcell::ClosePort()
{
CloseHandle(hComm);
return;
}

推荐答案

这篇关于MFC GUI设置从pic(ASCII)中读取和读取十六进制数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆