vc串口CMSComm 类的应用
发布网友
发布时间:2022-04-29 13:25
我来回答
共3个回答
热心网友
时间:2023-10-09 00:39
建立项目:打开Visual C + + 6.0,建立一个基于对话框的MFC应用程序SCommTest(符合我的源代码,所以将您的方便);
在项目中插入MSComm控件选择项目菜单组件和控制...根据“添加到项目”子菜单选项,在弹出的对话框中,双击已注册的ActiveX控件项目(等待一分钟,这个过程是缓慢),所有已注册的ActiveX控件出现在列表框中。选择“Microsoft通信控制,版本6.0,单击”插入“按钮,将其插入到我们的项目中,接受默认选项。 (如果你的控件列表中没有看到微软通信控制,版本6.0,你可能安装VC6的ActiveX选举,重新安装VC6,选择的ActiveX罐),
ClassView窗口时,你可以看到的CMSComm类(注:如类向导看到在重建clw文件也小于)和手机图标(图1控制工具栏控件显示),现在需要做的是使用鼠标拖动图标到对话框中,运行时,图标是没有的。
3。使用ClassWizard定义CMSComm控制对象,打开类向导 - >会员Viariables选项卡,选择CSCommTestDlg类,控制变量:为IDC_MSCOMM1的添加m_ctrlComm在这个时候,你可以去看看在对话框的头文件自动添加到/ / {{AFX_INCLUDES ()#我的包含重新mscomm.h / /}} AFX_INCLUDES(如果出现错误,然后运行该程序,然后再从头开始)。
4。在对话框中添加控件添加在主对话框中的两个编辑框,一个用于接收数据ID IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA添加一个按钮,功能是按一次走上发送的内容编辑框中,发送其ID IDC_BUTTON_MANUALSEND的。不要忘了接收编辑框“属性” - >样式的Miltiline和垂直滚动属性选择,发送编辑框,如果你想输入多行文本,也可选Miltiline的。
类向导 - >会员Viariables选项卡,然后打开时,选择CSCommTestDlg类,中添加CString变量m_strRXData IDC_EDIT_RXDATA,以添加CString的变量m_strTXData的为IDC_EDIT_TXDATA。使用说明:m_strRXData,并m_strTXData的把字符的接收和发送数据。
5。添加串口事件消息处理函数,在OnComm()打开类向导“ - >”消息映射,选择类CSCommTestDlg选择IDC_MSCOMM1,双击该消息的OnComm,在弹出的对话框中会改变函数名的OnComm(易只记得)确定。
这个函数是用来处理一个串口消息事件时,如接收到的串行数据时,它会产生一个串口接收数据缓冲区的字符的消息事件,我们刚才添加的功能将被执行,我们的OnComm ()函数中添加处理代码就能实现自己想要的功能。添加以下代码:功能
无效CSCommTestDlg ::在OnComm()
{
/ / TODO:在此添加控件通知处理程序代码在这里
VARIANT variant_inp; BR /> COleSafeArray safearray_inp
长度,K;
BYTE RXDATA [2048] / /设置字节数组的8位integerthat是在没有签名。
CString的strtemp;
(m_ctrlComm.GetCommEvent()== 2)/ /事件值为2表示接收缓冲区
{/ / / / / / / /下面的字符可以根据自己的通信协议处理代码添加
variant_inp = m_ctrlComm.GetInput()/ /读取缓冲区
safearray_inp = variant_inp; / / VARIANT变量转换为C??oleSafeArray变量
LEN safearray_inp.GetOneDimSize()/ /得到有效数据长度>(K = 0; <LEN; + +)
safearray_inp.GetElement(&K,RXDATA + K);/ / BYTE数组转换成
(k = 0; <LEN; + +)/ /数组转换到CString变量
{
BYTE BT =(char *)的(RXDATA + K ); / /字符
strtemp.F??ormat(%C“,BT)/ /字符美联储的临时变量strtemp存储
m_strRXData + = strtemp; / /加入接收编辑框对应的字符串}
}
UpdateData(FALSE); / /更新编辑框内容
}
到目前为止还没有收到编辑框中看到的数据,因为我们没有打开串口,运行程序不应该有任何错误,否则,你肯定没仔细看,因为我打开VC6,跟风步骤写一行,正在运行的尝试。对吗?下一步:
6打开串口和设置串口参数,你可以在需要时打开串行端口,例如,在程序中作出Start“(开始)按钮,在打开的串口处理程序的按钮。我们在主对话框的CSCommTestDlg :: OnInitDialog()中打开串口,添加下面的代码:
/ / TODO:在此添加额外的初始化
(m_ctrlComm.GetPortOpen())
m_ctrlComm。SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1)/ /选择COM1
(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);/ /打开串口
其他
AfxMessageBox(“不能打开串口”);
m_ctrlComm.SetSettings(“9600,N,8,1”); / /波特率9600,无奇偶校验,8个数据位,1位停止位
(1)m_ctrlComm.SetInputMode; / / 1:表示以二进制方式检获的数据的
m_ctrlComm.SetRThreshold(1);
/ /参数1说,每当串口接收缓冲区将抛出一个字符接收到的数据OnComm事件
m_ctrlComm.SetInputLen(0); / /设置当前接收区数据长度
m_ctrlComm。GetInput(大于或等于) ;/ /先预读缓冲区以清除残留数据
现在,您可以尝试的方案,串口线连接,打开串口调试助手,COM2上的串行端口自动发送的选举也将手动发送。你写的程序的实施,接收盒,应该有数据显示。
7。发送数据的发送按钮,添加一个单击消息BN_CLICKED处理功能,打开类向导 - >消息映射,选择产品类别CSCommTestDlg选择“IDC_BUTTON_MANUALSEND,”双单击的BN_CLICKED添加OnButtonManualsend的()函数,并在函数中添加以下代码:
无效CSCommTestDlg :: OnButtonManualsend()
{
/ / TODO:您的控件通知处理程序代码
UpdateData(TRUE); / /读取编辑框的内容
m_ctrlComm.SetOutput(COleVariant的(m_strTXData));/ /发送数据
}
运行程序,在发送编辑框中输入一些东西,然后单击“发送”按钮,通过RS232 2.3短路,串口发送和接收数据的计算机上显示
最后要注意,在计算机上运行时,没有安装VC MSCOMM32.OCX MSVCRT用VC控件的VC。的dll,MFC42.DLL拷到系统目录Windows目录下(win2000的System32下),然后注册
热心网友
时间:2023-10-09 00:39
推荐看书
Visual C++_Turbo C串口通信编程实践
热心网友
时间:2023-10-09 00:40
不会!!来自:求助得到的回答