使用GSM调制解调器发送英文短信(D-LinkDWM-156)命令(D-LinkDWM-156)应用程序。我在发送英文短信时遇到问题。我尝试发送“你好”,但我在手机上收到□□□□或...你好。serialPort1.DataBits=8;serialPort1.Parity=Parity.None;serialPort1.StopBits=StopBits.One;serialPort1.BaudRate=9600;serialPort1.DtrEnable=true;serialPort1.RtsEnable=true;serialPort1.DiscardInBuffer();serialPort1.DiscardOutBuffer();serialPort1.WriteLine("ATr");线程.睡眠(2000);serialPort1.WriteLine("AT+CMGF=1r");线程.睡眠(1000);serialPort1.WriteLine("AT+CMGS="09390149196"r")Thread.Sleep(2000);serialPort1.WriteLine("你好"+"x1A");线程.睡眠(1000);几个修复(可能更多,但我没有看到完整的代码)。来自文档:命令行由三个元素组成:前缀、文字和终止符。命令行前缀由字符“AT”或“at”组成[...]终止字符可由用户选项(参数S3)选择,默认值为CR。在伪代码中:voidSendCommand(stringcommand){serialPort.Write(command+"r");//不要在这里任意等待,检查调制解调器的响应//从串口读取(使用超时).CheckResponse();}serialPort.DataBits=8;serialPort.Parity=Parity.None;serialPort.StopBits=StopBits.One;串行端口.BaudRate=9600;serialPort.DtrEnable=true;serialPort.RtsEnable=true;serialPort.Encoding=Encoding.GetEncoding("iso-8859-1");serialPort.DiscardInBuffer();serialPort.DiscardOutBuffer();发送命令(“AT”);//"平"SendCommand("AT+CMGF=1");//消息格式SendCommand("AT+CSCS="PCCP437"");//字符集SendCommand("AT+CMGS="123456"")//电话号码SendCommand("hello"+"x1A");//检查响应的消息(绝对避免任意等待!)你可以从这样的事情开始(原始未经测试的改编,所以你可能需要一些调试,见这篇文章):AutoResetEvent_receive;stringReadResponse(inttimeout){stringresponse=string.Empty;while(true){if(_receive.WaitOne(timeout,false)){response+=_port.ReadExisting();}else{if(response.Length>0)thrownewInvalidOperationException("Incompleteresponse.");否则抛出新的InvalidOperationException(“无响应。”);}//非常原始的实现,我什至不确定它是否涵盖//所有情况,这里将不胜感激更好的解析。//另请注意,我假设V1输出带有r和n的详细信息。如果(response.EndsWith("rnOKrn"))中断;如果(response.EndsWith("rn>"))中断;如果(response.EndsWith("rnERRORrn"))中断;}返回响应;}在发送命令之前添加_receive.Reset()并且当然添加OnPortDataReceived作为SerialPort.DataReceived事件的处理程序:();}如果遇到问题(但可以连接),可以将rn替换为n有些调制解调器不正确(假设没有使用S3参数映射到13以外的任何内容)默认情况下,此字符用作命令行终止符(甚至尽管它只出现在V1详细输出的输出中)。更改代码或发送适当的S3。以上就是C#学习教程:使用GSM调制解调器发送英文短信(D-LinkDWM-156)的全部内容,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
