GenaSPB 11 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 7 minutes ago, firstvald said: стараюсь снизить вероятность этого проверяя наличия порта непосредственно перед передачей. Закрывшийся из-за вытаскивания USB компорт вернет ошибку на попытку выполнить системный вызов с ним. Я говорил про то что не установить параметры порта программе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 3 часа назад, GenaSPB сказал: Если по компорту до его открытия из устройства идет поток данных и это вызывает frame error (например из-за того что не вовремя начал принимать, дефолтная скорость мало значит в этом случае) - то функция установки скорости WinAPI будет возвращать ошибку. Сбрасываем её и опять пытаемся установить скорость... И так навсегда. Странно, но как-то вроде ни разу не сталкивался с таким. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 7 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба Quote System.ArgumentOutOfRangeException перехвачено HResult=-2146233086 Message=Максимальная скорость для этого устройства: 115200. Имя параметра: baudRate Source=System ParamName=baudRate StackTrace: в System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace) в System.IO.Ports.SerialPort.Open() а в каком месте это определяеца? может както исправить можно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 1 hour ago, jcxz said: Странно, но как-то вроде ни разу не сталкивался с таким. Я сталкивался и любой может протестировать, условия я сказал. В windows программа может применить функции перенастройки к открытому порту, если он не словил ошибку. Если в ошибке, сбросить ее и применить. Это разные операции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 1 час назад, GenaSPB сказал: Я сталкивался и любой может протестировать, условия я сказал. В windows программа может применить функции перенастройки к открытому порту, если он не словил ошибку. Если в ошибке, сбросить ее и применить. Это разные операции. При открытии порта вызываю WinAPI в следующем порядке: CreateFile() SetupComm() GetCommState() SetCommState() //установка скорости среди прочего Ни разу сбоит. Специально никакие ошибки не сбрасываю. Естественно - с COM-портами работаю постоянно, каждый день. Под разными win. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 2 hours ago, siargy said: а в каком месте это определяеца? может както исправить можно? Работайте на 115200 Вам же уже несколько раз объяснили, вот одно из объяснений 6 hours ago, jcxz said: 6 hours ago, siargy said: 2. BT-свисток <-./магия в компьютере/.-> программа Здесь скорость COM-порта не важна. Между ней и скоростью в канале нет никакой связи. Как и между скоростью UART из п.1 и скоростью радиоканала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 31 августа, 2023 Опубликовано 31 августа, 2023 (изменено) · Жалоба 4 hours ago, jcxz said: Естественно - с COM-портами работаю постоянно, каждый день. Под разными win. Счастливый человек... а логически то понимаете причины? Коды ошибок проверяете после установки формата и скорости? Изменено 31 августа, 2023 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба 2 часа назад, GenaSPB сказал: Коды ошибок проверяете после установки формата и скорости? вроде да: void TCommDevice::CommEvent() { DWORD j; cevt = GetTickCount(); if (ClearCommError(zero.hComm, &j, NULL)) if (zero.ntf.evStatus) { uint e = 0, e1; if (~cevo & cev & EV_TXEMPTY) e = TCommStatus_EMPTY; cevo = cev; if (j & CE_FRAME) e |= TCommStatus_FRAME; if (j & (CE_OVERRUN | CE_RXOVER)) e |= TCommStatus_OVER; if (j & CE_RXPARITY) e |= TCommStatus_PARITY; if (j & CE_BREAK) e |= TCommStatus_BREAK; e |= (e1 = GetModemStatus()) ^ modemStatus; modemStatus = e1; if (e) { e |= e1 << 8; EvStatus *ped = new EvStatus; ped->dev = this; ped->status = e; SyncPost((NotifyEvent)HandleEvStatus, ped); } } } ... modemStatus = GetModemStatus(); while (!(zero.terminate | (uint)zero.wanted)) { if (!zero.waitCE) { if (WaitCommEvent(zero.hComm, &cev, &zero.ovr)) { CommEvent(); SetCommMask(zero.hComm, evMask); } else { VERIFY(GetLastError() == ERROR_IO_PENDING); zero.waitCE = 1; } } ... if (!hev[HEV_TX] || !hev[HEV_RX] || !zero.waitCE) continue; switch (j = WaitForMultipleObjects(ncell(hev), hev, false, CEV_PERIOD)) { case WAIT_TIMEOUT: CommEvent(); continue; case WAIT_OBJECT_0 + HEV_MAIN: ResetEvent(hev[HEV_MAIN]); continue; } VERIFY(j < (u32)(WAIT_OBJECT_0 + HEV_n)); ... и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gerber 8 31 августа, 2023 Опубликовано 31 августа, 2023 · Жалоба Убедитесь, что вы правильно передаёте имя порта в функцию CreateFile. Имя порта должно быть вида "\\.\COM44" (вместо COM44 ваш номер порта) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 7 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба On 9/1/2023 at 12:31 AM, gerber said: Убедитесь, что вы правильно передаёте имя порта в функцию CreateFile. Имя порта должно быть вида "\\.\COM44" (вместо COM44 ваш номер порта) сделал по примеру https://learn.microsoft.com/en-us/dotnet/api/system.io.file.create?view=net-7.0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
siargy 7 13 октября, 2023 Опубликовано 13 октября, 2023 · Жалоба Остановился на варианте - если порт не открылся, пробую открыть на 115.2к Из отловленных багов - при добавлении блютуз устройства в систему, необходимо удалять входящий порт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться