Как получить данные с com-порта?

Обсуждение программ nnCron и nnCron LITE

Re: Как получить данные с com-порта?

Postby Halfer » Tue, 29 Sep 2009, 08:52

З.Ы. Упс, прогнал. после
Code: Select all
HERE DUP 15 handle READ-FILE THROW MsgBox

выводится не пустая строка, а строка с символами - несколько кракозябр в начале и слово WinSoc 2.0. думаю, дело в том, что нужно другие параметры для порта выставлять. Cам сканер настроен следующим образом: 2400, 8, 1, NONE, NONE.
Halfer
 
Posts: 395
Joined: Wed, 09 May 2007, 13:23

Re: Как получить данные с com-порта?

Postby Wyz » Tue, 29 Sep 2009, 11:06

MsgBox хочет au (и az ;-) строку) - вставь перед MsgBox "DUP 15 + 0 SWAP C! 15".
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

Re: Как получить данные с com-порта?

Postby Ilya » Tue, 29 Sep 2009, 22:22

Halfer wrote:З.Ы. Упс, прогнал. после
Code: Select all
HERE DUP 15 handle READ-FILE THROW MsgBox

выводится не пустая строка, а строка с символами - несколько кракозябр в начале и слово WinSoc 2.0. думаю, дело в том, что нужно другие параметры для порта выставлять. Cам сканер настроен следующим образом: 2400, 8, 1, NONE, NONE.

Дык и настрой порт
Code: Select all
 2400 8 0 1 handle SetModemParameters THROW
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Как получить данные с com-порта?

Postby Ilya » Tue, 29 Sep 2009, 22:32

Wyz wrote:MsgBox хочет au (и az ;-) строку) - вставь перед MsgBox "DUP 15 + 0 SWAP C! 15".

Почти правильно :wink: - READ-FILE оставляет на стеке кол-во принятых байт.
Правильней будет
Code: Select all
OVER OVER + 0 SWAP C! MsgBox

А ещё лучше для данных (вместо HERE) завести свой буфер.
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Как получить данные с com-порта?

Postby Halfer » Wed, 30 Sep 2009, 03:48

Если честно, я уже потерял нить понимания :-( Вот такая задача
Code: Select all
#( read-com-data
   0 VALUE handle
   NoActive
Action:
   BEGIN
      S" COM1" R/W OPEN-FILE THROW TO handle
      2400 8 0 1 handle SetModemParameters THROW
      100 handle SetTimeOut THROW
      HERE DUP 15 handle READ-FILE THROW OVER OVER + 0 SWAP C! MsgBox
      handle CLOSE-FILE THROW
   AGAIN
)#

всегда возвращает пустую строку, даже если ШК считан. ЧТо не так?
Halfer
 
Posts: 395
Joined: Wed, 09 May 2007, 13:23

Re: Как получить данные с com-порта?

Postby Ilya » Wed, 30 Sep 2009, 11:28

Halfer wrote:Если честно, я уже потерял нить понимания :-( Вот такая задача
Code: Select all
#( read-com-data
   0 VALUE handle
   NoActive
Action:
   BEGIN
      S" COM1" R/W OPEN-FILE THROW TO handle
      2400 8 0 1 handle SetModemParameters THROW
      100 handle SetTimeOut THROW
      HERE DUP 15 handle READ-FILE THROW OVER OVER + 0 SWAP C! MsgBox
      handle CLOSE-FILE THROW
   AGAIN
)#

всегда возвращает пустую строку, даже если ШК считан. ЧТо не так?

А как ты понимаешь что ШК считан (а тем паче правильно считан)?
Чё-то здесь не так !
1) После THROW - добавь
Code: Select all
DUP CR ." Прочитано: " .

2) Поставь после MsgBox добавь-
Code: Select all
HERE 20 CR DUMP

3) После
Code: Select all
HERE 20 CR DUMP
- добавь
Code: Select all
 LPCOMSTAT com_error handle ClearCommError DROP com_error @ CR ." com_error=" .

Прочитай пару раз ШК и посмотри/покажи нам , что ты увидел в nncron.out !
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Как получить данные с com-порта?

Postby Halfer » Thu, 01 Oct 2009, 02:39

