最近由于实验室项目需要,需要对GSM模块进行调用,可是购买模块自带的dll文件只适用于32wei系统,可系统真实的运行环境却是64bit,不得已,只好自己上手去写了,该模块的调用,其实很简单的,首先呢,硬件联系上GSM模块,该步骤适用串口精灵即可
1.确定串口的名称,即COM1 COM2 或者COM3 。。。
2.利用串口编程,这模块的实现,可以使用各种语言,我呢,使用了C#,所以说明也在C#语言之下
由于要求的功能简单,所以对串口的操作也相对简单,只是向串口发送几个简单的命令
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;//用于启用线程类;
using System.IO.Ports;//用于调用串口类函数
namespace Web.view.User
{
class com_port
{
public string iPort = "com1"; //默认为串口1
public int iRate = 9600; //波特率1200,2400,4800,9600
public byte bSize = 8; //8 bits
public int iTimeout = 1000; //延时时长
public SerialPort serialPort1 = new SerialPort();//定义一个串口类的串口变量
public string cur_Port;
private string _phoneNum;
private string _auditnum;
public string PhoneNum
{
get { return _phoneNum; }
set { _phoneNum = value; }
}
public string AuditNum
{
get { return _auditnum; }
set { _auditnum = value; }
}
public com_port(string port_num)
{
// Microsoft.VisualBasic.Devices.Computer cmbCOM = new Microsoft.VisualBasic.Devices.Computer();
this.serialPort1.BaudRate = 9600;
this.serialPort1.PortName = "COM" + port_num;
}
//开串口
public bool OpenCom()
{
try
{
if (serialPort1.IsOpen)
{
Console.WriteLine("串口已打开\r\n");
}
else
{
serialPort1.Open();//打开串口
Console.WriteLine("串口已打开");
}
return true;
}
catch (Exception e)
{
Console.WriteLine("错误:" + e.Message);
return false;
}
}
private void SubSendData()
{
this.serialPort1.Write("AT+CMGF=1\r");
this.serialPort1.Write("AT+CMGs=\""+_phoneNum+"\"\r");
this.serialPort1.Write(_auditnum + "\x01a");//发送短信息,使用Ctrl+Z结束
}
//发送数据函数
public void SendData()
{
if (this.serialPort1.IsOpen)
{
//发送数据
SubSendData();
this.serialPort1.Close();
}
else
{
this.serialPort1.Open();
//发送数据
SubSendData();
}
this.serialPort1.Close();
}
}
}
这样最初的功能就完成了,但是呢,有一点,就是在使用的时候发送一次还行,如果多次的话总会出现COM3 ACCESS DENIED提示,因为应用,经过检查发现,是因为多次初始化的原因,才会有这样的反应,所以呢,我们只需要在每次发送之后关闭端口即可