Здравствуйте, Леонид.
Спасибо.
Поставил Handshake.RequestToSend, теперь при повторных запусках программы реле срабатывает.
Чтобы набирался номер поставил между com.Write("ATZ\r\n"); и com.Write("ATD555555\r\n"); команду Thread.Sleep(2500); — теперь набирается
Но первая буква A не возвращается.
Т.е. программа
com.Handshake = Handshake.RequestToSend;
com.Open();
Thread.Sleep(1500);
com.Write("ATZ\r\n");
Thread.Sleep(2500);
com.Write("ATD555555\r\n");
Thread.Sleep(2500);
string s = RecvString(com);
Console.WriteLine("Ответ: " + s);
com.Close();
ответ на консоль:
Ответ: !TZ
OK
ATD 55555
TimeoutException
Лог PortMon
0 0.00005448 ConsoleApplicat IRP_MJ_CREATE Serial0 SUCCESS Options: Open
1 0.00000335 ConsoleApplicat IOCTL_SERIAL_GET_PROPERTIES Serial0 SUCCESS
2 0.00000447 ConsoleApplicat IOCTL_SERIAL_GET_MODEMSTATUS Serial0 SUCCESS
3 0.00000251 ConsoleApplicat IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
4 0.00000251 ConsoleApplicat IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
5 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
6 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
7 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
8 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
9 0.00000196 ConsoleApplicat IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
10 0.00000196 ConsoleApplicat IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
11 0.00000978 ConsoleApplicat IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 115200
12 0.00000531 ConsoleApplicat IOCTL_SERIAL_CLR_DTR Serial0 SUCCESS
13 0.00000391 ConsoleApplicat IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
14 0.00000223 ConsoleApplicat IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
15 0.00000698 ConsoleApplicat IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:8 Replace:80 XonLimit:1024 XoffLimit:1024
16 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS
17 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS
18 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS
19 0.00000223 ConsoleApplicat IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS
20 0.00001006 ConsoleApplicat IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 115200
21 0.00000531 ConsoleApplicat IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
22 0.00000391 ConsoleApplicat IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
23 0.00000223 ConsoleApplicat IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
24 0.00000726 ConsoleApplicat IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:9 Replace:80 XonLimit:1024 XoffLimit:1024
25 0.00000559 ConsoleApplicat IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
26 0.00000251 ConsoleApplicat IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:-1 RC:3000 WM:0 WC:1400
27 0.00000670 ConsoleApplicat IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
28 0.00000307 ConsoleApplicat IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 4096 OutSize: 2048
29 1.48527955 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
30 0.00002905 ConsoleApplicat IRP_MJ_WRITE Serial0 SUCCESS Length 5: ATZ..
31 0.00000670 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
32 0.15775413 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
33 0.77865259 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
34 0.00000670 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
35 0.02025900 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
36 0.00000363 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
37 1.54218595 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
38 0.00003716 ConsoleApplicat IRP_MJ_WRITE Serial0 SUCCESS Length 11: ATD555555..
39 0.00000475 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
40 0.00042240 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
41 0.00000363 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
42 5.52713320 ConsoleApplicat IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
43 0.00000726 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: A
44 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: T
45 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: Z
46 0.00000419 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
47 0.00000838 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
48 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
49 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
50 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: O
51 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: K
52 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
53 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
54 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: A
55 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: T
56 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: D
57 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
58 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
59 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
60 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
61 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
62 0.00000363 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: 5
63 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
64 0.00000335 ConsoleApplicat IRP_MJ_READ Serial0 SUCCESS Length 1: .
65 2.99703622 ConsoleApplicat IRP_MJ_READ Serial0 TIMEOUT Length 0:
66 0.00000503 ConsoleApplicat IRP_MJ_FLUSH_BUFFERS Serial0 SUCCESS
67 0.00001425 ConsoleApplicat IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask:
68 0.00000559 ConsoleApplicat IOCTL_SERIAL_CLR_DTR Serial0 SUCCESS
69 0.00000223 ConsoleApplicat IRP_MJ_FLUSH_BUFFERS Serial0 SUCCESS
70 0.00000363 ConsoleApplicat IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: RXABORT RXCLEAR
71 0.00000643 ConsoleApplicat IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT TXCLEAR
72 0.00000419 ConsoleApplicat IRP_MJ_CLEANUP Serial0 SUCCESS
73 0.00215754 ConsoleApplicat IRP_MJ_CLOSE Serial0 SUCCESS
Здравствуйте, Andrej-V, Вы писали:
AV>Но первая буква A не возвращается.
О! Понял почему. Там просто ошибка в логике, я ее сразу не заметил...
while (com.Read(MyArray, 0, 1) == 1) if (s != "") s += oEncoder.GetString(MyArray); else s += "!";
Рассмотрим первый проход цикла. Вызов com.Read вернул один байт (та самая буква 'A') Строка еще пустая, то есть условие (s != "") — ложно, соответственно выполняется блок else: s += "!". Таким образом первый символ в строке всегда будет '!'.
Спасибо.
А SerialPort должен ли работать с USB? Или программа использующая SerialPort, написанная для модема, подключенному к последовательному порту не будет работать с модемом подключенному к USB?
В пользу последнего говорит то, что GetPortNames() (код ниже) на моем компьютере получает только COM1, хотя на последовательном порту — модем, а на USB висит флэшка.
foreach (string s in SerialPort.GetPortNames())
{
Console.WriteLine(" {0}", s);
}
Какой класс надо использовать для USB?
Здравствуйте, Andrej-V, Вы писали:
AV>>>2. Почему время получения ответа на команду ATZ (команда инициализации модема) — 0. Ведь инициализация — процесс не мгновенный. Thread.Sleep(500);, которое записано после com.Write("ATZ\r\n"); на это время не влияет ( можно закомментировать, — все равно 0).
C>>Тут тоже все просто, данные поступающие из устройства кэшируются драйвером, независимо от состояния Вашего потока. Т.е. когда ваш поток спал в результате вызова Sleep, драйвер прочитал ответ модема. Модем вполне мог уложиться в 500 миллисекунд. Когда поток проснулся, драйвер сразу же вернул ему ранее прочитанные данные. Время обмена между Вашим потоком и драйвером заметно меньше разрешения таймера, используемого для измерения интервала, потому он и был определен как 0.
AV>Драйвер модема не гружу (работаю с модемом напрямую через порт). Thread.Sleep(500); — закомментировал. Время получения ответа — 0;
Не драйвер модема, а драйвер COM-порта, если ты не используешь драйвер COM порта, как ты к нему вообще обращаешься?
Речь о том что даже если ничего не читать из порта, драйвер порта прочитает поступившие данные и сохранит в буфере, откуда при первом же обращении тутже и выплюнет при первой-же операции чтения
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>