一.MSComm32.ocx控件(以下简称MSComm控件)
-
MSComm控件是windows系统下的一个控件,可以实现串口通讯。该文件存在于windows\system32目录下。使用这个控件还需要修改注册表,HKEY_CLASSES_ROOT\Licenses = Licensing: Copying the keys may be a violation of established copyrights
-
如果您的系统提示"找不到mscomm32.ocx"或"mscomm32.ocx缺失" 或者"mscomm32.ocx错误"等等,请把mscomm32.ocx下载到本机。
-
直接拷贝该文件到系统目录里:
-
Windows 95/98/Me系统,将mscomm32.ocx复制到:/Windows/System目录下。
-
Windows NT/2000系统,将mscomm32.ocx复制到C:/WINNT/System32目录下。
-
Windows XP/WIN7系统,将mscomm32.ocx复制到C:/Windows/System32目录下。
-
然后打开"开始-运行-输入regsvr32 mscomm32.ocx",回车即可!
-
注册完mscomm32.ocx后,在.net上就可以直接添加引用Interop.MSCommLib.dll,添加完后即可对com口进行操作了。
二.MSComm控件控件的使用
-
MSComm控件的常用属性
-
CommPort 设置并返回通讯端口号。
语法:object.CommPort[=value ] (value 一整型值,说明端口号。)
说明:在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。
注意:必须在打开端口之前设置 CommPort 属性。
-
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
语法: object.Settings[ = value]
说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:"BBBB,P,D,S"
BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:"9600,N,8,1"
-
InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen [ = value]
InputLen 属性语法包括下列部分:value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。
说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ("")。在使用 Input 前,用户可以选择检查 InBufferCount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。
-
PortOpen 设置并返回通讯端口的状态,也可以打开和关闭端口。
-
Input 从接收缓冲区返回和删除字符。 (16进制数据)
-
Output 向传输缓冲区写一个字符串。(16进制数据)
-
RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
语法:object.Rthreshold [ = value ](value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )
说明:当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
-
SThreshold 属性: MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
语法:object.SThreshold [ = value ],value 整形表达式,代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。
说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。
-
EOFEnable 属性:确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF,
语法:object.EOFEnable [ = value ]
EOFEnable 属性语法包括下列部分:
value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。
value 的设置值:
True 当 EOF 字符找到时 OnComm 事件被激活。
False (缺省)当 EOF 字符找到时 OnComm 事件不被激活。
说明:当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符。
三.示例
初始化MSComm控件
private static MSCommLib.MSCommClass smsClass = null;
-
private static void InitComm()
-
{
-
if (_sCommState == 1)//已初始化则不需再初始化返回
-
return;
-
try
-
{
-
smsClass = new MSCommClass();
-
smsClass.CommPort = short.Parse(SmsSetting.SmsPort);
-
smsClass.Settings = SmsSetting.Smsbit + ",N,8,1";
-
smsClass.InputLen = 0;
-
smsClass.RThreshold = 1;
-
smsClass.OnComm += new DMSCommEvents_OnCommEventHandler(smsClass_OnComm);
-
smsClass.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;
-
-
if (smsClass.PortOpen == false)
-
{
-
try
-
{
-
smsClass.PortOpen = true;
-
}
-
catch (Exception ex)
-
{
-
}
-
}
-
-
_sCommState = 1;
-
}
-
catch(Exception ex)
-
{
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("InitComm" + System.DateTime.Now.ToString());
-
sw.WriteLine("error:" + ex.Message);
-
sw.Close();
-
}
-
}
发送短信
-
///<summary>
-
///发送短信
-
///</summary>
-
///<param name="sPhone">手机号</param>
-
///<param name="sContent">发送内容</param>
-
///<param name="sMessage">返回信息</param>
-
///<returns>发送成功返回1,失败返回0</returns>
-
public static int SendSmsMessage(string sPhone, string sContent, string sMailName, string sModule, out string sMessage)
-
{
-
sMessage = "";
-
try
-
{
-
SmsSetting.InitComm();
-
-
try
-
{
-
Byte[] btPhone = Encoding.ASCII.GetBytes(sPhone);
-
Byte[] btContent = Encoding.Unicode.GetBytes(sContent);
-
int nCount = btPhone.Length + btContent.Length + 2;
-
Byte[] btSend = new Byte[nCount];
-
btSend[0] = 0xAA;
-
btSend[1] = 0x01;
-
-
int i = 0;
-
for (i = 0; i < btPhone.Length; i++)
-
{
-
btSend[i + 2] = btPhone[i];
-
}
-
-
for (int j = 0; j < btContent.Length; j = j + 2)
-
{
-
btSend[i + 2 + j] = btContent[j + 1];
-
btSend[i + 2 + j + 1] = btContent[j];
-
}
-
-
smsClass.Output = btSend;
-
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("sendtime:" + System.DateTime.Now.ToString());
-
sw.WriteLine("sPhone" + sPhone);
-
sw.WriteLine("sContent:" + sContent);
-
sw.Close();
-
}
-
catch (Exception ex)
-
{
-
sMessage = ex.ToString();
-
StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\log.txt", true, System.Text.Encoding.Unicode);
-
sw.WriteLine("SendSmsMessage" + System.DateTime.Now.ToString());
-
sw.WriteLine("error:" + sMessage);
-
sw.Close();
-
return 0;
-
}
-
return 1;
-
}
-
catch (Exception ex)
-
{
-
sMessage = ex.ToString();
-
return 0;
-
}
-
}
OnComm事件函数
-
///<summary>
-
/// OnComm回调函数
-
///</summary>
-
private static void smsClass_OnComm()
-
{
-
//结束串口串号的数据,接收到数据
-
if (smsClass.CommEvent == (short)(MSCommLib.OnCommConstants.comEvReceive))
-
{
-
Thread.Sleep(500);
-
smsClass.InputLen = 0;
-
byte[] byReceive = (byte[])smsClass.Input;
-
-
byte[] by2 = new byte[9] { 0xAA, 0x01, 0x53, 0x65, 0x6E, 0x64, 0x20, 0x4F, 0x4B };//成功返回标记
-
-
if (ByteEquals(byReceive, by2))
-
{
-
//发送成功,发送下一条信息
-
SmsSetting.g_JSmsList.RemoveAt(0);
-
SmsSetting.OnStartSms();
-
}
-
else
-
{
-
SmsSetting.OnStartSms();
-
}
-
}
-
}
相关推荐
mscomm控件使用受限制,WIN7 VB(VBA) MSCOMM32安装,(64 位操作系统) 把 MSCOMM32.ocx 放在 C:\Windows\SysWOW64 目录下。
MSComm控件使用详解MSComm控件使用详解MSComm控件使用详解MSComm控件使用详解
WIN7 中 delphi7 使用MSCOMM控件的方法: 1、找到下列三个文件: Mscomm.reg, Mscomm32.ocx,Mscomm32.dep , 把这三个文件拷贝到Windows的system目录下(注意WinNT下是System32)。然后用Windows下的注册...
WINCC注册MSCOMM控件,WINCC串口通讯使用。
vba 中引入mscomm控件 vba 中引入mscomm控件 vba 中引入mscomm控件
利用MSComm控件实现文件发送与接收.利用MSComm控件实现文件发送与接收.利用MSComm控件实现文件发送与接收.利用MSComm控件实现文件发送与接收.利用MSComm控件实现文件发送与接收.利用MSComm控件实现文件发送与接收.
LabVIEW 串口通讯MSCOMM控件安装包 第一步:将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中C:\windows\system32\。 第二步:。。。。。。 在LabVIEW中的应用:进入LabVIEW环境中,在控件面板上...
C++ builder 中如何使用Mscomm控件.doc 介绍了Mscomm控件安装与使用方法,很详细实用
在没有安装VB6.0企业版或者VC的电脑上使用MSCOMM控件需要手工安装MSCOMM控件,此文件介绍手工安装MSCOMM控件的方法,并附相关安装所需的文件。
解决WIN7系统中VS2010不能使用MSCOMM控件的问题
在VS2010中使用MSComm控件的方法
MSComm控件中的MSCOMM32.DEP MSCOMM32.OCX MSCOMM.SRG文件,以及注册方式
利用VB5.0的MSComm控件实现串口通信 设置MSComm控件的CommPort、Settings、EOFEnable属性初始化 设置MSComm控件的PortOpen属性,通过Output方法发送字符串数据 设置并读取MSComm控件的InputLen和...
MSComm 控件使用详解 MSComm 控件通过串行端口传输和接收数据,为Comm 控件在串口编程时非常方便,程序员不必去花,而且在 VC 、 VB 、 Delphi 等语言中均可使用。
MSComm控件使用详解 1 §1.1 MSComm控件两种处理通讯的方式 1 §1.1.1 事件驱动方式 2 §1.1.2 查询方式 2 §1.2 MSComm控件的常用属性 2 §1.3 MSComm控件属性详解 2 §1.3.1 CommPort属性 2 §1.3.2 PortOpen...
asp.net电子称串口控件完整使用方法 完整的js访问电子称接口代码 解决客户端访问MSCOMM32.OCX的问题
利用MSComm控件进行串口数据传输 C++课程设计案例精编 vc++mfc编程案例