Всем привет!
По ходу зашился совсем и не могу понять в чём косяк!
В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!
try
{
serialPort.Write(read, 0, read.Length);
}
catch
{
var c = context.Log;
Logs logs = new Logs();
logs.Date = DateTime.Now;
logs.Event = "Ошибка записи в порт!";
c.Add(logs);
context.SaveChanges(); // пишим сообщение в логи*/
}
Т.е. если поставить точку останова на var c, указатель туда не прилетает?
Здравствуйте, Vaako, Вы писали:
V>Здравствуйте, ronik, Вы писали:
R>>Т.е. если поставить точку останова на var c, указатель туда не прилетает?
V>В режиме Debug? А то в случае Release компилятор мог "прооптимизировать" переменную которая нигде не используется.
Здравствуйте, ronik, Вы писали:
R>Всем привет! R>По ходу зашился совсем и не могу понять в чём косяк! R>В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!
"Адрес" — это что? Какая-то из составных частей сообщения, хранящаяся в переменной read?
Тогда, собственно, почему должно возникнуть исключение ?
Запись в COM порт удалась? Все, на этом работа WinAPI и соотв. оберток .NET (SerialPort) закончилаcь. И неважно, что устройство может быть вообще физически отключено от порта, работа с его протоколом, в том числе ожидание и проверка ответов — это уже задача приложения.
Здравствуйте, andrey82, Вы писали:
A>Здравствуйте, ronik, Вы писали:
R>>Всем привет! R>>По ходу зашился совсем и не могу понять в чём косяк! R>>В потоке опрашиваю некое устройство по СОМ-порту, устройство имеет адрес — 2. Отправляю сообщение в порт, но к примеру ошибся с адресом и указал — 3. Пытаюсь ловить исключение через try/catch. Не выходит!
A>"Адрес" — это что? Какая-то из составных частей сообщения, хранящаяся в переменной read? A>Тогда, собственно, почему должно возникнуть исключение ? A>Запись в COM порт удалась? Все, на этом работа WinAPI и соотв. оберток .NET (SerialPort) закончилаcь. И неважно, что устройство может быть вообще физически отключено от порта, работа с его протоколом, в том числе ожидание и проверка ответов — это уже задача приложения.
Да, пожалуй Вы правы! Адрес действительно составная часть сообщения!
Здравствуйте, ronik, Вы писали:
R>Так прилетает! Только ен очень понял, как это применить?
Тут нужно самостоятельно реализовывать логику обмена с устройством — отправку запроса, ожидание приема, проверку ответа (напр., ответило именно то устройство, которое было запрошено, формат сообщения соотвествует протоколу, контрольная сумма сообщения в порядке — если есть в протоколе). Желательно также учесть всякие нештатные ситуации — устройство отключили от порта (в том числе в ходе работы), перепутали с другим, подключили два устройства на один порт (хотя это зависит от физического уровня подключения).
Впрочем, если протокол устройства стандартный, можно поискать готовые реализации протоколов, там вполне может быть все сделано в виде удобных методов вида Init/GetState/ReadData... которые все проверят внутри и выбросят осмысленные исключения как результат анализа ответов устройства (какой-нибудь TimeoutException при отсутствии ответа от устройства, FormatException при получении сообщения неправильного формата и т.п.).