我问个串口读取数据的

mohugomohu 2010-11-01 03:11:26

//不超过70个字
private static string SendSMSNormal(SerialPort sp, string tel, string content)
{

string strCmd = "AT+CMMS=3\r";
sp.Write(strCmd);
Thread.Sleep(100);
strCmd = "AT+CMGF=1\r";
sp.Write(strCmd);
Thread.Sleep(100);
strCmd = "AT+CMGS=" + tel + "\r";
sp.Write(strCmd);
Thread.Sleep(100);
strCmd = EncodingUCS2(content) + "\x1A";
sp.Write(strCmd);
Thread.Sleep(10000);

string result = String.Empty;
byte[] buffer = new byte[128];
int count = sp.Read(buffer, 0, buffer.Length);
result = Encoding.UTF8.GetString(buffer, 0, count).Replace("\0", "");
return result;
}

我使用SerialPort执行了指令之后,想获取返回值,但是int count = sp.Read(这里一直阻塞,执行不下去了,这是为什么?刚开始是可以读取的,后来不知道怎么就不行了,好像偶尔又行。搞不清楚。
...全文
65 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mohugomohu 2010-11-01
  • 打赏
  • 举报
回复
用超级终端是可以的,不知道为什么在程序里面不行。sp.BytesToRead不清楚,我第一次搞串口
兔子-顾问 2010-11-01
  • 打赏
  • 举报
回复
at命令,有时候会如此的。比如机器硬件复位了。
我建议你先用标准串口工具,模拟的发送数据,了解清楚时序了。然后再弄,你现在的问题估计不是软件问题,是时序没弄对。你发的这些,不用软件,就用串口调试助手发,有结果么?
就代码而言。其实,你可以不用一直等10秒。可以尝试
while(sp.BytesToRead<你等待的值) Application.DoEvents();
等有数据了在读。
mohugomohu 2010-11-01
  • 打赏
  • 举报
回复
事实上,是无法读取串口信息了,ReadExisting是空,Read执行不了
兔子-顾问 2010-11-01
  • 打赏
  • 举报
回复
string result = String.Empty;
byte[] buffer = new byte[128];
int count = sp.Read(buffer, 0, buffer.Length);
result = Encoding.UTF8.GetString(buffer, 0, count).Replace("\0", "");
return result;

这一段直接替换为一行不行么?

return sp.ReadExisting();

111,095

社区成员

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

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

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