On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
администратор




Пост N: 3182
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.05.13 15:40. Заголовок: Com порт и сканер


Вот такой код работает в Clipper

 
do while inkey(0.1)#27

if COM_OPEN(1)
if COM_INIT(1,19200,"N",8,1)
millisec(120)
wean_kod:=com_read(1)
if len(wean_kod)#0
com_close(1)
nkey:=1255
exit
endif
endif
com_close(1)
endif
enddo

А в Harbour сканер выдает полную лажу. Пробовал вместо CT библу hbtpathy , результат такой же.
Куда копать ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


администратор




Пост N: 3183
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.05.13 15:54. Заголовок: Проехали , заюзал HB..


Проехали , заюзал HBWIN и заработало

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3184
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.05.13 18:19. Заголовок: Помогите разобраться..


Помогите разобраться. Накидал самодостаточный пример.
Что ей надо ? ;)
 
#include "hbwin.ch"
proc main
LOCAL cString := space(32)
LOCAL oWinPort := win_com():Init( "COM1", WIN_CBR_19200, WIN_NOPARITY, 8, WIN_ONESTOPBIT )

if oWinPort:Open()
TESTIK()
if valtype(oWinPort)#"O" // вбил клин но не помог
oWinPort := win_com():Init( "COM1", WIN_CBR_19200, WIN_NOPARITY, 8, WIN_ONESTOPBIT )
endif

? oWinPort:errortext() // CreateFile Error 5
oWinPort:Read( @cString, 32 ) // вот тут упадет

? cString
oWinPort:Close()
endif

return
**************
Func TESTIK()
LOCAL cString := space(32)
LOCAL oWinPort := win_com():Init( "COM1", WIN_CBR_19200, WIN_NOPARITY, 8, WIN_ONESTOPBIT )

if oWinPort:Open()
oWinPort:Read( @cString, 32 )
? cString
oWinPort:Close()
endif

return


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 103
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 30.05.13 19:44. Заголовок: Похоже, дело в твое..


Похоже, дело в твоей функции TESTIK . Я заремил ее у меня программа встала в ожидание ввода с com-порта.
Очевидно повторная инициализация com-порта, чего-то там рушит.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3185
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.05.13 19:55. Заголовок: nick_mi Да я тоже п..


nick_mi
Да я тоже понял что что то ломается , как понять что и как это обойти.
В реальной задаче есть бровс который читает данные с COM порта и из этого бровса я могу
вызвать другой бровс который так же читает данные из COM порта , при выходе их последнего
бровса , первый падает на строке oWinPort:Read

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 104
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 30.05.13 20:01. Заголовок: Сделай oWinPort - pu..


Сделай oWinPort - public и не переоткрывай его, или по цепочке передай параметром в функцию.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3188
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 31.05.13 10:32. Заголовок: nick_mi пишет: Сдел..


nick_mi пишет:

 цитата:
Сделай oWinPort - public и не переоткрывай его


Так и сделал добавив соответствующие проверки , заработало нормально , падать перестало.
Спасибо за идею.

PS
У меня сложность еще в том что по COM портам может использоваться другое оборудование в частности
весы , принтер , правда там я использую функции COM из HBCT. Отдал прогу на тест вообщем.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3190
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.06.13 14:45. Заголовок: В общем глюк не поня..


В общем глюк не понятный при работе с COM1
Перегружаем комп и запускаем вот такой тест у меня он сразу виснет , хз почему

 
#include "hbwin.ch"
proc main
LOCAL cString := space(32)
LOCAL oWinPort := win_com():Init( "COM1", WIN_CBR_19200, WIN_NOPARITY, 8, WIN_ONESTOPBIT )

if oWinPort:Open()

do while inkey()#27
? oWinPort:errortext()
oWinPort:Read( @cString, 32 ) // висяк пока "клин" не забить

? cString

enddo
oWinPort:Close()
endif

return



Но если хотя бы раз в самом начале вызвать вот такой "клин" то до следующей перезагрузки все работает нормально

 
if COM_OPEN(1) // это из HBCT
if COM_INIT(1,19200,"N",8,1)
com_read(1)
endif
com_close(1)
endif




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3191
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.06.13 10:09. Заголовок: Dima пишет: Перегру..


Dima пишет:

 цитата:
Перегружаем комп и запускаем вот такой тест у меня он сразу виснет , хз почему


#include "hbwin.ch"
proc main
LOCAL cString := space(32)
LOCAL oWinPort := win_com():Init( "COM1", WIN_CBR_19200, WIN_NOPARITY, 8, WIN_ONESTOPBIT )

if oWinPort:Open()

do while inkey()#27
? oWinPort:errortext()
oWinPort:Read( @cString, 32 ) // висяк пока "клин" не забить

? cString

enddo
oWinPort:Close()
endif

return



Добавил после oWinPort:Open() строку oWinPort:TimeOuts(,5) , виснуть перестало.
А какой таймаут по умолчанию ?

PS
Интересно что виснет не на всякой машине если не использовать oWinPort:TimeOuts(,5).

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет