Меню

Com write err 995 значение ошибки эквайринг

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    При чтении сом порта возникает ошибка 995, как побороть?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    04.03.13, 09:31

      Full Member

      ***

      Рейтинг (т): 1

      Работаю с СОМ портом. Периодически возникает ошибка 995 «The I/O operation has been aborted because of either thread exit or an application request»
      лечится закрытием о открытием порта заново. Но я так думаю, что это не правильно. Как побороть? Или так и должно быть?


      Dem_max



      Сообщ.
      #2

      ,
      04.03.13, 09:38

        Мы тоже можем гадать почему такое происходит


        shm



        Сообщ.
        #3

        ,
        04.03.13, 09:56

          Ну что ж, гадаем: предполагаю, что ты прибиваешь поток, в котором работаешь с искомым портом, с помощью TerminateThread.

          Добавлено 04.03.13, 09:58
          А так у тебя есть как минимум три варианта:
          1. Искать причину самому.
          2. Подробно описать алгоритм взаимодействия с портом.
          3. Запортить сюда соответствующий кусок кода.

          Добавлено 04.03.13, 10:06
          Также есть подозрение, что автор о ClearCommError не слышал, хотя ее использование в данной ситуации все равно будет костылем.


          a_n_y_a



          Сообщ.
          #4

          ,
          22.03.13, 11:05

            Full Member

            ***

            Рейтинг (т): 1

            Цитата shm @ 04.03.13, 09:56

            Ну что ж, гадаем: предполагаю, что ты прибиваешь поток, в котором работаешь с искомым портом, с помощью TerminateThread.

            Добавлено 04.03.13, 09:58
            А так у тебя есть как минимум три варианта:
            1. Искать причину самому.
            2. Подробно описать алгоритм взаимодействия с портом.
            3. Запортить сюда соответствующий кусок кода.

            Добавлено 04.03.13, 10:06
            Также есть подозрение, что автор о ClearCommError не слышал, хотя ее использование в данной ситуации все равно будет костылем.

            Искал причину сам, и вот что обнаружил. Есть две программки, которые обмениваются по 422 порту сообщениями.
            Если запущены обе и идет обмен, то через некотоое время при управлении потоком чтения, возникает ошибка 995. Если запустить только одну программку, ту в которой возникает эта ошибка 995, она работает без ошибок, деже при многократном управлении процессом обмена. Управление обменом состоит в включении и выключении выполнения куска кода анализа принятого сообщения.
            Не могу приатачить код, не позволяют секретные службы нашего концерна.


            Dem_max



            Сообщ.
            #5

            ,
            22.03.13, 13:07

              Ну в чтении порта ничего секретного нету.


              a_n_y_a



              Сообщ.
              #6

              ,
              02.04.13, 10:23

                Full Member

                ***

                Рейтинг (т): 1

                Нашел в интернете документик
                «Работа с коммуникационными портами (COM и LPT) в программах для Win32»
                В котором в частности описана функция

                ExpandedWrap disabled

                  BOOL ClearCommError(

                  HANDLE hFile,

                  LPDWORD lpErrors,

                  LPCOMSTAT lpStat

                  );

                И о чудо, я получил причину моей ошибки. Оказалось, что у меня переполняется приемный буфер! Длина моего сообщение 4018 байт, а буфер имеет длину 4096 байт.
                Отсюда вопрос, как правильно определить необходимую длину буфера?

                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                0 пользователей:

                • Предыдущая тема
                • C/C++: Системное программирование и WinAPI
                • Следующая тема

                Рейтинг@Mail.ru

                [ Script execution time: 0,0234 ]   [ 16 queries used ]   [ Generated: 28.01.23, 17:30 GMT ]  

                • Remove From My Forums
                • Question

                • hi,

                  Iam working on windowsxp with vc7. At times when i try to access the com port and read some value, there is an error 995, returned by GetLastError().

                  the com port is openned using winapi createfile.

                  I’ve also set the flag…

                            dcb.fAbortOnError=1;

                  Can somebody please let me know why this happenns and any possible solution for this.

                  Thanks,

                  Srikanth.

                Answers

                • I have not used fAbortOnError myself, but have you tried using ClearCommError to clear any comms errors such as parity, overrun etc.

                  What I have found is that unless ClearCommError is checked on a regular basis, reads/writes after a comms error will fail.

                • The first thing to do is to determine what 995 means. You can get that done for you automatically by your program using the FormatMessage function. Or you can use the Error Lookup tool in VS. Or you can open winerror.h and find error 995 there. The advantage of winerror.h is that you can also determine the symbolic name for the error code; for 995 it is ERROR_OPERATION_ABORTED.

                  Using ERROR_OPERATION_ABORTED you can search the MSDN for explanations and examples. Based on the description of the error, I think it is necessary to know the context of the error to answer your questions.

                Я искал stackoverflow и тщательно искал эту проблему, но не смог найти ключ к тому, почему эта проблема происходит.

                Я пишу программу на С++, которая общается с измерительным устройством, подключенным через USB. Программа многопоточна, и несколько потоков будут взаимодействовать с устройством. Мьютекс используется, чтобы гарантировать, что ни одна из двух потоков не пытается читать или писать с устройства в одно и то же время.

                Команды отправляются на устройство с помощью WriteFile, а ответы и измеренные значения считываются с помощью ReadFile — обе операции выполняются синхронно.

                Иногда при чтении измеренного значения с устройства произойдет сбой измерения с тайм-аутом (GetLastError() возвращает код ошибки 121) из-за ошибки синхронизации внутри самого измерительного устройства — это нормально и ожидаемо.

                Когда я пытаюсь продолжить измерение, посылая новую команду, WriteFile иногда (примерно 50% времени) терпит неудачу, а GetLastError() возвращает код ошибки 995, который описан в MSDN как:

                ERROR_OPERATION_ABORTED

                995 (0x3E3)
                
                

                The I/O operation has been aborted because of either a thread exit or an application request.

                После истечения таймаута нет потока, и отменить операцию чтения или записи невозможно. Я могу возобновить связь только путем закрытия и повторного открытия связи с устройством с помощью CloseHandle и CreateFile. Однако это займет некоторое время от измерения и не является идеальным решением.

                Мой вопрос: почему WriteFile возвращает код ошибки 995 в этом случае и что я могу сделать, чтобы не закрывать и не открывать связь с устройством?

                Ошибка SQLVDI и 995,1003Данные ошибки связаны с созданием резервной копии (Backup).

                Рассмотрим сначала ошибку 995 и 1003

                Может возникнуть на 32-битной операционной системе.

                Примеры ошибок:

                •  995(The I/O operation has been aborted because of either a thread exit or an application request.)
                • 995(failed to retrieve text for this error. Reason: 1815)
                • 1003(Не удается завершить выполнение функции.)

                Решение:

                • Основная причина данных ошибок — проблема с создание backup, поэтому следует внимательно посмотреть весь механизм его создания и найти причину ошибок
                • Возможно поможет запустить сервер с параметром -g 384 (для SQL SERVER 2000) или -g 512 (для SQL SERVER 2005), желательно чтобы было более 2 Gb памяти
                • Перезагрузить SQL SERVER

                Вернёмся к SQLVDI

                Причины возникновения:

                • Таймаут процесса backup
                • Не хватает прав доступа
                • На больших БД, когда делается VSS (Volume Shadow Copy Service)
                • Плохой код сторонней программы, которая неверно работает с dll — SQLVDI.dll
                • Старая версия SQLVDI.dll

                Примеры ошибок:

                • ‘SQLVDI’ EventID 1: SQLVDI: Loc=SignalAbort. Desc=Client initiates abort. ErrorCode=(0). Process=6396. Thread=6816. Client. Instance=. VD=GlobalTDPSQL-000018FC-0000_SQLVDIMemoryName_0.
                • ‘SQLVDI’ EventID 1: SQLVDI: Loc=SignalAbort. Desc=Client initiates abort. ErrorCode=(0). Process=5896. Thread=2860. Client. Instance=SQLDB02. VD=GlobalTDPSQL-00001708-0000_SQLVDIMemoryName_0.

                Способы решения проблемы:

                • Обновить SQL Server. В частности могут помочь следующие KB (KB934396,KB936305,KB50000895). Найти все KB можно по этой ссылке
                • Зарегистрировать последнюю версию SQLVDI.dll и зарегистрировать её в системе. Для этого необходимо Пуск >> Выполнить >> RegSrv32 путьSQLVDI.dll. По-умолчанию устанавливается в C:Program FilesMicrosoft SQL Server80COM
                • Посмотрите дополнительную информацию в SQL Server ERROR.LOG
                • Данный способ Backup использует VSS (Volume Shadow Copy Service), поэтому имеет смысл проверить его статус. Для этого выполните под правами администратора Пуск >> Выполнить >> vssadmin list writers >> убедиться в отсутствии ошибок в выводе и в наличии последней версии ПО

                Запись опубликована в рубрике Мониторинг с метками error. Добавьте в закладки постоянную ссылку.

                I have searched stackoverflow and googled thoroughly for this problem but not been able to find a clue to why this problem is happening.

                I am writing a program in C++ which communicates with a measurement device connected through USB. The program is multithreaded and several threads will communicate with the device. A mutex is used to guarantee that no two threads try to read or write from the device at the same time.

                Commands are sent to the device using WriteFile and the responses and measured values are read using ReadFile — both operations are done synchronously.

                Sometimes while reading the measured value from the device will the measurement fail with a timeout (GetLastError() returns error code 121), due to a synchronization error inside the measurement device itself — which is ok and expected.

                When I try to continue the measurement, by sending a new command will WriteFile sometimes (roughly 50% of the time) fail and GetLastError() returns the error code 995 which is described in MSDN as:

                ERROR_OPERATION_ABORTED

                995 (0x3E3)
                
                The I/O operation has been aborted because of either a thread exit or an application request.
                

                There is no thread exit after the timeout occurs and there is no cancel of any read or write operation. I am able to resume the communication only by closing and re-opening the communication with the device using CloseHandle and CreateFile. However, this will take some time from the measurement and is not an ideal solution.

                My question is, why does WriteFile return the error code 995 in this case, and what can I do to avoid having to close and re-open the communication with the device?

                Добрый день!
                Помогите решить проблему.
                Версия KKM web-сервер: 2.1.28.10
                Обновление ПО и драйверов терминала от 30.05.2019

                При запуске KKM не проходит инициализация устройства. В логах
                Изображение
                В логах терминала:

                Код: Выделить всё

                31.05 17:38:19 PILOT: GATE.DLL loaded
                31.05 17:38:19 GATE: lock:'0000059C' 'UPOSWINMUTEX2'
                31.05 17:38:19 SBKRNL: Open com 4
                31.05 17:38:20 SBKRNL: Close com 4
                31.05 17:38:20 GATE: unlock:'0000059C'
                31.05 17:38:20 PILOT: Auxiliary func 13: result=0
                31.05 17:38:20 PILOT: Unloading GATE.DLL...
                31.05 17:38:20 GATE: SB_KERNEL.DLL is unloaded
                31.05 17:38:20 GATE: UPDATER.DLL is unloaded
                31.05 17:38:20 PILOT: GATE.DLL unloaded
                

                Далее, из интерфейса сервера проводится тестовый платеж, который завершается ошибкой. При этом на терминале выводится предложение об оплате картой с тестовой суммой.
                Ошибка KKM

                Код: Выделить всё

                {
                    "CardNumber": "",
                    "ReceiptNumber": "",
                    "RRNCode": "",
                    "AuthorizationCode": "",
                    "Slip": "",
                    "PrintSlipOnTerminal": false,
                    "Amount": 0,
                    "Command": "PayByPaymentCard",
                    "Error": "Message: Ошибка вызова функции '_card_authorize8' в dll, Error # Внешний компонент создал исключение..Message: Ошибка вызова функции '_card_authorize8' в dll, Error # Внешний компонент создал исключение..",
                    "Warning": "",
                    "Status": 2,
                    "IdCommand": "5103ce97-49a5-eed3-042f-b35d7e2256e8",
                    "NumDevice": 2
                }
                

                Логи терминала

                Код: Выделить всё

                31.05 17:51:03 PILOT: card_authorize8: track2=(null), TRType=1, CType=0, Amount=100
                31.05 17:51:03 PILOT: Dump[000..173):0100000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                31.05 17:51:03 PILOT: Loading GATE.DLL
                31.05 17:51:03 GATE: SB_KERNEL.DLL is loaded
                31.05 17:51:03 GATE: UPDATER.DLL is loaded
                31.05 17:51:03 GATE: lock:'000005E8' 'UPOSWINMUTEX2'
                31.05 17:51:03 GATE: unlock:'000005E8'
                31.05 17:51:03 PILOT: GATE.DLL loaded
                31.05 17:51:03 GATE: lock:'00000414' 'UPOSWINMUTEX2'
                31.05 17:51:03 SBKRNL: Command = 4000, Amount = 1.00
                31.05 17:51:03 SBKRNL: Open com 4
                31.05 17:51:04 SBKRNL: Session -1764398827 was aborted. Try to restore last session result.
                31.05 17:51:04 PILOT: Unloading GATE.DLL...
                31.05 17:51:04 GATE: SB_KERNEL.DLL is unloaded
                31.05 17:51:04 GATE: UPDATER.DLL is unloaded
                31.05 17:51:04 PILOT: GATE.DLL unloaded
                

                После, любые действия с терминалом невозможны.
                После отмены оплаты на терминале, попытка вызвать оплату еще раз.
                Код ошибки KKM

                Код: Выделить всё

                {
                    "CardNumber": "",
                    "ReceiptNumber": "",
                    "RRNCode": "",
                    "AuthorizationCode": "",
                    "Slip": "",
                    "PrintSlipOnTerminal": false,
                    "Amount": 0,
                    "Command": "PayByPaymentCard",
                    "Error": "115 (Ошибка иниц.) : Неизвестный код ошибки",
                    "Warning": "",
                    "Status": 2,
                    "IdCommand": "468a4772-8b70-3934-29fe-61e9e9187a8e",
                    "NumDevice": 2
                }
                

                Лог терминала.

                Код: Выделить всё

                31.05 17:56:24 PILOT: card_authorize8: track2=(null), TRType=1, CType=0, Amount=100
                31.05 17:56:24 PILOT: Dump[000..173):0100000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                31.05 17:56:24 PILOT: Loading GATE.DLL
                31.05 17:56:24 GATE: SB_KERNEL.DLL is loaded
                31.05 17:56:24 GATE: UPDATER.DLL is loaded
                31.05 17:56:29 GATE: lock failed:'00000318' 'UPOSWINMUTEX2'
                31.05 17:56:29 GATE: unlock:'00000318'
                31.05 17:56:29 PILOT: GATE.DLL busy. Please complete previous operation.
                31.05 17:56:29 PILOT: Unloading GATE.DLL...
                31.05 17:56:29 GATE: SB_KERNEL.DLL is unloaded
                31.05 17:56:29 GATE: UPDATER.DLL is unloaded
                31.05 17:56:29 PILOT: GATE.DLL unloaded
                31.05 17:56:29 PILOT: card_authorize8: result=115, RC=99, cheque=No, vas=0
                31.05 17:56:29 PILOT: Dump[000..173):0100000064000000393900CEF8E8E1EAE020E8EDE8F62E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
                

                0 0 голоса
                Рейтинг статьи
                Подписаться
                Уведомить о
                guest

                0 комментариев
                Старые
                Новые Популярные
                Межтекстовые Отзывы
                Посмотреть все комментарии

                А вот еще интересные материалы:

              • Яшка сломя голову остановился исправьте ошибки
              • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
              • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
              • Com timestamp ошибка работы со штампом времени
              • Com surrogate выдает ошибку