Отправка AT команд модему через COM порт
Есть GSM Модем CINTERION MC35i.
Хочу отправить простейшую АТ команду
Код:
SerialPort port = new SerialPort("COM5");
port.BaudRate = 9600;
port.Open();
port.Write("ATZ\r");
port.BaudRate = 9600;
port.Open();
port.Write("ATZ\r");
Если отправить команду через стандартный терминал WindowsXP, то на мониторе видно, что приходит ответ:
Порт открыт процессом "HYPERTRM.EXE" (PID: 2844)
Запрос:02.11.2012 13:01:12.42764
61 74 7A 0D atz.
Ответ:02.11.2012 13:01:13.13064 (+0.0781 seconds)
0D 0A 4F 4B 0D 0A ..OK..
Порт закрыт
Запрос:02.11.2012 13:01:12.42764
61 74 7A 0D atz.
Ответ:02.11.2012 13:01:13.13064 (+0.0781 seconds)
0D 0A 4F 4B 0D 0A ..OK..
Порт закрыт
А от моей программы ответ не приходит
Порт открыт процессом "MKTSMonitor.vshost.exe" (PID: 2820)
Запрос:02.11.2012 13:24:52.23364
41 54 5A 0D ATZ.
Запрос:02.11.2012 13:24:52.23364
41 54 5A 0D ATZ.
.
Скажите что не так?
Код:
HANDLE HCOMPort;
char COM_string[32];
if (HCOMPort != NULL) {CloseHandle(HCOMPort);};
sprintf(COM_string,"\\\\.\\COM%d", (Edit1->Text).ToInt());
HCOMPort = CreateFileA(COM_string, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (HCOMPort != INVALID_HANDLE_VALUE) { Label1->Caption = "Порт открыт";
Подготавливаем данные
...
...
...
и пишем
WriteFile(HCOMPort, WriteBytes1, 13, &Writen, NULL);
char COM_string[32];
if (HCOMPort != NULL) {CloseHandle(HCOMPort);};
sprintf(COM_string,"\\\\.\\COM%d", (Edit1->Text).ToInt());
HCOMPort = CreateFileA(COM_string, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (HCOMPort != INVALID_HANDLE_VALUE) { Label1->Caption = "Порт открыт";
Подготавливаем данные
...
...
...
и пишем
WriteFile(HCOMPort, WriteBytes1, 13, &Writen, NULL);
Цитата: QWERYTY
Не могу сказать что вы делаете не так, но раньше это делалось через CreateFile\WriteFile
ТС пишет на C#
Проверьте другие настройки SerialPort, в частности DtrEnable и RtsEnable и выясните, как их использовать при общении с модемом. Там есть свои нюансы.
Моя ошибка заключалась в том, что нужно было еще и читать данные с порта, т.е. вызвать Read