mohamadMahmodi Ответов: 1

Почему это ошибка, когда я использую "at command "в C#, но правильно ли эта команда работает в гипертерминале ?


comport.WriteLine("AT");
System.Threading.Thread.Sleep(1000);
comport.WriteLine("AT+CMGF=0" + (char)13);
System.Threading.Thread.Sleep(1000);
string s2 = "AT+CMGS=" + messageLenght.ToString();
comport.WriteLine(s2 + (char)13);
System.Threading.Thread.Sleep(1000);
comport.WriteLine(pdu + (char)26 );
System.Threading.Thread.Sleep(5000);
MessageBox.Show(comport.ReadExisting());
comport.Close();


Что я уже пробовал:

это мой код на языке Си# :

int messageLenght = 0;
string pdu = SubmitPdu.GetPdu("destinationNumber", "Message", "ServiceCenterNumber", out messageLenght);
SerialPort comport = new SerialPort();
comport.PortName = "com21";
comport.BaudRate = 921600;
comport.Parity = Parity.None;
comport.StopBits = StopBits.One;
comport.DataBits = 8;
comport.ReadBufferSize = 10000;
comport.ReadTimeout = 1000;
comport.WriteBufferSize = 10000;
comport.WriteTimeout = 1000;
comport.RtsEnable = true;
if (!comport.IsOpen)
    comport.Open();
comport.DiscardInBuffer();
comport.DiscardOutBuffer();
comport.WriteLine("AT");
System.Threading.Thread.Sleep(1000);
comport.WriteLine("AT+CMGF=0" + (char)13);
System.Threading.Thread.Sleep(1000);
string s2 = "AT+CMGS=" + messageLenght.ToString();
comport.WriteLine(s2 + (char)13);
System.Threading.Thread.Sleep(1000);
comport.WriteLine(pdu + (char)26 );
System.Threading.Thread.Sleep(5000);
MessageBox.Show(comport.ReadExisting());
comport.Close();

и результат есть :
AT

OK
AT+CMGF=0

OK
AT+CMGS=15

> 0691891901500011000*****************000A70178->

ERROR


но когда вы используете эту команду в Гипертерминале все в порядке :
at
OK
at+cmgf=0
OK
at+cmgs=15
> 069189190150001100*****************000A70178->
+CMGS: 139

OK


где жучок?
спасибо всем

0x01AA

Попробуйте отправить "на+CMGS=в<число&ГТ;&ЛТ;КР&ГТ;&ЛТ;сообщение&ГТ;&ЛТ;сочетание клавиш Ctrl-Z и&ГТ;" как одну строку. Вы используете строку, которая делает добавление в <если&ГТ;, но вы также присоединить &ЛТ;пр> В вашем коде так, Наконец, вы посылаете что-то вроде этого:"в+CMGS=в<число&ГТ;&ЛТ;КР&ГТ;&ЛТ;если&ГТ;&ЛТ;сообщение&ГТ;&ЛТ;сочетание клавиш Ctrl-Z и&ГТ;&ЛТ;если&ГТ;"

Поскольку вы добавляете <cr> самостоятельно, я бы использовал comport.Пишите на всякий случай

mohamadMahmodi

Я использовал .write вместо .writeLine и все сделал правильно, Спасибо

0x01AA

Может быть, тогда вы примете мой ответ, чтобы вывести его из экрана ;)

1 Ответов

Рейтинг:
2

0x01AA

Попробуйте отправить

"AT+CMGS=<number><cr><message><ctrl-z>"
как одна струна.
Вы используете WriteLine, который действительно добавляет сам <lf>, который заканчивается, наконец, тем, что вы отправляете что-то вроде этого *1):
"AT+CMGS=<number><cr><lf><message><ctrl-z><lf>"

*1)
string s2 = "AT+CMGS=" + messageLenght.ToString();
comport.WriteLine(s2 + (char)13); // => AT+CMGS=<number><cr><lf>
comport.WriteLine(pdu + (char)26 );  // <pdu><ctrl-z><lf>


Записи:
1.) я бы также использовал comport.Напишите(строковый текст), чтобы быть в безопасности.
2.) Проверьте в ответе "ОК" вместо вашего сна(xxxx)

Надеюсь, это поможет.