关于开发短信猫串口问题

Hellengang 2008-08-26 02:55:33
我目前也在搞我们单位的一个短信猫开发的程序,我也是参照的蚕蛹大哥的文章做的。是gsm modem M35I的。现在我遇到了2个小问题,想像您请教:
1、第一次用程序连接打开串口时,从串口读出的总是空串。 一直不成功。但是通过官方的软件或者用超级终端连接一次后,只要不重新重启计算机,以后都可以用程序正常连接 。
2、若把短信猫电源拔掉后,程序就一直停在ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r"))部分了。

请各位兄弟指点
我的qq:99013867
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hellengang 2008-08-27
  • 打赏
  • 举报
回复
问题全部解决了。但是现在新的问题又出来了,就是每次只能发70个字符,当超过70个字符时,不知道怎样来拆分短信后发出去?希望大家提出解决办法
Hellengang 2008-08-26
  • 打赏
  • 举报
回复
我在超级终端里打开输入AT指令什么时候都能成功,可以正常发短信。
但是如果开机第一次用编程的软件来连接串口时,就不成功。如果在用超级终端连接一次后就可以用软件来连接串口了,可以发送AT直接了。重启计算机后在用软件来连接发送又不行了。必须再用超级终端连接一次。很是郁闷啊
slimfeng 2008-08-26
  • 打赏
  • 举报
回复
你先不用编写程序,直接用串口调试助手之类的软件测试一下短信模块的工作情况
就是发几条AT指令,包括初始化指令以及其他设置指令。
wgzn2000 2008-08-26
  • 打赏
  • 举报
回复
欢迎做SP手机硬件技术开发乐的朋友加入。本群为同行们交流聊天用。qq群53142590
Hellengang 2008-08-26
  • 打赏
  • 举报
回复
是gsm modem MC39I的
Hellengang 2008-08-26
  • 打赏
  • 举报
回复
请问是不是在首次连接前是否需要写入一个开启命令,请高手指教在线等谢谢
Hellengang 2008-08-26
  • 打赏
  • 举报
回复
public bool InitCom(string m_port, int m_baudrate)
{
ss_port.PortNum = m_port;//串口号
ss_port.BaudRate = m_baudrate;//波特率
ss_port.ByteSize = 8;//数据位
ss_port.Parity = 0;//
ss_port.StopBits = 1;//停止位
ss_port.ReadTimeout = 1000;//读超时
try
{
if (ss_port.Opened)
{
ss_port.Close();
ss_port.Open();
}
else
{
ss_port.Open();//打开串口
}
return true;
}
catch (Exception e)
{
MessageBox.Show("错误:" + e.Message);
return false;
}
}
下面的代码
bool opened = InitCom(pubilcClass.COMX, pubilcClass.BaudRate);
bool Connected = false;
string tongshiname = "";
if (opened)
{
flag = true;
ss_port.Write(Encoding.ASCII.GetBytes("AT\r"));
Thread.Sleep(500);
string response1 = Encoding.ASCII.GetString(ss_port.Read(128));
MessageBox.Show(response1);
ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //获取设备品牌
Thread.Sleep(1000);
string response = Encoding.ASCII.GetString(ss_port.Read(128));
if (response.Length > 0)
{
Connected = true;
}
else
{
Connected = false;
MessageBox.Show("请检查通信设备是否连接", "提示");
ss_port.Close();
Application.Exit();
}
ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMM\r"));//获取设备型号
Thread.Sleep(1000);
response = Encoding.ASCII.GetString(ss_port.Read(128));
if (response.Length > 0)
{
tongshiname = response.Substring(10, 5).Replace("/r", "");
Connected = true;
}
else
{
Connected = false;
MessageBox.Show("请检查通信设备是否连接", "提示");
ss_port.Close();
Application.Exit();
}
ss_port.Write(Encoding.ASCII.GetBytes("AT+CSCA?\r"));//获取手机短信中心号
Thread.Sleep(1000);
response = Encoding.ASCII.GetString(ss_port.Read(128));
if (response.Length > 0)
{
pubilcClass.CenterNumber = response.Substring(20, 13);

Connected = true;
}
else
{
Connected = false;
}
GSM MODEM 动态链接库 (DLL) 二次开发接口 适用范围: 本短信二次开发接口适用于WAVECOM、西门子、诺基亚、摩托罗拉等支持标准AT指令的GSM短信终端 使用方式: 将sms.dll文件拷贝到系统安装目录中的system32文件夹中,然后再根据以下接口函数说明和提供的例程源码开发 接口函数: 1、Sms_Connection(Com_Port As Integer,Com_BaudRate As Integer, Mobile_Type As String) As Integer Sms_Connection函数说明如下: 功能描述:用于初始化终端与串口的连接 Com_Port:串口号(0为红外接口,1,2,3,...为串口) Com_BaudRate:波特率 Mobile_Type:返回终端型号 Sms_Connection:返回值(0:连接终端失败;1:连接终端成功) 2、Sms_Send(Sms_TelNum As String, Sms_Text As String) As Integer Sms_Send函数说明如下: 功能描述:发送短信 Sms_TelNum:发送给的终端号码 Sms_Text:发送的短信内容 Sms_Send:返回值(0:发送短信失败;1:发送短信成功) 3、Sms_Receive(Sms_Type As String, Sms_Text As String) As Integer Sms_Receive函数说明如下: 功能描述:接收指定类型的短信 Sms_Type:短信类型(0:未读短信;1:已读短信;2:待发短信;3:已发短信;4:全部短信) Sms_Text:返回指定类型的短信内容字符串(短信内容字符串说明:短信短信之前用"|"符号作为分隔符,每条短信中间的各字段用"#"符号作为分隔符) 4、Sms_Delete(ByVal Sms_Index As String) As Integer Sms_Delete函数说明如下: 功能描述:删除指定的短信 Sms_Index:短信的索引号 5、Sms_AutoFlag()As Integer Sms_AutoFlag函数说明如下: 功能描述:检测连接的终端是否支持自动收发短信功能 Sms_AutoFlag:返回值(0:不支持;1:支持) 6、Sms_NewFlag() As Integer Sms_NewFlag函数说明如下: 功能描述:查询是否收到新的短信息 Sms_AutoFlag:返回值(0:未收到;1:收到) 7、Sms_Disconnection() As Integer Sms_Disconnection函数说明如下: 功能描述:断开终端与串口的连接

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