| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2751 人关注过本帖
标题:如何用C#使用MSComm控件进行串口编程
只看楼主 加入收藏
yujifang
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-27
收藏
 问题点数:0 回复次数:2 
如何用C#使用MSComm控件进行串口编程

本人刚参加工作,要用C#对RS232或485进行串口编程,
希望高手救救小弟.感激不尽!!!

搜索更多相关主题的帖子: 串口 MSComm 控件 
2006-09-27 16:09
slcfhr
Rank: 1
等 级:新手上路
帖 子:125
专家分:0
注 册:2006-6-16
收藏
得分:0 

对于从事工控和单片机工作的人来说串口编程是很常用的和很重要的。事实上在VB.net和C#中对串口的操作和VS6里没有大的区别。你仍然可以直接调用API或者使用MSComm或其他第三方控件。这里只介绍大家常用的MSComm。例子使用2、3脚跳过线的串口将COM1和COM2连接。

首先,你必须有MSComm.ocx文件在你的Windows的System32目录下,而且它必须正确的注册。你可以装VS6来获得,微软也指出这样不会有冲突。当然我们可以自己注册而不用装庞大的VS6。先将MSComm.ocx复制到System32目录下,然后使用edit工具编辑一个以.reg扩展名的文件,在文件里输入以下的文字
REGEDIT
HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights.

// The MsComm32 Control License follows:
HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

然后,存盘。双击文件就完成了注册。

现在,我们介绍一下MSComm在VB.net和C#中和VS6里的不同和实际的应用。在VB.net或C#中建立一个窗口Form1。加入两个MSComm控件,你会发现这里MSComm的默认名字是axMSComm,有点奇怪吧。同时因为命名空间的问题你不能给axMSComm1.InputMode赋0或1这样的值。你只能这样来做如axMSComm1.InputMode=MSCommLib.InputModeConstants.comInputModeBinary或者axMSComm1.InputMode=MSCommLib.InputModeConstants.comInputModeText。

现在我们在窗口中加入textBox和button控件。在Form1_Load中加入以下的代码(C#版本):
try
{
axMSComm1.PortOpen =true;
axMSComm2.PortOpen =true;

}
catch
{
MessageBox.Show ("串口操作失败");
}
(VB.net版本)
Try
axMSComm1.PortOpen = True
axMSComm2.PortOpen = True
Catch
MsgBox("串口操作失败", MsgBoxStyle.Critical)
End Try


在button的Click事件中加入以下代码:
(C#版本)
byte[] bytOut=new byte[1];
bytOut[0]=255;
axMSComm2.Output=bytOut;
//这里我们只发一字节0ffh如果发更多可以定义更大的数组

(VB.net版本)
Dim bytOut as byte=255
axMSComm2.Output=bytOut

现在在axMSComm1_OnComm中加入

(C#版本)
string strIn=""
byte[] bytIn;
object objIn;
int i;

axMSComm1.InputMode=MSCommLib.InputModeConstants.comInputModeBinary;
axMSComm1.InputLen = 0;
objIn=axMSComm1.Input //这里注意axMSComm1.Input返回的是一个object的
bytIn =(byte[])objIn; //类型,所以必须使用显式的类型转换,这点和VB不同
for (i=0;i<=(bytIn.Length-1);i++ )
{
strIn +="\r\n"+ " "+bytIn[i].ToString("X"); //转换为16进制显示
}
textBox1.Text+=strIn;

(VB.net版本)

Dim strIn as string =””
Dim bytIn() as byte
Dim I as Integer

axMSComm1.InputMode=MSCommLib.InputModeConstants.comInputModeBinary
axMSComm1.InputLen = 0
bytIn=axMSComm1.Input
For i = 0 To UBound(bytInput)

strIn +="\r\n"+ " "+Hex(bytIn[i])
Next
textBox1.Text+=strIn
这里请注意C#在接收的时候与VB的不同。

将axMSComm1的属性RThreshold设置为1,axMSComm1和axMSComm2的SThreshold 设置为0。现在可以编译运行了,请用一条2、3脚跳过线的NullModem线连接计算机的COM1和COM2,运行后,点击button你应该在textBox中看到FF并换行。

这里使用axMSComm1接收axMSComm2发送,只发了一个字节,但更多的字节发送也没什么问题,只要定义更大的数组就可以了,当然如果你感觉MSComm不够强大你可以调用api或者自己定义一个控制串口的类。
MSComm的其他的属性和VS6中没什么太大的不同,你可以自己试试。



有肚量去容忍那些无法改变的事情 有勇气去改变那些可以改变的事情 有智慧去区别上述二类事
2006-11-17 15:12
slcfhr
Rank: 1
等 级:新手上路
帖 子:125
专家分:0
注 册:2006-6-16
收藏
得分:0 

从别的地方转过来的..我感觉MSComm不太好用,,

我也正在学这方面的东西


有肚量去容忍那些无法改变的事情 有勇气去改变那些可以改变的事情 有智慧去区别上述二类事
2006-11-17 15:14
快速回复:如何用C#使用MSComm控件进行串口编程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037660 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved