Передача данных через модем (TAPI)
, Не работает передача, счетчик переданных байт всегда 0.
|
|
Пытаюсь работать с модемом через TAPI. 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 выставляется некий хэндл, через который я потом пытаюсь писать данные вот так: 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. Как правильно сделать??? |
jack128 |
|
почяему не проверяешь, что возвращает WriteFile? |
Felan |
|
Хм… не знаю. Не подумал об этом. Взял кусок из старого проекта где с ком-портом прога работала… Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен! Только лишнее усложнение ЗЫЖ Почему в сетевое то? Уж тогда в работу с железом или АПИ |
jack128 |
|
Цитата Felan @ 07.05.07, 05:29 Хм… не знаю. Не подумал об этом. Знаешь, а тут думать не надо. Есть четкое правило — ВСЕГДА проверять коды возврата. Добавлено 07.05.07, 07:30 Цитата Felan @ 07.05.07, 05:29 Как можно открыть этот хендл в синхронном режиме? Т.к. асинхронный режим мне вообще не нужен! Только лишнее усложнение никак. TAPI сама открывает порт, ты на это никак повлиять не можешь.. |
medved_68 |
|
Цитата Felan @ 07.05.07, 05:29 А пока, мне пришла в голову одна мысль… Вроде как этот хэндл должен быть открыть асинхронно… Цитата jack128 @ 07.05.07, 07:29 никак. TAPI сама открывает порт, ты на это никак повлиять не можешь.. Цитата Felan @ 07.05.07, 05:29 А в асинхронном режиме, вроде как этот счетчик и должне равняться нулю… GetOverlappedResult ?????? |
Felan |
|
Так… Попробовал я посмотреть, что возвращается… 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. 1. Если я правильно понял, то писать данные синхронно нелзя совсем? |
Felan |
|
Вроде разобрался с этим всем. Все работает и передается. Получается, что если при дисконнекте(закрытии) соединения не сделать ему closehandle то в следующий раз соединение не устанавливаетя по «неизвестной причине», код тапи …000048. |
jack128 |
|
Цитата Felan @ 01.06.07, 05:03 почему его надо закрывать самому?
потому что так написано в sdk |
Felan |
|
Блин… |
Felan |
|
Следующая проблема. Чтение сделал так: 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) зависает до бесконечности… Так вот вопросы следующие: 2 Почему все время readFile попадает на ERROR_IO_PENDING? Даже в том случае, если чтение происходит первый раз, т.е. я псылаю первую команду, и пытаюсь читать ответ? Понятно, что при посылке я жду не опустожения буфера передачи, а момента, когда в этот буфер будет записано все, что я хочу передать, но ведь вроде полный дуплекс? Получается, что сначала надо дождаться, что бы передалось, а потом уже принимать? 3 Как вообще правильно поступать при приеме данных с модема? Как определить, что это какой-то случайная ошибка, что бы потом перезапросить данные? |
medved_68 |
|
Цитата 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 |
|
Суть то понятно. Я другое че-то никак не осмыслю. Связь то не рвется. А прием не заканчивается. Т.е. удаленный модем отправил данные, а они не все пришли… потерялись где-то по дороге или из-за ошибок или ище почему-то… Как это определить? Если сам модем это определяет, то что именно он говорит в таких случаях? |
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
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
Could you please link to the used purchaseorder.xsd
file or send it to (deleted), so I can have a look at it?
<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
… be converted (issue #54)
fnogatz
added a commit
that referenced
this issue
Jan 3, 2017
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.
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.
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
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
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
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?
The updated version is available as 1.8.0 on npm.
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
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
-
DRAHM
New Member
- Публикаций:
-
0
- Регистрация:
- 23 ноя 2006
- Сообщения:
- 12
Достоинным добра и здоровья!!!
Есть ли у кого нибудь опыт написания прграмм для работы с модемом а то чето у меня все колом т.е. есть программка которая выводит звук с линии в колонки все нормально но через несколько минут модем виснит походу дело в настройках модема но как его настраивать не знаю. -
DRAHM
Я рулил модемом непосредственно через AT команды. Модем у меня был внешний висел на последовательном порту. Но хочу отметить, что эта прога работала и с программными модемами на PCI, т.к. они распозновались так же как подключенные к COM порту но уже с большими индексам COM3, COM4. Таким образом я выбирал либо режим команд, либо режим передачи данных и выплевывал в порт либо AT команды либо данные соответственно. -
DRAHM
New Member
- Публикаций:
-
0
- Регистрация:
- 23 ноя 2006
- Сообщения:
- 12
Внимание дорого.
Пробываал я так.С начала открывал порт ( CreateFile ) у меня на модеме (внутр.) есть маленький спекер вот он при этом щелкает (также как при открыти через TAPI ) потом пишу в порт (WriteFile ) «ATDP1234»
по идеи модем должен начать набирать номер «1234» но почему то не реагирует ни как .
А если управлять через АТ то звук с линии уже наверно ни как не захватишь.
А что за прога интересно на неё взглянуть ?
Всем отдуши душевно
Пока всё ушел. -
DRAHM
New Member
- Публикаций:
-
0
- Регистрация:
- 23 ноя 2006
- Сообщения:
- 12
Ага тут я оду не срастуху заметил в своем примери.Так как очень мало информации о TAPI я пытаюсь методом «проб и ошибок» и случайно закоментарил
в void CALLBACK DDf две строки «ddd=1;и ddd=0;» -
DRAHM
По поводу проги, это была прога сбора данных от узлов учета тепловой энергии. Т.е. стояли в разных точках города тепловычислители с модемами, я написал прогу, она к ним конектилась так же по модему и собирала данные по протоколу MODBUS, затем эти данные складываются в базу данных ну и обрабатываются. Если интересно могу скинуть листинги для работы с модемом.
А по поводу того что у тебя не пашет — возможно ты не совсем правильно работаешь с COM портом через API. Последовательность действий примерно такая:
— Открытие порта через CreateFile (кстати, я работал в асинхронном режиме Overlapped)
— Настройка параметорв порта через GetCommState, SetCommState, SetupComm
— Установка таймаутов через GetCommTimeOuts, SetCommTimeouts
— Непосредственно запись/чтение в порт WriteFile, ReadFile ()
Поищи эти функции по MSDN, а так же структуры TDCB, TCOMMTIMEOUTS, TCOMMSTATE
Для обмена данными рекомендую запускать отдельный поток опроса COM порта и использовать функции GetCommMask, SetCommMask, GetCommModemStatus, WaitCommEvent.Попробуй сначала попросту послать команду AT, он в ответ должен выдать OK.
-
Proteus
Member
- Публикаций:
-
0
- Регистрация:
- 19 июн 2004
- Сообщения:
- 344
- Адрес:
- Russia
Там всё куда геморней. У меня на мобиле с Windows CE есть TAPI. Так там через него можно заставить телефон звонить куда-либо программно. Думаю через это все звонки и сделаны. Взяд такую вещь к модемным командам привяжут..
-
Proteus
Ты ошибаешься. Через AT команды так же можно с легкостью организовать дозвон ATDP -тональный набор, ATDT импульсный — набор. Более того предполагаю, что приложение, взаимодействуя с модемом через TAPI, так же в результате формирует AT команды.
Правда есть нюанс в том, что существуют стандартизированные команды, как то набор номера, а так же есть команды различающиеся от произодителя к производителю, но они, как правило, нечасто востребованы. -
По TAPI может здесь чего нибудь нароешь:
http://www.exceletel.com/products/TeleTools/SamplePrograms/Index.htm
Пароль для архивов «ExceleTel» -
cavy
New Member
- Публикаций:
-
0
- Регистрация:
- 20 сен 2007
- Сообщения:
- 5
а никто не подскажет как узнать, какие протоколы поддерживает модем? (используя тот же TAPI…)
-
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Это пожалуй основные команды, с помощью которых можно опознать модем и узнать, что он умеет. Поэкспериментируй с ними в терминале. Конкретнее надо смотреть в паспорте на модем. Если нужно, могу отмылить списки основных команд.
-
cavy
New Member
- Публикаций:
-
0
- Регистрация:
- 20 сен 2007
- Сообщения:
- 5
так в том то и дело что должно на всех модемах работать… ну без всякого изврата типа адсл) но за подсказку спасибо
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
__________________
0 |
Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
|
06.02.2020, 22:39 |
2 |
Подозреваю, что Вы используете SWI-Prolog, а приведён код для Turbo или Visual.
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.
Добавлено через 5 минут Добавлено через 1 минуту
0 |
Black Fregat Фрилансер 3703 / 2075 / 567 Регистрация: 31.05.2009 Сообщений: 6,683 |
||||
09.02.2020, 03:40 |
6 |
|||
Я же написал
Надо оставить только код из clauses В данном случае «доводить напильником»:
Не проверял работу.
1 |
programmer18 1 / 1 / 0 Регистрация: 24.11.2018 Сообщений: 54 |
||||
10.02.2020, 10:30 [ТС] |
7 |
|||
вот так пока получается. ругается на list, который в domains объявлялся. если list вообще убрать, программа выводит false. его надо как-то объявлять?
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 |