VC++用开发串行通信程序(2) VC++用开发串行通信程序(2) 用开发串行
通信程序
分类: VC.
NET 出处:iocblog 整理 更新时间:2010-02-23 添加到收藏 三. 主程序的编制 首先我们为对话框中的控件添加对应的变量和响应函数。具体做法如表二所示: 控件名称 控件 id 对应变量或函数 发送数据编辑框 idc_senddata m_senddata 接收数据编辑框 idc_receivedata m_ receivedata 发送按钮 idc_send onsend() 清除按钮 idc_clear onclear() 通讯控件 idc_mscomm m_comm 表 2 添加控件表 再打开 ClassWizard,选中 IDC_MSCOMM,可看到该控件能响应的消息为 OnComm,添加改函数并将其改名为 OnComm(),在该函数中添加代码,就能实现 对串口事件的处理。其中一个需要注意的
问题是函数 GetInput()返回的是 VARIANT 型变量,而在编辑框中显示的是 CString 型变量,因此必需进行转换。 先将 VARIANT 型变量转换为 COleSafeArray 型变量, 再将其转换为 BYTE 型数组, 然后将数组转换为 CString 型变量。这个转换过程看起来比较复杂,但它可以满 足用不同的变量类型来显示接收数据。该程序的主要代码添加在 CommTestDlg.cpp 中,如下所示: void CCommTestDlg::OnSend() { if(!m_Comm.GetPortOpen()) m_Comm.SetPortOpen(TRUE);//打开串口 UpdateData(TRUE); m_Comm.SetOutput(COleVariant(m_SendData));// 发送数据 } void CCommTestDlg::OnClear() { m_ReceiveData.Empty();//清除接收对话框中的数据
m_SendData.Empty();//清除发送对话框中的数据 UpdateData(FALSE); } void CCommTestDlg::OnComm() { VARIANT m_Input1; COleSafeArray m_Input2; long length,i; BYTE data[1024]; CString str; if(m_Comm.GetCommEvent()==2)// 接收缓冲区内有字符 { m_Input1=m_Comm.GetInput();//读取缓冲区内的数据 m_Input2=m_Input1;//将 VARIANT 型变量转换为 COleSafeArray 型变量 length=m_Input2.GetOneDimSize();//确定数据长度 for(i=0;i
程序
现在程序已经写完,可以编译运行。我们可以做一个小实验来验证程序的功 能。 首先检验你的串口 2, 看它是否工作正常, 可用常见的 DOS 程序 Comdebug 检 查。确认串口工作正常后,可用串口线将两台微机的串口 2 相连,同时在两台机 子上运行该程序(也可只用一台微机,将其串口 2 的 2 脚和 3 脚短接,即自发自 收状态),在发送对话框中随便敲入一些字符,用鼠标点发送按钮,你就会在另 一台机子的接收对话框中看到这些数据,甚至汉字也可以发送。由此可见,利用 通讯控件可以很容易的编写出串行通信程序。但相对来说通讯控件在 VC 中的使 用要比
在 VB 中复杂的多,要想开发出更多更灵活的使用方法还需要不断的摸索 和实践。