halcon/mfc利用serialport类进行串口通信

1.引言

串口通信用mscomm控件在x64平台下报错,只能在Win32平台下工作,所以想着换平台,下载32位的halcon进行安装。安装时,不用卸载64位,安装时提示安装插件,会自动检测到runtimeclass x86,安装好后相当于只是多了一个lib中的x86sse2-win32文件夹
halcon/mfc利用serialport类进行串口通信_第1张图片

2、应用程序无法正常启动(0xc000007b)

安装好,设置好路径后,编译成功,运行报错。查询后发现这是由于64位系统中,32位halcon库不能正常加载造成的。一般的32位程序都可以在64位系统中运行,halcon库比较特殊。

采用x64平台编译,并使用64位halcon库,可以解决该问题。

3.选择serialport类

于是只能放弃mscomm控件,选择serialport类进行串口通信。

4.代码出错修改

网上下载一个实例,里面打开后得到的是一个控制台程序,在MFC对话框中把源文件和头文件添加进工程,编译时报错,后来把出错代码段进行修改。

bool CSerialPort::InitPort( UINT portNo /*= 1*/,UINT baud /*= CBR_9600*/,char parity /*= 'N'*/,
                            UINT databits /*= 8*/, UINT stopsbits /*= 1*/,DWORD dwCommEvents /*= EV_RXCHAR*/ )
{
    DCB  dcb;
    if ( bIsSuccess )
    {
        // 将ANSI字符串转换为UNICODE字符串
        //DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, NULL, 0);
        //WCHAR *pwText = new WCHAR[dwNum];
        //if (!MultiByteToWideChar (CP_ACP, 0, szDCBparam, -1, pwText, dwNum))
        //{
        //  bIsSuccess = TRUE;
        //}

        ///** 获取当前串口配置参数,并且构造串口DCB参数 */ 
        bIsSuccess = GetCommState(m_hComm, &dcb) && BuildCommDCB(szDCBparam, &dcb);
        /** 开启RTS flow控制 */ 
        dcb.fRtsControl = RTS_CONTROL_ENABLE; 

        /** 释放内存空间 */ 
        //delete [] pwText;
    }

}

5.相关代码

首先添加头文件和类定义

#include "serialport.h"  

CSerialPort mySerialPort;

初始化串口,发送数据


void IO::OnBnClicked初始化()
{
    // TODO:  在此添加控件通知处理程序代码
    //unsigned char* pData = "1234567";
    if (!mySerialPort.InitPort(3, CBR_9600, 'N', 8U, 1U, EV_RXCHAR)) MessageBox("initPort fail !");
    if (!mySerialPort.OpenListenThread()) MessageBox("OpenListenThread fail !");

    /*mySerialPort.InitPort(3, CBR_9600, 'N', 8U, 1U, EV_RXCHAR);
    mySerialPort.OpenListenThread();*/
    unsigned char outString[] = "F88F0280808000002000";
    mySerialPort.WriteData(outString, 21);
    //mySerialPort.ClosePort();
    //mySerialPort.CloseListenTread();
}


void IO::OnBnClicked发送()
{
    // TODO:  在此添加控件通知处理程序代码
    unsigned char outString[] = "F88F0280808000002000";
    mySerialPort.WriteData(outString, 21);

}

6.运行成功

点击发送按钮可以一直发送数据

你可能感兴趣的:(串口通信,class,halcon,serialport,MFC)