Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.187.103] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
А и вот еще что, хорошо бы перед GetCommState обнулить dcb, как это в дельфи тебе виднее
Добавлено И терминал при этом отрабатывает? Добавлено В CreateFile последний параметр в nil поставь Добавлено Если активности нет, по идеи ты сюда должен свалить eReady.Text := 'Ошибка' ; потому как порт не открылся |
Сообщ.
#17
,
|
|
|
Вместо FILE_ATTRIBUTE_READONLY 0 ничего не дает.
dcb.DCBlength = sizeof(DCB); ничего не дает. Portmon активности никакой не показывает. Зато после всех манипуляций и порты на других микросхемах стали вести себя так же. Добавлено Ну, да: if (Com_Port_Handle = INVALID_HANDLE_VALUE) then begin eReady.Text := 'Ошибка' ; exit ; end ; Но ошибки, получается нет, т. е. Handle правильный. |
Сообщ.
#18
,
|
|
|
Хорошо, верни в CreateFile как было, а со структурой dcb
сначала ее обнуляешь, потом присваиваешь длину, потом вызов getCommState и нули? Добавлено Если в терминале работает, ну не знаю. Можно посмотреть в сторону таймаутов COMMTIMEOUTS CommTimeOuts; CommTimeOuts.ReadIntervalTimeout := 0xFFFFFFFF; CommTimeOuts.ReadTotalTimeoutMultiplier := 0; CommTimeOuts.ReadTotalTimeoutConstant := TIMEOUT; CommTimeOuts.WriteTotalTimeoutMultiplier := 0; CommTimeOuts.WriteTotalTimeoutConstant := TIMEOUT; SetCommTimeouts(m_Handle, &CommTimeOuts) |
Сообщ.
#19
,
|
|
|
Таймауты пока отключены. Вернулся назад, выполняю только процедуру открытия порта CreateFile и процедуру закрытия. Для CP2102 Portmon никакой активности вообще не показывает, для других микросхем и портов минимальная активность в три строчки имеется. Только что-то этот Portmon систему портит, порты как бы остаются после их изъятия, некоторые становятся неправильным оборудованием, вплоть до жесткий диск стал несистемным. Возможно, все-таки где-то на уровне CreateFile что-то идет не так.
Добавлено Когда в CreateFile задаю имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), то Portmon активность для CP2102 показывает, GetCommState и SetCommState вроде бы тоже работают, т. е. вроде бы пока процесс пошел. А что такое здесь это '\\.\' и что оно дает? Добавлено Получается что вместо COM10 надо записать \\.\COM10? |
Сообщ.
#20
,
|
|
|
Igor_Muhin, ter_nk_
M Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила! |
Сообщ.
#21
,
|
|
|
В общем, когда задаю в CreateFile имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), где Port_Name = 'COM10' (получается программно), то порт на CP2102 (действительно COM10 по диспетчеру устройств) устанавливается нормально и даже уже удается иногда прочитать правильные числа с прибора. Зачем нужна добавка '\\.\', пока не понял. Только Portmon при использовании для контроля портит дело, приходится перезагружать компьютер.
|
Сообщ.
#22
,
|
|
|
Цитата Igor_Muhin @ В общем, когда задаю в CreateFile имя порта как Pchar('\\.\'+ Port_Name) вместо Pchar(Port_Name), где Port_Name = 'COM10' (получается программно), то порт на CP2102 (действительно COM10 по диспетчеру устройств) устанавливается нормально и даже уже удается иногда прочитать правильные числа с прибора. Зачем нужна добавка '\\.\', пока не понял. Только Portmon при использовании для контроля портит дело, приходится перезагружать компьютер. Там где порт больше девятого надо '\\.\' ставить. При открытии файла где длина пути больше 255 тоже надо добавлять "абсолютный" путь. |
Сообщ.
#23
,
|
|
|
Понятно, спасибо. А корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты? Я пока ко всем добавляю, вроде бы работает.
|
Сообщ.
#24
,
|
|
|
Цитата Igor_Muhin @ Понятно, спасибо. А корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты? Я пока ко всем добавляю, вроде бы работает. Не обязательно добавлять. Я кстати не знал, что выше 9 надо добавлять, в дотнетовском проекте когда делал, у меня было до фига ком-портов и все работало. |
Сообщ.
#25
,
|
|
|
> корректно этот префикс к именам первых портов (COM1-COM9) тоже добавлять для простоты?
Да, корректно. (Это UNC-нотация) |
Сообщ.
#26
,
|
|
|
Igor_Muhin после CreateFile() и настройки порта CP2102 обязательно поставь задержку перед передачей данных. Сталкивался с некоторым такими девайсами (завит от настроения производителя) которые не воспринимали начальную посылку данных.
|
Сообщ.
#27
,
|
|
|
та же проблема. 1 в 1.
|