Ilya wrote:Прочитай пару раз ШК и посмотри/покажи нам , что ты увидел в nncron.out !

вот задача:
Code: Select all
#( read-com-data
   0 VALUE handle
   NoActive
Action:
   BEGIN
      S" COM1" R/W OPEN-FILE THROW TO handle
      2400 8 0 1 handle SetModemParameters THROW
      100 handle SetTimeOut THROW DUP CR ." Прочитано: " .
      HERE DUP 15 handle READ-FILE THROW OVER OVER + 0 SWAP C! MsgBox
      HERE 20 CR DUMP LPCOMSTAT com_error handle ClearCommError DROP com_error @ CR ." com_error=" .
      handle CLOSE-FILE THROW
   AGAIN
)#

вот то, что в дампе:
Code: Select all
Прочитано: -2065149416

51EAC8   00 01 02 02  57 69 6E 53  6F 63 6B 20  32 2E 30 00 ....WinSock 2.0.
51EAD8   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
com_error=0
Прочитано: -2065149416

51EAC8   00 00 00 78  00 00 78 00  00 00 78 00  7E 00 78 00 ...x..x...x.~.x.
51EAD8   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
com_error=28
Прочитано: -2065149416
Halfer
 
Posts: 395
Joined: Wed, 09 May 2007, 13:23

Re: Как получить данные с com-порта?

Postby Ilya » Fri, 02 Oct 2009, 01:06

Halfer wrote:
Code: Select all
Прочитано: -2065149416

51EAC8   00 01 02 02  57 69 6E 53  6F 63 6B 20  32 2E 30 00 ....WinSock 2.0.
51EAD8   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
com_error=0
Прочитано: -2065149416

51EAC8   00 00 00 78  00 00 78 00  00 00 78 00  7E 00 78 00 ...x..x...x.~.x.
51EAD8   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
com_error=28
Прочитано: -2065149416

Млин, ведь у тебя раньше получалось читать данные!?
Короче нифига мы не читаем ШК! :(
+ ты допустил маленькую ошибку.
Чёй-то мы неправильно настраиваем порт (скорее всего).
Попробуй без изменений запустить следующее:
Code: Select all
#( com-speed
CREATE com-buf 20 ALLOT
CREATE ecm 2 C, 39 C, 39 C, 39 C, 39 C, 39 C, 39 C, 3 C,
: ack?
PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR OR OR OR com-handle PurgeComm DROP
ecm 8 com-handle WRITE-FILE THROW
10 PAUSE
com-buf DUP 1 com-handle READ-FILE THROW CR ." Прочитано: " .
com-buf 20 CR DUMP LPCOMSTAT com_error com-handle ClearCommError DROP com_error @ CR ." com_error=" .
com-buf C@ 6 = IF CR ." Удача!" ELSE CR ." Промах!" THEN
;
NoActive
Action:
 S" COM1" R/W OPEN-FILE THROW TO handle
      10 handle SetTimeOut THROW
      2400 8 0 1 com-handle SetModemParameters THROW
     CR S" 2400" TYPE
      ack?
     4800 8 0 1 com-handle SetModemParameters THROW
     CR S" 4800" TYPE
      ack?
     9600 8 0 1 com-handle SetModemParameters THROW
     CR S" 9600" TYPE
      ack?
     14400 8 0 1 com-handle SetModemParameters THROW
     CR S" 14400" TYPE
      ack?
     19200 8 0 1 com-handle SetModemParameters THROW
     CR S" 19200" TYPE
      ack?
     38400 8 0 1 com-handle SetModemParameters THROW
     CR S" 38400" TYPE
      ack?
     56000 8 0 1 com-handle SetModemParameters THROW
     CR S" 56000" TYPE
      ack?
     57600 8 0 1 com-handle SetModemParameters THROW
     CR S" 57600" TYPE
      ack?
     115200 8 0 1 com-handle SetModemParameters THROW
     CR S" 115200" TYPE
      ack?
      com-handle CLOSE-FILE THROW
)#
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Как получить данные с com-порта?

Postby Halfer » Fri, 02 Oct 2009, 04:08

