Tapi initialization error prolog

Передача данных через модем (TAPI) , Не работает передача, счетчик переданных байт всегда 0.

>
Передача данных через модем (TAPI)
, Не работает передача, счетчик переданных байт всегда 0.



Сообщ.
#1

,
05.05.07, 17:51

    Пытаюсь работать с модемом через TAPI.
    Все более или менее работает. Номер набирается, соединение устанавливается…
    Хэндл, для передачи данных получается. Покрайней мере ошибок не возникает. Хэндл получаю так:

    ExpandedWrap disabled

      procedure TiaFlowmeterModemTAPIProvider.afterConnected;

      var

        vVarString: LPVARSTRING;

      begin

        try

          try

            vVarString := AllocMem(1024);

            vVarString.dwTotalSize := 1024;

            {$WARNINGS OFF}

            TapiCheck(LineGetID(0, 0, fCall, LINECALLSELECT_CALL, vVarString, ‘comm/datamodem’));

            fCommHandle := PInteger(PChar(vVarString) + vVarString.dwStringOffset)^;

            {$WARNINGS ON}

          finally

            FreeMem(vVarString);

          end;

        except

          self.Close();

          raise;

        end;

      end;

    Здесь в fCommHandle выставляется некий хэндл, через который я потом пытаюсь писать данные вот так:

    ExpandedWrap disabled

      Var

        vOutBufLen: Cardinal;

        vWritedCount: Cardinal;

      begin

        If Not GetActive then

          raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);

        vOutBufLen := Length(aData);

        WriteFile(fCommHandle, aData[0], vOutBufLen, vWritedCount, nil);

        If vOutBufLen <> vWritedCount then

          raise EiaModemTAPIProviderError.Create(ERR_TP_WRITEDATAERROR, ERR_TP_WRITEDATAERROR_UIN, ERR_TP_WRITEDATAERROR_UIN);

    vOutBufLen всегда не равна vWritedBufLen, которая всегда равна 0.
    На той стороне тоже ничего не приходит! Пробовал посылать просто текстовую строку…

    Как правильно сделать???

    Master

    jack128



    Сообщ.
    #2

    ,
    06.05.07, 09:41

      почяему не проверяешь, что возвращает WriteFile?


      Felan



      Сообщ.
      #3

      ,
      07.05.07, 05:29

        Хм… не знаю. Не подумал об этом. Взял кусок из старого проекта где с ком-портом прога работала…
        Посмотрю в ближайшее время, как получится с напарником состыковаться для дозвона, что она там возвращает…
        А пока, мне пришла в голову одна мысль… Вроде как этот хэндл должен быть открыть асинхронно… А в асинхронном режиме, вроде как этот счетчик и должне равняться нулю…

        Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен! Только лишнее усложнение :(

        ЗЫЖ Почему в сетевое то? Уж тогда в работу с железом или АПИ :)

        Master

        jack128



        Сообщ.
        #4

        ,
        07.05.07, 07:29

          Цитата Felan @ 07.05.07, 05:29

          Хм… не знаю. Не подумал об этом.

          Знаешь, а тут думать не надо. Есть четкое правило — ВСЕГДА проверять коды возврата.

          Добавлено 07.05.07, 07:30

          Цитата Felan @ 07.05.07, 05:29

          Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен! Только лишнее усложнение

          никак. TAPI сама открывает порт, ты на это никак повлиять не можешь..


          medved_68



          Сообщ.
          #5

          ,
          07.05.07, 15:14

            Цитата Felan @ 07.05.07, 05:29

            А пока, мне пришла в голову одна мысль… Вроде как этот хэндл должен быть открыть асинхронно…

            Цитата jack128 @ 07.05.07, 07:29

            никак. TAPI сама открывает порт, ты на это никак повлиять не можешь..

            Цитата Felan @ 07.05.07, 05:29

            А в асинхронном режиме, вроде как этот счетчик и должне равняться нулю…

            GetOverlappedResult ??????


            Felan



            Сообщ.
            #6

            ,
            08.05.07, 16:43

              Так… Попробовал я посмотреть, что возвращается…
              Делал так:

              ExpandedWrap disabled

                procedure TiaFlowmeterModemTAPIProvider.Send(aData: TiaBuf;

                  const aDoSuccessEvent, aManageErrorEvent, aDoErrorEvent: Boolean);

                Var

                  vOutBufLen: Cardinal;

                  vWritedCount: Cardinal;

                  vWFResult: Boolean;

                  vError: Cardinal;

                  vOvr: TOverlapped;

                  vS: String;

                  Len: Integer;

                  Buffer: array[0..255] of Char;

                begin

                  If Not GetActive then

                    raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);

                  vOutBufLen := Length(aData);

                  SetLastError(0);

                  vWFResult := false;

                  vWFResult := WriteFile(fCommHandle, aData[0], vOutBufLen, vWritedCount, {@vOvr} nil);

                  vError := GetLastError;

                  Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or

                    FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, vError, 0, Buffer,

                    SizeOf(Buffer), nil);

                  while (Len > 0) and (Buffer[Len — 1] in [#0..#32, ‘.’]) do

                    Dec(Len);

                  SetString(vS, Buffer, Len);

                  vS := IntToStr(vError) + ‘: ‘ + vS;

                  if not vWFResult then

                    showmessage(vS);

                  If vOutBufLen <> vWritedCount then

                    raise EiaModemTAPIProviderError.Create(ERR_TP_WRITEDATAERROR, ERR_TP_WRITEDATAERROR_UIN, ERR_TP_WRITEDATAERROR_UIN);

                end;

              WriteFile возвращает всевремя false.
              Если в ней вместо vOvr, стоит nil то возвращается 87. Судя по MSDN это ERROR_INVALID_PARAMETER.
              Исли указать оверлаппед структуру, то возвращается 6 — ERROR_INVALID_HANDLE.

              1. Если я правильно понял, то писать данные синхронно нелзя совсем? :(
              2. Как тогда правильно получить хэндл, в который писать данные?


              Felan



              Сообщ.
              #7

              ,
              01.06.07, 05:03

                Вроде разобрался с этим всем. Все работает и передается.
                Есть еще такой вопрос. Когда делаем дисконнект почему не закрывается хэндл ком-порта(хэндл через который идет передача fCommHandle из поста #1)? Если он открывается неявно, то почему его надо закрывать самому?

                Получается, что если при дисконнекте(закрытии) соединения не сделать ему closehandle то в следующий раз соединение не устанавливаетя по «неизвестной причине», код тапи …000048.
                Если же его закрыть, то вроде все работает…

                Master

                jack128



                Сообщ.
                #8

                ,
                01.06.07, 07:13

                  Цитата Felan @ 01.06.07, 05:03

                  почему его надо закрывать самому?

                  потому что так написано в sdk ;-)


                  Felan



                  Сообщ.
                  #9

                  ,
                  01.06.07, 08:10

                    Блин… :) Где же я это пропустил-то… :)
                    Аж интересно прям теперь самому прочитать… Счас посмотрел по быстрому, опять не нашел.. :(


                    Felan



                    Сообщ.
                    #10

                    ,
                    08.06.07, 05:15

                      Следующая проблема.
                      На данном этапе все работает соединяется и передается. Но, когда циклически происходит опрос, и когда много раз… В моем случае это чтение записей архива устройства чтение очень часто зависает. Т.е. read попадает на (ERROR_IO_PENDING, она кстати всегда на нее попадает, но это вроде как нормально обрабатывается…) и этот пендинг никогда не заканчивается.

                      Чтение сделал так:

                      ExpandedWrap disabled

                        procedure TiaFlowmeterModemTAPIProvider.Receive(var aData: TiaBuf;

                          aCount: Cardinal; var aReadedCount: Cardinal; const aDoSuccessEvent,

                          aManageErrorEvent, aDoErrorEvent: Boolean);

                        Var

                          vOvr: TOverlapped;

                          vError: Cardinal;

                        begin

                          If Not GetActive then

                            raise EiaModemTAPIProviderError.Create(ERR_TP_PROVIDERINACTIVE, ERR_TP_PROVIDERINACTIVE_UIN, ERR_TP_PROVIDERINACTIVE_UIN);

                          SetLength(aData, aCount);

                          SetLastError(0);

                          vOvr.hEvent := CreateEvent(nil, false, false, nil);

                          //Читаем

                          try

                            {$WARNINGS OFF}

                            if ReadFile(fCommHandle, aData[0], aCount, aReadedCount, @vOvr) then

                              begin

                                //Проверка на правильность отправки

                                if not GetOverlappedResult(fCommHandle, vOvr, aReadedCount, true) then

                                  showErrorMessage(GetLastError);

                              end

                            else

                              begin

                                vError := GetLastError;

                                if (vError <> ERROR_IO_PENDING) then

                                  showErrorMessage(vError)

                                else

                                  begin

                                    if WaitForSingleObject(vOvr.hEvent, INFINITE) = WAIT_OBJECT_0 then

                                      begin

                                          begin

                                            //Проверка на правильность отправки

                                            if not GetOverlappedResult(fCommHandle, vOvr, aReadedCount, true) then

                                              begin

                                                vError := GetLastError;

                                                if (vError <> ERROR_IO_PENDING) then

                                                  showErrorMessage(vError);

                                              end;

                                          end

                                      end

                                    else

                                      begin

                                        if (vError <> ERROR_IO_PENDING) then

                                          showErrorMessage(vError)

                                      end;

                                  end;

                                end;

                            {$WARNINGS ON}

                          finally

                            CloseHandle(vOvr.hEvent);

                          end;

                          //Проверка на правильность принятия

                          If aCount <> aReadedCount then

                            raise EiaModemTAPIProviderError.Create(ERR_TP_READANSWERERROR, ERR_TP_READANSWERERROR_UIN, ERR_TP_READANSWERERROR_UIN);

                        end;

                      Так вот совершенно в случайном месте ожидание WaitForSingleObject(vOvr.hEvent, INFINITE) зависает до бесконечности…
                      Если вместо INFINITE поставить таймаут, то ессно по его истечению программа продолжает работать, и ессно получаем ошибку, т.к. не все байты приняты.

                      Так вот вопросы следующие:
                      1 При работе через модем нет никакого подтверждения доставки как в сокетах? Т.е. получается, что то что мне послали, впринципе может и не прийти, даже если соединение модемы не разорвали и надо еще раз повторить запрос?

                      2 Почему все время readFile попадает на ERROR_IO_PENDING? Даже в том случае, если чтение происходит первый раз, т.е. я псылаю первую команду, и пытаюсь читать ответ? Понятно, что при посылке я жду не опустожения буфера передачи, а момента, когда в этот буфер будет записано все, что я хочу передать, но ведь вроде полный дуплекс? Получается, что сначала надо дождаться, что бы передалось, а потом уже принимать?

                      3 Как вообще правильно поступать при приеме данных с модема? Как определить, что это какой-то случайная ошибка, что бы потом перезапросить данные?


                      medved_68



                      Сообщ.
                      #11

                      ,
                      08.06.07, 05:45

                        Цитата Felan @ 08.06.07, 05:15

                        1 При работе через модем нет никакого подтверждения доставки как в сокетах? Т.е. получается, что то что мне послали, впринципе может и не прийти, даже если соединение модемы не разорвали и надо еще раз повторить запрос?

                        Felan зачем ты заморачиваешься такой проблемой??? Ты отправил запрос и будь уверен, если канал связи налажен — то твой запрос дойдет. Как — это проблема модема. Если не получается отправить (рухнул канал) модем вернет ошибку связи, которую ты должен словить и обработать.

                        Цитата Felan @ 08.06.07, 05:15

                        2 Почему все время readFile попадает на ERROR_IO_PENDING?

                        Ну вообще то сей флаг указывает что процедура Overlapped нормально стартовала и не закончена, т.е. число переданных/принятых байт не равно числу запрашиваемых тобой при вызове функции Read/Write. Определять, что процедура Overlapped завершена (считано/записано нужное тебе количество байт) необходимо по установке евента, дескриптор которого ты передаешь в данную процедуру. И про GetOverlappedResult не забывать, она позволяет контролировать ход отправки получения. Если, например, в течении определенного времени число принятых байт остается равным, то проверяй состояние модема (статус) — может он уже орет тебе об ошибке канала и необходимо повторить либо установку связи, либо повторно отправить запрос на прием и т.д.


                        Felan



                        Сообщ.
                        #12

                        ,
                        08.06.07, 08:09

                          Суть то понятно. Я другое че-то никак не осмыслю. Связь то не рвется. А прием не заканчивается. Т.е. удаленный модем отправил данные, а они не все пришли… потерялись где-то по дороге или из-за ошибок или ище почему-то… Как это определить? Если сам модем это определяет, то что именно он говорит в таких случаях?
                          Я что-то смотрел в МСДН, но не понял, как это должно обрабатываться…
                          Если не трудно по подробнее объясни?

                          New issue

                          Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

                          By clicking “Sign up for GitHub”, you agree to our terms of service and
                          privacy statement. We’ll occasionally send you account related emails.

                          Already on GitHub?
                          Sign in
                          to your account


                          Open

                          lmichel opened this issue

                          Jan 3, 2017

                          · 11 comments


                          Open

                          Prolog initialisation failed

                          #54

                          lmichel opened this issue

                          Jan 3, 2017

                          · 11 comments

                          Comments

                          @lmichel

                          I’m sorry to reopen an issue which is rather likely a user support request (I’m an absolute beginner with Prolog). I guess that some other users can have to face the same problem.

                          I properly setup my swipl with Aptitude and swivm as suggested in thread #53

                          michel@obs-he-lm:~$ swipl --version
                          SWI-Prolog  version 7.2.3 for x86_64-linux
                          michel@obs-he-lm:~$ swipl
                          Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.2.3)
                          Copyright (c) 1990-2015 ....
                          ?- use_module(library(sgml)).
                          true.
                          ?- use_module(library(chr)).
                          true.

                          When I try to process a schema, I get nothing on stdout; then I switch to the trace mode and I get the following output (truncated).

                          michel@obs-he-lm:~$ xsd2json -t purchaseorder.xsd
                          CHR:   (0) Insert: node_attribute(/home/michel/purchaseorder.xsd,[0],xmlns:xsd,http://www.w3.org/2001/XMLSchema,source) # <0>
                          ....
                          ....
                          CHR:   (1) Redo: node_attribute(/home/michel/purchaseorder.xsd,[0],xmlns:xsd,http://www.w3.org/2001/XMLSchema,source) # <0>
                          CHR:   (0) Fail: node_attribute(/home/michel/purchaseorder.xsd,[0],xmlns:xsd,http://www.w3.org/2001/XMLSchema,source) # <0>
                          ERROR: Prolog initialisation failed:
                          ERROR: Domain error: `chr_port' expected, found `none'

                          I’ve no idea at all (and Google either) about that chr_port.
                          Is there some missing parameter or resource?

                          LM

                          @fnogatz

                          Could you please link to the used purchaseorder.xsd file or send it to (deleted), so I can have a look at it?

                          @lmichel

                          <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                          
                            <xsd:annotation>
                              <xsd:documentation xml:lang="en">
                               Purchase order schema for Example.com.
                               Copyright 2000 Example.com. All rights reserved.
                              </xsd:documentation>
                            </xsd:annotation>
                          
                            <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
                          
                            <xsd:element name="comment" type="xsd:string"/>
                          
                            <xsd:complexType name="PurchaseOrderType">
                              <xsd:sequence>
                                <xsd:element name="shipTo" type="USAddress"/>
                                <xsd:element name="billTo" type="USAddress"/>
                                <xsd:element ref="comment" minOccurs="0"/>
                                <xsd:element name="items"  type="Items"/>
                              </xsd:sequence>
                              <xsd:attribute name="orderDate" type="xsd:date"/>
                            </xsd:complexType>
                          
                            <xsd:complexType name="USAddress">
                              <xsd:sequence>
                                <xsd:element name="name"   type="xsd:string"/>
                                <xsd:element name="street" type="xsd:string"/>
                                <xsd:element name="city"   type="xsd:string"/>
                                <xsd:element name="state"  type="xsd:string"/>
                                <xsd:element name="zip"    type="xsd:decimal"/>
                              </xsd:sequence>
                              <xsd:attribute name="country" type="xsd:NMTOKEN"
                                             fixed="US"/>
                            </xsd:complexType>
                          
                            <xsd:complexType name="Items">
                              <xsd:sequence>
                                <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
                                  <xsd:complexType>
                                    <xsd:sequence>
                                      <xsd:element name="productName" type="xsd:string"/>
                                      <xsd:element name="quantity">
                                        <xsd:simpleType>
                                          <xsd:restriction base="xsd:positiveInteger">
                                            <xsd:maxExclusive value="100"/>
                                          </xsd:restriction>
                                        </xsd:simpleType>
                                      </xsd:element>
                                      <xsd:element name="USPrice"  type="xsd:decimal"/>
                                      <xsd:element ref="comment"   minOccurs="0"/>
                                      <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
                                    </xsd:sequence>
                                    <xsd:attribute name="partNum" type="SKU" use="required"/>
                                  </xsd:complexType>
                                </xsd:element>
                              </xsd:sequence>
                            </xsd:complexType>
                          
                            <!-- Stock Keeping Unit, a code for identifying products -->
                            <xsd:simpleType name="SKU">
                              <xsd:restriction base="xsd:string">
                                <xsd:pattern value="d{3}-[A-Z]{2}"/>
                              </xsd:restriction>
                            </xsd:simpleType>
                          
                          </xsd:schema>

                          fnogatz

                          added a commit
                          that referenced
                          this issue

                          Jan 3, 2017

                          @fnogatz

                          … be converted (issue #54)

                          fnogatz

                          added a commit
                          that referenced
                          this issue

                          Jan 3, 2017

                          @fnogatz

                          @fnogatz

                          The bug happened because of types starting with capital letters, in this case XSD’s built-in NMTOKEN, which was handled incorrectly and therefore recognized as a Prolog variable. I added three new tests and a fix, so the given purchaseorder.xsd example results in a valid JSON Schema representation.
                          Unfortunately I have to take a further look at the other example file you sent me via mail as it still fails.

                          @fnogatz

                          This is… strange. Unfortunately SWI-Prolog is not good at versioning (semver would be too easy, right?), but according to my information split_string/4 should be part of SWI-Prolog 7. I even tried with a local installation of v7.2.3 like you are using. Could you please open a SWI-Prolog REPL (simply call swipl from command line) and run the following query:

                          split_string('a:B',':','', L).
                          

                          Does this work? What’s the output?

                          edit: Replaced split_string/4 by atomic_list_concat/3 again for SWI6 portability.

                          @lmichel

                          Sorry, I ran a wrong swipl version (6.xx). The problem is that the installed xsd2json does not take into account the swivm predicat (use 7.2). That seems to work from the git clone:

                          michel@obs-he-lm:~/gitRepositories/xsd2json$ which swipl
                          /home/michel/.swivm/versions/7.2.3/bin/swipl

                          But that fails from the CLI.
                          If I, look at the xsd2json trace, I can see that the native install of swipl is invoked instead of the cloned one

                          michel@obs-he-lm:~/gitRepositories/xsd2json$ which swipl
                          /home/michel/.swivm/versions/7.2.3/bin/swipl
                          michel@obs-he-lm:~/gitRepositories/xsd2json$ strace -f xsd2json -t purchaseorder.xsd 2>&1 | grep swipl 
                          execve("/usr/lib/swi-prolog/bin/amd64/swipl", ["/usr/lib/swi-prolog/bin/amd64/sw"..., "-x", "/usr/bin/xsd2json", "--", "-t", "purch
                          aseorder.xsd"], [/* 70 vars */]) = 0
                          ....

                          This is a shell issue.

                          fnogatz

                          added a commit
                          that referenced
                          this issue

                          Jan 3, 2017

                          @fnogatz

                          @fnogatz

                          Nice catch! I am not sure why the wrong swipl executable is used. Nevertheless I checked the Prolog predicates specific for SWI-Prolog 7 and replaced them by predicates which work in both versions. So xsd2json is compatible to SWI-Prolog 6 again (v1.7.14@npm).
                          But this does yet not solve the problem for your second test file :)

                          @lmichel

                          Falco,

                          I confirm :
                          1) v1.7.14@npm works with swipl 6.xx.
                          2) Purchaseorder.xsd passes
                          3) VOTable.xsd fails on
                          ERROR: Prolog initialisation failed:
                          ERROR: Domain error: `chr_port’ expected, found `none’

                          LM

                          Le 03/01/2017 à 17:21, Falco Nogatz a écrit :

                          Nice catch! I am not sure why the wrong swipl executable is used. Nevertheless I checked the Prolog predicates specific for
                          SWI-Prolog 7 and replaced them by predicates which work in both versions. So xsd2json is compatible to SWI-Prolog 6 again
                          ***@***.***).
                          But this does yet not solve the problem for your second test file :)


                          You are receiving this because you authored the thread.
                          Reply to this email directly, view it on GitHub <#54 (comment)>, or mute
                          the thread <https://github.com/notifications/unsubscribe-auth/AK7n-NuQ8yi1KygA8FKMkemlz1u_hAW4ks5rOnWKgaJpZM4LZf_U>.


                          jesuischarlie/Tunis/Paris/Bruxelles/Berlin

                          Laurent Michel
                          SSC XMM-Newton
                          Tél : +33 (0)3 68 85 24 37
                          Fax : +33 (0)3 )3 68 85 24 32
                          Université de Strasbourg <http://www.unistra.fr>
                          Observatoire Astronomique
                          11 Rue de l’Université
                          F — 67200 Strasbourg

                          @fnogatz

                          Okay, had to rewrite quite some code but it is working now, even for your VOTable.xsd test file (just be patient — the translation takes about 12 seconds on my machine). The only thing that’s missing is the conversion of the following type:

                          <xs:complexType name="anyTEXT" mixed="true">
                            <xs:sequence>
                              <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
                            </xs:sequence>
                          </xs:complexType>
                          

                          I’m not sure this is the best way to specify an element that contains HTML in XML Schema. What would you expect to be a valid JSON Schema translation?

                          @fnogatz

                          The updated version is available as 1.8.0 on npm.

                          @lmichel

                          Thanks,

                          Le 03/01/2017 à 21:58, Falco Nogatz a écrit :

                          Okay, had to rewrite quite some code but it is working now, even for your |VOTable.xsd| test file (just be patient — the
                          translation takes about 12 seconds on my machine).

                          Never mind, It could take hours since this operation is meant to be rarely operated.

                          The only thing that’s missing is the conversion of the following type:

                          |<xs:complexType name=»anyTEXT» mixed=»true»> <xs:sequence> <xs:any minOccurs=»0″ maxOccurs=»unbounded» processContents=»skip»/>
                          </xs:sequence> </xs:complexType> |

                          I’m not sure this is the best way to specify an element that contains HTML in XML Schema. What would you expect to be a valid
                          JSON Schema translation?

                          This schema results from very long discussions to support an incredible number of use cases. So I couldn’t say why this
                          statement is here, but it cannot be changed for sure. AS far I understand, the problem comes from sequence of <xs:any>. This
                          element is supposed to contain some elements from another schema e.g. or an anything else. In our case this fragment is not
                          processed. It must therefore be considered as a string.
                          In term of JSON, that would mean that the element can contain a JSON string which must not be interpreted as an structured type.
                          Something like:
                          {«element» : «{key:value, key: value…..}»}
                          Considering this, I would say that using a JSON String for the xs:any should work, at least for our use case.

                          The real test to me is now to check the schema against data files … in progress
                          To do this, I’m using http://www.jsonschemavalidator.net/ (standalone version not free)

                          LM


                          jesuischarlie/Tunis/Paris/Bruxelles/Berlin

                          Laurent Michel
                          SSC XMM-Newton
                          Tél : +33 (0)3 68 85 24 37
                          Fax : +33 (0)3 )3 68 85 24 32
                          Université de Strasbourg <http://www.unistra.fr>
                          Observatoire Astronomique
                          11 Rue de l’Université
                          F — 67200 Strasbourg

                          @lmichel

                          In the generated JSON schema 2 complexTypes are actually missing:

                          1) #/definitions/anyTEXT as you said

                          2) #/definitions/Info : This definition is used within another definition (Data): might this cause trouble?

                          I replaces those types with Strings and started to create a basic and compliant data file: works fine right now.
                          LM

                          Le 03/01/2017 à 21:58, Falco Nogatz a écrit :

                          Okay, had to rewrite quite some code but it is working now, even for your |VOTable.xsd| test file (just be patient — the
                          translation takes about 12 seconds on my machine). The only thing that’s missing is the conversion of the following type:

                          |<xs:complexType name=»anyTEXT» mixed=»true»> <xs:sequence> <xs:any minOccurs=»0″ maxOccurs=»unbounded» processContents=»skip»/>
                          </xs:sequence> </xs:complexType> |

                          I’m not sure this is the best way to specify an element that contains HTML in XML Schema. What would you expect to be a valid
                          JSON Schema translation?


                          You are receiving this because you authored the thread.
                          Reply to this email directly, view it on GitHub <#54 (comment)>, or mute
                          the thread <https://github.com/notifications/unsubscribe-auth/AK7n-J02dzIoFytL-xQNXTt5iITiDKkQks5rOrZtgaJpZM4LZf_U>.


                          jesuischarlie/Tunis/Paris/Bruxelles/Berlin

                          Laurent Michel
                          SSC XMM-Newton
                          Tél : +33 (0)3 68 85 24 37
                          Fax : +33 (0)3 )3 68 85 24 32
                          Université de Strasbourg <http://www.unistra.fr>
                          Observatoire Astronomique
                          11 Rue de l’Université
                          F — 67200 Strasbourg

                          2 participants

                          @fnogatz

                          @lmichel


                          1. DRAHM

                            DRAHM

                            New Member

                            Публикаций:

                            0

                            Регистрация:
                            23 ноя 2006
                            Сообщения:
                            12

                            Достоинным добра и здоровья!!!
                            Есть ли у кого нибудь опыт написания прграмм для работы с модемом а то чето у меня все колом т.е. есть программка которая выводит звук с линии в колонки все нормально но через несколько минут модем виснит походу дело в настройках модема но как его настраивать не знаю.

                          2. DRAHM
                            Я рулил модемом непосредственно через AT команды. Модем у меня был внешний висел на последовательном порту. Но хочу отметить, что эта прога работала и с программными модемами на PCI, т.к. они распозновались так же как подключенные к COM порту но уже с большими индексам COM3, COM4. Таким образом я выбирал либо режим команд, либо режим передачи данных и выплевывал в порт либо AT команды либо данные соответственно.


                          3. DRAHM

                            DRAHM

                            New Member

                            Публикаций:

                            0

                            Регистрация:
                            23 ноя 2006
                            Сообщения:
                            12

                            Внимание дорого.
                            Пробываал я так.С начала открывал порт ( CreateFile ) у меня на модеме (внутр.) есть маленький спекер вот он при этом щелкает (также как при открыти через TAPI ) потом пишу в порт (WriteFile ) «ATDP1234»
                            по идеи модем должен начать набирать номер «1234» но почему то не реагирует ни как .
                            А если управлять через АТ то звук с линии уже наверно ни как не захватишь.
                            А что за прога интересно на неё взглянуть ?
                            Всем отдуши душевно
                            Пока всё ушел.


                          4. DRAHM

                            DRAHM

                            New Member

                            Публикаций:

                            0

                            Регистрация:
                            23 ноя 2006
                            Сообщения:
                            12

                            Ага тут я оду не срастуху заметил в своем примери.Так как очень мало информации о TAPI я пытаюсь методом «проб и ошибок» и случайно закоментарил
                            в void CALLBACK DDf две строки «ddd=1;и ddd=0;»

                          5. DRAHM
                            По поводу проги, это была прога сбора данных от узлов учета тепловой энергии. Т.е. стояли в разных точках города тепловычислители с модемами, я написал прогу, она к ним конектилась так же по модему и собирала данные по протоколу MODBUS, затем эти данные складываются в базу данных ну и обрабатываются. Если интересно могу скинуть листинги для работы с модемом.
                            А по поводу того что у тебя не пашет — возможно ты не совсем правильно работаешь с COM портом через API. Последовательность действий примерно такая:
                            — Открытие порта через CreateFile (кстати, я работал в асинхронном режиме Overlapped)
                            — Настройка параметорв порта через GetCommState, SetCommState, SetupComm
                            — Установка таймаутов через GetCommTimeOuts, SetCommTimeouts
                            — Непосредственно запись/чтение в порт WriteFile, ReadFile ()
                            Поищи эти функции по MSDN, а так же структуры TDCB, TCOMMTIMEOUTS, TCOMMSTATE
                            Для обмена данными рекомендую запускать отдельный поток опроса COM порта и использовать функции GetCommMask, SetCommMask, GetCommModemStatus, WaitCommEvent.

                            Попробуй сначала попросту послать команду AT, он в ответ должен выдать OK.


                          6. Proteus

                            Proteus

                            Member

                            Публикаций:

                            0

                            Регистрация:
                            19 июн 2004
                            Сообщения:
                            344
                            Адрес:
                            Russia

                            Там всё куда геморней. У меня на мобиле с Windows CE есть TAPI. Так там через него можно заставить телефон звонить куда-либо программно. Думаю через это все звонки и сделаны. Взяд такую вещь к модемным командам привяжут..

                          7. Proteus
                            Ты ошибаешься. Через AT команды так же можно с легкостью организовать дозвон ATDP -тональный набор, ATDT импульсный — набор. Более того предполагаю, что приложение, взаимодействуя с модемом через TAPI, так же в результате формирует AT команды.
                            Правда есть нюанс в том, что существуют стандартизированные команды, как то набор номера, а так же есть команды различающиеся от произодителя к производителю, но они, как правило, нечасто востребованы.

                          8. По TAPI может здесь чего нибудь нароешь:
                            http://www.exceletel.com/products/TeleTools/SamplePrograms/Index.htm
                            Пароль для архивов «ExceleTel»


                          9. cavy

                            cavy

                            New Member

                            Публикаций:

                            0

                            Регистрация:
                            20 сен 2007
                            Сообщения:
                            5

                            а никто не подскажет как узнать, какие протоколы поддерживает модем? (используя тот же TAPI…)


                          10. Vov4ick

                            Vov4ick

                            Владимир

                            Публикаций:

                            0

                            Регистрация:
                            8 окт 2006
                            Сообщения:
                            581
                            Адрес:
                            МО

                            Поспрашивать у него самого. АТ-команды зависят от марки модема, но есть те, которые поддерживаются большинством с незапамятных времён.
                            ATI0 … ATI7 — какие-то выводят марку модема, версию прошивки, макс. скорость.

                            Reporting Supported Range of Parameter Values
                            Command: +FCLASS=?
                            Response: +FCLASS: (n range)
                            Example: +FCLASS: (0, 1,1.0,8, 80)
                            0 Select Data Mode (Default.)
                            1 Select Facsimile Class 1 Mode
                            1.0 Select Facsimile Class 1 Mode
                            8 Select Voice Mode
                            80 Select VoiceView Mode

                            Это пожалуй основные команды, с помощью которых можно опознать модем и узнать, что он умеет. Поэкспериментируй с ними в терминале. Конкретнее надо смотреть в паспорте на модем. Если нужно, могу отмылить списки основных команд.


                          11. cavy

                            cavy

                            New Member

                            Публикаций:

                            0

                            Регистрация:
                            20 сен 2007
                            Сообщения:
                            5

                            так в том то и дело что должно на всех модемах работать… ну без всякого изврата типа адсл) но за подсказку спасибо ;)


                          WASM

                          programmer18

                          1 / 1 / 0

                          Регистрация: 24.11.2018

                          Сообщений: 54

                          1

                          06.02.2020, 20:12. Показов 9818. Ответов 8

                          Метки нет (Все метки)


                          Всем привет!
                          Подскажите, пожалуйста, в чем ошибка?

                          ругается на вторую строчку ERROR: c:/2.pl:2:1: Syntax error: Operator expected

                          Prolog
                          1
                          2
                          
                          domains
                            list = integer*

                          __________________
                          Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



                          0



                          Фрилансер

                          3703 / 2075 / 567

                          Регистрация: 31.05.2009

                          Сообщений: 6,683

                          06.02.2020, 22:39

                          2

                          Подозреваю, что Вы используете SWI-Prolog, а приведён код для Turbo или Visual.
                          В SWI-Prolog вообще не используется понятие домена, это версия без типизации



                          2



                          1 / 1 / 0

                          Регистрация: 24.11.2018

                          Сообщений: 54

                          07.02.2020, 11:13

                           [ТС]

                          3

                          дада, работаю swi-prolog редактор. Понятно…получается надо убрать domains?



                          0



                          Фрилансер

                          3703 / 2075 / 567

                          Регистрация: 31.05.2009

                          Сообщений: 6,683

                          07.02.2020, 11:23

                          4

                          Надо оставить только код из clauses
                          И то обычно надо доводить напильником



                          2



                          programmer18

                          1 / 1 / 0

                          Регистрация: 24.11.2018

                          Сообщений: 54

                          07.02.2020, 11:37

                           [ТС]

                          5

                          Вот получается код, который идет до goal.
                          Как мне тогда изменить и раздел predicates? подскажите, пожалуйста.

                          Prolog
                          1
                          2
                          3
                          4
                          5
                          6
                          7
                          8
                          9
                          10
                          11
                          12
                          13
                          14
                          15
                          
                          domains
                            list = integer*
                          predicates
                            member(integer,list)
                            create(list,list)
                            print(list)
                          clauses
                            member(X, [X|_]):- !.
                            member(X, [_|T]):- member(X, T).
                            create([], []).
                            create([H|T], [H|L]) :- member(H, T), create(T, L), not(member(H, L)).
                            create([_|T], L) :- create(T, L).
                            print([]) :- !.
                            print([H|[]]) :- write(H).
                            print([H|T]) :- write(H, ", "), print(T).

                          Добавлено через 5 минут
                          и потом list вызывается в goal.

                          Добавлено через 1 минуту
                          и что-то не еще с create в SWI-Prolog



                          0



                          Black Fregat

                          Фрилансер

                          3703 / 2075 / 567

                          Регистрация: 31.05.2009

                          Сообщений: 6,683

                          09.02.2020, 03:40

                          6

                          Я же написал

                          Цитата
                          Сообщение от Black Fregat
                          Посмотреть сообщение

                          Надо оставить только код из clauses
                          И то обычно надо доводить напильником

                          В данном случае «доводить напильником»:
                          1) выкинуть member, так как в SWI уже есть
                          2) разбить write на два, так как SWI не так понимает несколько параметров

                          Prolog
                          1
                          2
                          3
                          4
                          5
                          6
                          
                            create([], []).
                            create([H|T], [H|L]) :- member(H, T), create(T, L), not(member(H, L)).
                            create([_|T], L) :- create(T, L).
                            print([]) :- !.
                            print([H|[]]) :- write(H).
                            print([H|T]) :- write(H), write(", "), print(T).

                          Не проверял работу.



                          1



                          programmer18

                          1 / 1 / 0

                          Регистрация: 24.11.2018

                          Сообщений: 54

                          10.02.2020, 10:30

                           [ТС]

                          7

                          вот так пока получается. ругается на list, который в domains объявлялся. если list вообще убрать, программа выводит false.

                          его надо как-то объявлять?

                          Prolog
                          1
                          2
                          3
                          4
                          5
                          6
                          7
                          8
                          9
                          
                          goal :-
                            write( "список:"), nl,
                            read(list, L), nl,
                            append(L, RL),
                            write("результат:"), nl,
                            write('['),
                            print(RL),
                            write("]"), nl,
                            read(_).



                          0



                          Фрилансер

                          3703 / 2075 / 567

                          Регистрация: 31.05.2009

                          Сообщений: 6,683

                          10.02.2020, 13:06

                          8

                          В SWI предикат read не требует указания типа:

                          Код

                          ?- read(L).
                          |: [1,2,3].
                          
                          L = [1, 2, 3].
                          
                          ?-

                          Список вводить как положено в языке — со скобочками, запятыми и точкой в конце



                          1



                          1 / 1 / 0

                          Регистрация: 24.11.2018

                          Сообщений: 54

                          10.02.2020, 13:20

                           [ТС]

                          9

                          спасибо огромное! все учел,подправил!



                          0



                          IT_Exp

                          Эксперт

                          87844 / 49110 / 22898

                          Регистрация: 17.06.2006

                          Сообщений: 92,604

                          10.02.2020, 13:20

                          9

                          Понравилась статья? Поделить с друзьями:
                        • Tap0901 error failed to uninstall driver
                        • Tap устройство домена vpn выключено hamachi как исправить
                        • Tamper ошибка на терминале
                        • Tales of wind ошибка обновления
                        • Tales of wind код ошибки 2