Попытка установить связь через последовательный порт, возврат 0x102 в качестве кода возврата - PullRequest
0 голосов
/ 18 августа 2011

Я работаю над программой на C #, которая обменивается данными с частью аппаратного обеспечения через последовательный порт (упомянутое соединение через последовательный порт обрабатывается библиотекой C ++). Он предназначен для замены более раннего программного обеспечения, которое стало непригодным для использования. В настоящее время это не работает так, как я хочу. На моем рабочем ноутбуке, используя старую программу, отлично работает. Использование новой программы со старой DLL работает нормально. Использование новой программы с DLL-библиотекой, скомпилированной в режиме отладки, завершается неудачно (ранее мне удавалось скомпилировать DLL-библиотеку в режиме выпуска и заставить ее работать, но с тех пор в проекте были изменены параметры, которые приводили к сбою даже в режиме выпуска) , В частности, я отследил его с помощью монитора последовательного порта, и это происходит, когда я отправляю SOM (начало сообщения). Я отправляю сообщение «IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_IMMEDIATE_CHAR: Передача немедленного символа), ВНИЗ, ИСТИНА, 0x0,3A,:», и это похоже на успех. Затем я делаю «IRP_MJ_READ, ВНИЗ, ЛОЖЬ, 0x0 ,,», на который отвечает «IRP_MJ_READ, UP, FALSE, 0x102 ,,», ошибка. Эта точно такая же последовательность событий проходит при работе с неотладочной DLL.

Мне не удалось найти ссылку на 0x102 в качестве кода возврата, и не у всех возникает такая же проблема. Мой соотечественник по другую сторону Тихого океана иногда видит эту ошибку, но только при работе через виртуальную машину (он работает на Windows 7, но недавно нам пришлось разрабатывать для XP, работающей на виртуальной машине.

У кого-нибудь есть идеи, что может быть здесь?

Обновление

Ну, судя по всему, переход на .Net, по словам моего босса, запрещен. Наследственные причины. У меня есть тайм-ауты до 10 секунд, и он все еще истекает с DLL, скомпилированной в режиме отладки. Я обнаружил, что при работе в режиме выпуска программного обеспечения создается впечатление, что вызов маршрутизируется через rpcld.exe, который связан с противоугонной системой Absolute Software LoJack. При компиляции в режиме отладки такой вызов не выполняется. Заставляет меня задуматься, не блокируются ли последовательные порты, если только один из них не проходит через них. Я оставил сообщение одному из их представителей по обслуживанию клиентов на всякий случай. Это может объяснить, почему он работал на компьютере моего коллеги, пока он не перешел на виртуальную машину.

1 Ответ

1 голос
/ 18 августа 2011

MS говорит, что 0x102 - это NTSTATUS, что означает

Заданный интервал времени ожидания истек.

http://www.stallion.com.au/html/userdoc/easyadmw/easyadmw_2.html говорит что-то похожее

Last Status Это код NT_STATUS последней прочитанной IRP. (IRP_MJ_READ) завершено драйвером. Фактический код может быть декодирован из NT DDK файла 'ntstatus.h', однако любое значение, кроме STATUS_SUCCESS (0x0) или STATUS_TIMEOUT (0x102) обычно считается ошибка.

Возможно, для связи с этим устройством необходимо изменить новую DLL-библиотеку, чтобы использовать большее время ожидания ...

ИЛИ вы просто отбрасываете DLL и используете класс SerialPort ...

несколько полезных ссылок:

EDIT:
Согласно комментарию от OP время считывания установлено равным 1000 мс (время ожидания = интервал * множитель + константа), поскольку множитель равен 0, постоянная 1000 (мс) - это использованное время ожидания для операций чтения.

РЕДАКТИРОВАТЬ 2 - ПОСЛЕ ОБНОВЛЕНИЯ ОП:

Вы не предоставили информацию о том, что это за устройство, в оригинальном Посте - такие устройства обычно реализуют какую-то технику "анти-отладки" ... что, вероятно, именно то, что вы видите ... такие меры реализованы из-за использования таких устройств: с помощью отладчика можно снизить эффективность устройства ... поэтому, чтобы создать такое устройство, необходимо принять некоторые меры, чтобы сделать его как минимум более сложным для любого злоумышленника. ... ни одна такая схема не является на 100% безопасной ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...