subject_67267.htm

来自「vc」· HTM 代码 · 共 216 行 · 第 1/2 页

HTM
216
字号
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-30 17:30:21
<br>内容:我用过这个东西,没有对话框的时候,要Create.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 08:45:55
<br>内容:我不知道用什么函数或方法能够判断<BR>com1的2、3脚接通了还是断开了
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 08:57:59
<br>内容:不是告诉你了码,没有函数能够直接判断,除非你发送数据,如果接收到数据,就表明接通了,如果没有接收到数据,就表明断开,你为什么这样罗嗦啊。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 09:03:55
<br>内容:我怎么发数据啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:有象 回复日期:2003-12-31 09:07:58
<br>内容:只要您的串口通信是正常的就可以了,您可以在“超级终端”中先进行测试,当2,3断开时是没有返回数据的,连接时是有返回数据的(如发送A,可返回A,断开时是没有的),再对程序进行测试,只要串口是打开的,用读和写函数就可以检测了,能读到数据说明2、3脚是通的。没有是断开的。写函数中任一使用一个字符进行发送,再读函数中进行对写函数中的字符进行对比,有就是通的,没有就是断开的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 09:12:07
<br>内容:串口通信的程序网上很多,你不是用控件了吗?我给你发一篇文章,你看看就知道了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 09:14:09
<br>内容:使用ActiveX控件: <BR><BR>VC++ 6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能。使用非常方便,但可惜的是,很少有介绍MSComm控件的资料。 <BR><BR>  ⑴.在当前的Workspace中插入MSComm控件。 <BR><BR>   Project菜单------&gt;Add to Project----&gt;Components and Controls-----&gt;Registered <BR><BR>   ActiveX Controls---&gt;选择Components: Microsoft Communications Control, <BR><BR>   version 6.0 插入到当前的Workspace中。 <BR><BR>结果添加了类CMSComm(及相应文件:mscomm.h和mscomm.cpp )。 <BR><BR>  ⑵.在MainFrm.h中加入MSComm控件。 <BR><BR>protected: <BR><BR>   CMSComm m_ComPort; <BR><BR>在Mainfrm.cpp::OnCreare()中: <BR><BR>  DWORD style=WS_VISIBLE|WS_CHILD; <BR><BR>   if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){ <BR><BR>TRACE0(&#34;Failed to create OLE Communications Control\n&#34;); <BR><BR>return -1;   // fail to create <BR><BR>    } <BR><BR>  ⑶.初始化串口 <BR><BR>m_ComPort.SetCommPort(1);  //选择COM? <BR><BR>m_ComPort. SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes <BR><BR>m_ComPort. SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes// <BR><BR><BR><BR>if(!m_ComPort.GetPortOpen()) //打开串口 <BR><BR>m_ComPort.SetPortOpen(TRUE); <BR><BR>m_ComPort.SetInputMode(1); //设置输入方式为二进制方式 <BR><BR>m_ComPort.SetSettings(&#34;9600,n,8,1&#34;); //设置波特率等参数 <BR><BR><BR><BR>m_ComPort.SetRThreshold(1); //为1表示有一个字符引发一个事件 <BR><BR>     m_ComPort.SetInputLen(0); <BR><BR>⑷.捕捉串口事项。MSComm控件可以采用轮询或事件驱动的方法从端口获取数据。我们介绍比较使用的事件驱动方法:有事件(如接收到数据)时通知程序。在程序中需要捕获并处理这些通讯事件。 <BR><BR>在MainFrm.h中: <BR><BR>protected: <BR><BR>afx_msg void OnCommMscomm(); <BR><BR>DECLARE_EVENTSINK_MAP() <BR><BR>在MainFrm.cpp中: <BR><BR>BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )   <BR><BR>ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) <BR><BR>           //映射ActiveX控件事件 <BR><BR>END_EVENTSINK_MAP() <BR><BR>⑸.串口读写. 完成读写的函数的确很简单,GetInput()和SetOutput()就可。两个函数的原型是: <BR><BR>VARIANT GetInput();及 void SetOutput(const VARIANT&amp; newValue);都要使用VARIANT类型(所有Idispatch::Invoke的参数和返回值在内部都是作为VARIANT对象处理的)。 <BR><BR>无论是在PC机读取上传数据时还是在PC机发送下行命令时,我们都习惯于使用字符串的形式(也可以说是数组形式)。查阅VARIANT文档知道,可以用BSTR表示字符串,但遗憾的是所有的BSTR都是包含宽字符,即使我们没有定义_UNICODE_UNICODE也是这样! WinNT支持宽字符, 而Win95并不支持。为解决上述问题,我们在实际工作中使用CbyteArray,给出相应的部分程序如下: <BR><BR>    void CMainFrame::OnCommMscomm(){ <BR><BR>     VARIANT vResponse;   int k; <BR><BR>if(m_commCtrl.GetCommEvent()==2) {       <BR><BR>k=m_commCtrl.GetInBufferCount(); //接收到的字符数目 <BR><BR>if(k&gt;0) { <BR><BR>vResponse=m_commCtrl.GetInput(); //read <BR><BR>SaveData(k,(unsigned char*) vResponse.parray-&gt;pvData); <BR><BR>} // 接收到字符,MSComm控件发送事件 } <BR><BR>   。。。。。 // 处理其他MSComm控件 <BR><BR>} <BR><BR>void CMainFrame::OnCommSend() { <BR><BR>。。。。。。。。 // 准备需要发送的命令,放在TxData[]中 <BR><BR>CByteArray array; <BR><BR>array.RemoveAll(); <BR><BR>array.SetSize(Count); <BR><BR>for(i=0;i&lt;Count;i++) <BR><BR>array.SetAt(i, TxData[i]); <BR><BR>   m_ComPort.SetOutput(COleVariant(array)); // 发送数据 <BR><BR>} <BR><BR>请大家认真关注第⑷、⑸中内容,在实际工作中是重点、难点所在。 <BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:夏雪宜 回复日期:2003-12-31 09:15:39
<br>内容:上面的可以不用对话框,直接在主框架中创建就行了,然后写串口通信程序就行了,基本的内同都有。ID_COMMCTRL时自己定义的资源号。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 09:15:54
<br>内容:谢谢夏公、有象、徐公<BR>的指点<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 11:35:15
<br>内容:大虾:<BR>我还是实现不了<BR>痛苦啊<BR>给个实例<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 12:27:27
<br>内容:上面的已经很具体了。真不知道还要怎样具体?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 13:10:31
<br>内容:给个基于dialog的开关信号程序<BR>谢了夏公
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 13:34:10
<br>内容:大虾们给个实例啊<BR>基于dialog的开关信号<BR>我打开了串口<BR>可是我按下开关的时候没有响应<BR>痛苦啊
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 13:48:44
<br>内容:大虾们<BR>怎么都见死不久呢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 14:05:49
<br>内容:唉,正是没有救了,你怎么这么不肯动脑子呢?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2003-12-31 15:12:31
<br>内容:呵呵,楼上<BR>谢谢你的骂<BR>我加了个定时器发送数据可以实现了<BR>但是:<BR>不用定时器该如何处理呢<BR>我把源码给你帮我看看吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:夏雪宜 回复日期:2003-12-31 15:18:31
<br>内容:好吧,你给我,用控件来实现的时候,有一个函数可以设置多少个字节就发出一个事件,然后你可以在事件函数调用你的MessageBox()就行了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:siwei 回复日期:2004-01-06 13:35:02
<br>内容:大虾们,我还是解决不了<BR>我让开关闭和一次就传送一次数据(执行一次messagebox())<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?