我有这个条件,
if (sendSMS(Convert.ToInt32(DLComportNo.SelectedItem.Text), TxtDriMob.Text,
TxtCliDet.Text) && sendSMS(Convert.ToInt32(DLComportNo.SelectedItem.Text),
TxtCliMob.Text, TxtDriDet.Text))
{
// I am inserting details to my db
}
,我的sendSMS方法如下所示,
private bool sendSMS(int portNo, string mobNo, string details)
{
try
{
SerialPort SerialPort1 = new SerialPort();
SerialPort1.PortName = "COM" + portNo.ToString();
SerialPort1.BaudRate = 9600;
SerialPort1.Parity = Parity.None;
SerialPort1.DataBits = 8;
SerialPort1.StopBits = StopBits.One;
SerialPort1.RtsEnable = true;
SerialPort1.DtrEnable = true;
SerialPort1.Encoding.GetEncoder();
SerialPort1.ReceivedBytesThreshold = 1;
SerialPort1.NewLine = Environment.NewLine;
SerialPort1.Open();
SerialPort1.Write("AT" + SerialPort1.NewLine);
Sleep(500);
SerialPort1.Write("AT+CMGF=1" + SerialPort1.NewLine);
Sleep(500);
SerialPort1.Write("AT+CMGS=" + (char)34 + mobNo + (char)34 +
SerialPort1.NewLine);
Sleep(1000);
SerialPort1.Write(details + (char)26);
Sleep(2000);
SerialPort1.Close();
}
catch
{
}
return true;
}
当我在sendSMS
中使用断点时,我得到了我的输出(即)两个方法都被执行并且消息被正确发送...但是当我删除断点时{I}中的方法{1}}语句被执行但第一种方法的消息被发送而不是第二种方法....任何建议?
答案 0 :(得分:1)
当然,您似乎应该在每个命令之后从串口读回来等待来自设备的确认。只是进入睡眠状态并不能保证设备已处理完您的命令并准备好进行额外输入。发送命令后,您应该从设备读取响应(通过串行端口)以确认它已按预期处理了您的命令。通常,一旦处理完命令,接受“AT”命令的设备将在新行上返回“OK”。如果它返回错误,您应该根据错误条件抛出或返回false。检查设备的规格,或尝试通过终端与设备进行交互,看看它是如何响应的。
SerialPort class上的MSDN文档说明了如何从串口读取。
请注意,另一种方法是重构您的方法以获取要发送的消息集合。这样可以更容易地重用相同的SerialPort实例而不是打开它,为您发送的每条消息设置并关闭它。