发送AT指令

来源:互联网 发布:nba球队数据统计 编辑:程序博客网 时间:2024/06/10 08:33

       最近由于实验室项目需要,需要对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提示,因为应用,经过检查发现,是因为多次初始化的原因,才会有这样的反应,所以呢,我们只需要在每次发送之后关闭端口即可

0 0