Ilya wrote:Млин, ведь у тебя раньше получалось читать данные!?
Короче нифига мы не читаем ШК! :(
+ ты допустил маленькую ошибку.
Чёй-то мы неправильно настраиваем порт (скорее всего).

Изначально у меня ШК считывался через другую задачу, пример которой был ранее. Там всё работало отлично, за исключением того, что иногда ШК не полностью считывался, видимо заканчивался тайм-айт на открытый порт. Там порт настроен следующим образом 2400,8,1,NONE,NONE. Всё отлично считывалось.
Ilya wrote:Попробуй без изменений запустить следующее

.. ругается на синтаксическую ошибку в кронтабе.
Halfer
 
Posts: 395
Joined: Wed, 09 May 2007, 13:23

Re: Как получить данные с com-порта?

Postby Ilya » Fri, 02 Oct 2009, 10:09

Halfer wrote:Изначально у меня ШК считывался через другую задачу, пример которой был ранее. Там всё работало отлично, за исключением того, что иногда ШК не полностью считывался, видимо заканчивался тайм-айт на открытый порт. Там порт настроен следующим образом 2400,8,1,NONE,NONE. Всё отлично считывалось.

.. ругается на синтаксическую ошибку в кронтабе.

Я помню что у тебя всё нормально читалось по предложенному тов. Wyz-ом коду!
Варианты: откат к изначальному коду или бум добивать этот? :)
Если еще не надоело, то:
Code: Select all
#( com-speed
CREATE com-buf 20 ALLOT
CREATE ecm 2 C, 39 C, 39 C, 39 C, 39 C, 39 C, 39 C, 3 C,
: ack?
PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR OR OR OR com-handle PurgeComm DROP
ecm 8 com-handle WRITE-FILE THROW
10 PAUSE
com-buf DUP 1 com-handle READ-FILE THROW CR ." Прочитано: " .
com-buf 20 CR DUMP LPCOMSTAT com_error com-handle ClearCommError DROP com_error @ CR ." com_error=" .
com-buf C@ 6 = IF CR ." Удача!" ELSE CR ." Промах!" THEN
;
NoActive
Action:
S" COM1" R/W OPEN-FILE THROW TO com-handle
      10 com-handle SetTimeOut THROW
      2400 8 0 1 com-handle SetModemParameters THROW
     com-handle ClearCommBreak DROP
     SETDTR com-handle EscapeCommFunction DROP
      SETRTS com-handle EscapeCommFunction DROP
     CR S" 2400" TYPE
      ack?
     com-handle CLOSE-FILE THROW
)#

Если после пары запусков данного кода (без считывания ШК) увидим в nncron.out "Удача!", то
можно попробовать считать ШК
Code: Select all
#( com-read
CREATE com-buf 20 ALLOT
: ack?
PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR OR OR OR com-handle PurgeComm DROP
com-buf DUP 15 com-handle READ-FILE THROW CR ." Прочитано: " .
com-buf 20 CR DUMP LPCOMSTAT com_error com-handle ClearCommError DROP com_error @ CR ." com_error=" .
com-buf C@ 2 = IF S" Удача!" MsgBox ELSE S" Промах!" MsgBox THEN
;
NoActive
Action:
S" COM1" R/W OPEN-FILE THROW TO com-handle
      10 com-handle SetTimeOut THROW
      2400 8 0 1 com-handle SetModemParameters THROW
     com-handle ClearCommBreak DROP
     SETDTR com-handle EscapeCommFunction DROP
      SETRTS com-handle EscapeCommFunction DROP
      ack?
     com-handle CLOSE-FILE THROW
)#
Ilya
 
Posts: 443
Joined: Mon, 07 Aug 2006, 09:51
Location: Санкт-Петербург

Re: Как получить данные с com-порта?

Postby Wyz » Wed, 14 Oct 2009, 18:03

Терминалка для ковыряния: http://easyelectronics.ru/terminalnye-programmy.html
Wyz
 
Posts: 389
Joined: Tue, 11 Dec 2007, 01:42

Re: Как получить данные с com-порта?

Postby ascerdfg1 » Sun, 27 Nov 2011, 16:32

Господа! Ну что? Разобрались с COM-портом?
nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests