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

来源:互联网 发布:jenkins linux slave 编辑:程序博客网 时间:2024/06/05 18:24

1.引言

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

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.运行成功

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

0 0