vs2017中配置并使用MSCOMM控件

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方法中实现与硬件交互的驱动程序了,有不懂的地方,欢迎留言

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 在使用C++ Builder 2010使用MSComm32控件时,需要按照以下步骤操作: 1. 在工具箱找到MSComm32控件并将其拖放到窗体上。这将在代码生成相应的组件对象。 2. 可以通过双击MSComm32控件以打开其属性页面,并进行一些基本设置,如波特率、数据位数、停止位、奇偶校验等。 3. 在代码,可以对MSComm32控件进行进一步的操作。首先,需要引入MSComm32的头文件,通常是#include <MSComm.h>。 4. 接下来,可以使用MSComm32控件的相关方法和事件来实现串口通信。例如,可以通过调用Open()方法打开串口连接,在发送数据时使用Output()方法,接收数据时使用Input()方法。 5. 此外,还可以使用MSComm32控件的事件来处理接收到的数据。例如,可以使用OnComm事件来响应串口接收到数据时的操作。通过判断事件参数的属性值,可以判断数据是何种类型(比如接收到的是何种信号),从而进行相应的处理。 总之,在C++ Builder 2010使用MSComm32控件,通过配置控件属性和使用相关的方法和事件,可以实现串口通信的功能。这对于需要与外部设备进行数据交互的应用程序来说非常重要。 ### 回答2: 在C Builder 2010使用mscomm32控件可以实现串口通信功能。 首先,在C Builder的工程引入mscomm32.ocx控件。在IComponent库,将"Microsoft Comm Control 6.0 (SP6)"添加到工具栏。 然后,在窗体设计器,将mscomm32控件拖放到窗体上。在属性编辑器,可以设置串口的通信属性,如波特率、数据位、校验位、停止位等。 在代码,可以使用mscomm32控件提供的方法和事件来实现串口通信操作。例如,使用Open方法打开串口连接,使用Write方法发送数据,使用Read方法接收数据等。另外,可以通过设置OnComm事件来处理收到的数据。 下面是一个简单的例子,演示了如何使用mscomm32控件进行简单的串口通信: ```cpp #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // 打开串口连接 Mscomm1->PortOpen = true; } void __fastcall TForm1::Button2Click(TObject *Sender) { // 发送数据 Mscomm1->Output = "Hello, mscomm32!"; Mscomm1->OutputLen = Mscomm1->Output.length(); Mscomm1->Output = ""; } void __fastcall TForm1::Mscomm1Comm(TObject *Sender) { // 接收数据 String data = Mscomm1->Input; Memo1->Lines->Add(data); } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { // 关闭串口连接 Mscomm1->PortOpen = false; } ``` 在这个例子,Button1的OnClick事件处理程序打开串口连接,Button2的OnClick事件处理程序发送数据。在Mscomm1的OnComm事件处理程序,接收到数据后将其添加到Memo1显示。在窗体的OnClose事件关闭串口连接。 以上是在C Builder 2010使用mscomm32控件的基本操作。根据具体需求,可以进一步扩展串口通信功能。 ### 回答3: 在使用C Builder 2010的MSComm32控件时,可以通过以下步骤来使用控件: 首先,将MSComm32控件添加到C Builder 2010的工具箱。在工具箱右键单击空白区域,选择"Components",然后在弹出的对话框找到并勾选"Microsoft Comm Control 6.0",点击"OK"按钮,将该控件添加到工具箱。 接下来,在设计视图将MSComm32控件添加到窗体上。在工具箱找到MSComm32控件,并将其拖放到窗体上。 然后,可以通过设置MSComm32控件的属性来配置串口通信。在属性窗口,可以设置串口号、波特率、数据位、校验位等参数,以满足具体的通信需求。 在代码,可以使用MSComm32控件的方法和事件来实现串口通信的逻辑。比如,可以使用Open方法打开串口,使用Output方法发送数据,使用Input方法接收数据,使用事件如OnComm接收串口数据等。 在使用过程,需要注意保证MSComm32控件的状态和串口设备的状态一致。比如,在打开串口之前,需要确保串口设备是打开的;在发送和接收数据时,需要注意处理可能出现的异常情况,比如超时、数据校验错误等。 总的来说,通过在C Builder 2010使用MSComm32控件,我们可以方便地实现串口通信的功能,从而实现与外部设备的数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

97年的典藏版

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值