vs2017中配置并使用MSCOMM控件
程序员文章站
2024-03-16 10:36:28
...
vs2017中配置并使用MSCOMM控件
1.新建一个mfc项目
2.在类视图中,添加类向导
3.使用ActiveX类向导
4.添加CMSCommm
5.打开端口
void BaseBox::OpenPort(CMSComm * cms_comm)
{
m_MsCommz = cms_comm;
int iComN = GetPrivateProfileInt("CONFIG", "COMN", 1, ".\\config.ini");
if (m_MsCommz->GetPortOpen())
{
m_MsCommz->SetPortOpen(FALSE);
}
m_MsCommz->SetInBufferSize(1024);////设置输入缓冲区大小
m_MsCommz->SetOutBufferSize(512);////设置输出缓冲区大小
CString ComSetting;
ComSetting.Format("9600,n,8,1");
m_MsCommz->SetCommPort(iComN);////选择com
m_MsCommz->SetInputMode(1);////以二进制输入;
m_MsCommz->SetSettings(ComSetting);////传输设置
if (!m_MsCommz->GetPortOpen())
{
m_MsCommz->SetPortOpen(TRUE);////打开串口
m_MsCommz->SetRThreshold(1);////为1表示有一个字符即引发事件
m_MsCommz->SetInputLen(0);////设置当前接受区长度为0
m_MsCommz->GetInput();////读取接受区清除残留数据;
if (!m_MsCommz->GetPortOpen())
{
CString temp;
temp.Format("打开串口[%d]失败!", iComN);
AfxMessageBox(temp);
}
}
CByteArray hexdata;
CString strSend;
strSend.Format("%02X05%02X%02X0200", 0, 0, 01);//010501070200
String2Hex(strSend, hexdata);
AddCheck2Hex(hexdata);
m_MsCommz->SetOutput(COleVariant(hexdata));
}
6.在资源视图中添加ActiveX控件
7.为控件配置数据处理函数
定义一个类
CMSComm m_MsCommz;
构造函数中初始化类,IDC_MSCOMM1是控件ID
DDX_Control(pDX, IDC_MSCOMM1, m_MsCommz);
为控件绑定触发事件
ON_EVENT(BoxParentDlg, IDC_MSCOMM1, 1, BoxParentDlg::OnCommMscomm1, VTS_NONE)
BoxParentDlg::OnCommMscomm1
void BoxParentDlg::OnCommMscomm1()
{
if (m_MsCommz.GetCommEvent() == 2)//判断串口是否有数据,等于2说明有
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len, k;
BYTE rxdata[1024]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
int iBufferCount;
CByteArray m_ByteArrayComm;
iBufferCount = m_MsCommz.GetInBufferCount(); //接收缓冲区的字符数目
variant_inp = m_MsCommz.GetInput(); //读缓冲区
safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); //得到有效数据长度
for (k = 0; k < len; k++)
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
for (k = 0; k < len; k++)
{
BYTE bt = *(char*)(rxdata + k); //字符型
m_ByteArrayComm.Add(bt);
}
if (TRUE == m_BoxComCtrlBase->VerificationData(m_ByteArrayComm))
{
m_BoxComCtrlBase->OnDataParsing();
}
}
}
然后就可以在OnDataParsing方法中实现与硬件交互的驱动程序了,有不懂的地方,欢迎留言
上一篇: 04. zookeeper基本命令的使用
下一篇: weex 01开发环境安装
推荐阅读
-
vs2017中配置并使用MSCOMM控件
-
第六记·Linux中安装eclipse、配置maven并使用maven搭建小工程
-
vue2中使用sass并配置全局的sass样式变量的方法
-
vue2中使用sass并配置全局的sass样式变量的方法
-
在Docker中运行纸壳CMS并配置使用MySql
-
Springboot如何获取配置文件application.yml中自定义的变量并使用
-
vscode中安装less插件并配置使用
-
接之前的文章,VS2017中使用Spring.NET配置以及使用方法(framework4.6.1超详细)
-
CentOS7中配置Docker的yum源并安装使用详解
-
Magento中如何在模块中使用多张数据表并配置多个model?