Проверьте баланс с помощью USSD Command в C#
Я обновляюсь по этому вопросу и знаю, что он работал правильно..
Я пытаюсь проверить баланс в моем модеме mavecom, но я не получил ответа в своем текстовом поле. Он остается пустым.
Вот мой код:
private SerialPort _port;
private void simpleButton1_Click(object sender, EventArgs e)
{
_port = new SerialPort();
_port.PortName = cbPort.Text;
_port.BaudRate = 115200;
_port.Parity = Parity.None;
_port.DataBits = 8;
_port.StopBits = StopBits.One;
_port.Handshake = Handshake.RequestToSend;
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
port.Write("AT+CUSD=1,\"" + txtUSSD.Text + "\",15" + "\r");
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
// read the response.
var response = ((SerialPort)sender).ReadLine();
// Need to update the txtProvider on the UI thread .
//showing result in txtOutput based on txtProvider USSD Command
this.Invoke(new Action(() => txtOutput.Text = response));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Это решено и может быть использовано для проверки баланса....
1 ответ
Хорошее начало, вы правильно завершаете командные строки AT \r
(не используя WriteLine или любые другие такие неправильные подходы, которые, к сожалению, являются общими проблемами начинающих). Однако формат команды определен в 27.007, чтобы быть
AT+CUSD=[<n>[,<str>[,<dcs>]]]
...
Defined values
...
<str>: string type USSD-string ...
строковые параметры всегда должны быть заключены в двойные кавычки ( стр. 5.4.2.2 строковых констант V.250: String constants shall be bounded at the beginning and end by the double-quote character
).
Поэтому, не зная объекта textProvider в деталях, я вполне уверен, что ваш код должен быть
port.Write("AT+CUSD=1,\"" + txtProvider.Text + "\",15" + "\r");
но учтите, что если txtProvider.Text
содержит любой "
символы они должны быть экранированы (не как \"
кстати, проверьте 5.4.2.2).
Однако даже с учетом вышеизложенного вам нужно серьезно переделать обработку приема. Вы ДОЛЖНЫ читать и анализировать каждую строку ответа от модема, пока не получите окончательный код результата (чаще всего OK
или же ERROR
, но есть несколько других). Любой другой способ не может работать надежно. Посмотрите этот ответ для псевдокодовой структуры о том, как сделать это правильно.
И, как уже говорилось, вы закрываете порт слишком рано.