Управление реле через Com порт

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

Управление реле через Com порт

Postby Nick_st » Mon, 28 Nov 2011, 12:55

Возможно ли через nnCron управлять линиями RTS или DTR , те переводить в 0 или 1
Nick_st
 
Posts: 3
Joined: Mon, 28 Nov 2011, 09:37

Re: Управление реле через Com порт

Postby VoidVolker » Mon, 28 Nov 2011, 17:09

Да, вполне: надо либо поискать на форуме(тут парой тем ниже есть тема про ком-порты) - обсуждалось не разу уже, либо воспользоваться библиотеками(возможно после небольшой доработки) из дистрибутива SP-Forth - например ~diver/COMM.F.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Управление реле через Com порт

Postby Nick_st » Mon, 28 Nov 2011, 22:33

насчет ~diver/COMM.F. это вообще темный лес для меня .

из темы про чтение данных из сом порта
Code: Select all
\ При ошибках процесс блокирует порт, так что:
\ nncron.exe -runfile COM_read_write.spf

0x80000000 CONSTANT GENERIC_READ
0x40000000 CONSTANT GENERIC_WRITE
1 CONSTANT PURGE_TXABORT
2 CONSTANT PURGE_RXABORT
4 CONSTANT PURGE_TXCLEAR
8 CONSTANT PURGE_RXCLEAR

1 CONSTANT SETXOFF
2 CONSTANT SETXON
3 CONSTANT SETRTS
4 CONSTANT CLRRTS
5 CONSTANT SETDTR
6 CONSTANT CLRDTR
7 CONSTANT RESETDEV
8 CONSTANT SETBREAK
9 CONSTANT CLRBREAK

\ WINAPI: BuildCommDCBAndTimeoutsA kernel32.dll
WINAPI: BuildCommDCBA kernel32.dll

WINAPI: ClearCommBreak kernel32.dll
WINAPI: SetCommState kernel32.dll
WINAPI: SetCommTimeouts kernel32.dll
WINAPI: PurgeComm kernel32.dll
WINAPI: SetupComm kernel32.dll
WINAPI: EscapeCommFunction kernel32.dll
WINAPI: ClearCommError kernel32.dll

CREATE sDCB 28 ALLOT            \ DCB Structure; fBinary..fDummy2 - биты
CREATE sCOMMTIMEOUTS 20 ALLOT   \ COMMTIMEOUTS Structure
CREATE sCOMSTAT 12 ALLOT        \ COMSTAT structure
-1 VALUE hCOM
VARIABLE ComErrors
VARIABLE cbWritten

CREATE Buf1 32768 ALLOT

: COM_read { handle buffer length \ cbReaded -- length }
sCOMSTAT ComErrors handle ClearCommError 0= IF S" ClearCommError error" MsgBox EXIT THEN
sCOMSTAT 4 + @ \ cbInQue Specifies the number of bytes received by the serial provider but not yet read by a ReadFile operation.
0= IF 0 EXIT THEN
0 AT cbReaded length buffer handle ReadFile  0= IF S" ReadFile error" MsgBox EXIT THEN
cbReaded
;


: main

sDCB Z" baud=115200 parity=N data=8 stop=1 TO=ON" \ TO - Timeouts
BuildCommDCBA
0= IF S" BuildCommDCBA error" MsgBox EXIT THEN S" BuildCommDCBA" S" COM_read_write.log" LOG

0  0  OPEN_EXISTING  0  0  GENERIC_READ GENERIC_WRITE OR
Z" COM1"
CreateFileA DUP TO hCOM
INVALID_HANDLE_VALUE = IF S" CreateFileA error" MsgBox EXIT THEN S" CreateFileA" S" COM_read_write.log" LOG

hCOM ClearCommBreak
0= IF S" ClearCommBreak error" MsgBox EXIT THEN S" ClearCommBreak" S" COM_read_write.log" LOG

sDCB hCOM SetCommState
0= IF S" SetCommState error" MsgBox EXIT THEN S" SetCommState" S" COM_read_write.log" LOG

0   \ WriteTotalTimeoutConstant
0   \ WriteTotalTimeoutMultiplier
100 \ ReadTotalTimeoutConstant
1   \ ReadTotalTimeoutMultiplier
10  \ ReadIntervalTimeout
SP@ hCOM SetCommTimeouts
0= IF S" SetCommTimeouts error" MsgBox EXIT THEN S" SetCommTimeouts" S" COM_read_write.log" LOG
2DROP 2DROP DROP

PURGE_TXABORT PURGE_RXABORT PURGE_TXCLEAR PURGE_RXCLEAR OR OR OR hCOM PurgeComm
0= IF S" PurgeComm error" MsgBox EXIT THEN S" PurgeComm" S" COM_read_write.log" LOG

16384 16384 hCOM SetupComm ( буферы по 16к - с запасом :-)
0= IF S" SetupComm error" MsgBox EXIT THEN S" SetupComm" S" COM_read_write.log" LOG

SETDTR hCOM EscapeCommFunction 0=
SETRTS hCOM EscapeCommFunction 0=
\ 1000 PAUSE
OR IF S" EscapeCommFunction error" MsgBox EXIT THEN S" EscapeCommFunction" S" COM_read_write.log" LOG

0 cbWritten S" ATI3%CRLF%" EVAL-SUBST SWAP hCOM WriteFile
0= IF S" WriteFile error" MsgBox EXIT THEN S" WriteFile" S" COM_read_write.log" LOG

 1000 PAUSE

hCOM Buf1 32760 COM_read
S" COM Read OK" S" COM_read_write.log" LOG
DUP N>S S" COM_read_write.log" LOG
( DUP ) Buf1 + 0 SWAP C! Buf1 ASCIIZ> MsgBox ( DROP )
S" Msg OK" S" COM_read_write.log" LOG

hCOM CloseHandle DROP

S" Done." S" COM_read_write.log" LOG

1000 PAUSE

;


вижу что есть
5 CONSTANT SETDTR
6 CONSTANT CLRDTR
как это запользовать и как выбрать сом 2 или 3
Nick_st
 
Posts: 3
Joined: Mon, 28 Nov 2011, 09:37

Re: Управление реле через Com порт

Postby vzhelezo_201256 » Wed, 07 Dec 2011, 09:11

Nick_st wrote:Возможно ли через nnCron управлять линиями RTS или DTR , те переводить в 0 или 1




Code: Select all
#( test_va
WINAPI: DlPortReadPortUchar dlportio.dll
WINAPI: DlPortWritePortUchar dlportio.dll
NoActive
0 VALUE counter_var
Action:
    0x379 DlPortReadPortUchar TO counter_var
    PAUSE: 1000
    CASE counter_var
     00 OF MSG: "0" ENDOF
     01 OF  MSG: "1" ENDOF
     07 OF  MSG: "ERROR7" ENDOF
     15 OF  MSG: "SLCT15" ENDOF
     31 OF  0x40 0x378 DlPortWritePortUchar DROP MSG: "Выключена лампа1 по событию BUSY31" ENDOF
    127 OF  0x80 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа1 по событию BUSY127" ENDOF
     DUP OF MSG: "Неизвестная ошибка!" ENDOF
    ENDCASE
)#

#( test_va_1
WINAPI: DlPortReadPortUchar dlportio.dll
WINAPI: DlPortWritePortUchar dlportio.dll
NoActive
0 VALUE counter_var
Action:
    0x379 DlPortReadPortUchar TO counter_var
    PAUSE: 1000
    MSG: "%counter_var%"
    CASE counter_var
     7 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3(день), 4(движ), 5(звук-хлопок) и 6 разряд по событию 7" ENDOF
     15 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4, 5 и 6 разряд по событию 15" ENDOF
     23 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 5, 6 разряд по событию 23" ENDOF
     31 OF  0x40 0x378 DlPortWritePortUchar DROP MSG: "Выключена лампа7 по событию BUSY31" ENDOF
     39 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 6 и 4 разряд по событию 39" ENDOF
     47 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "6 и 4 разряд по событию 47" ENDOF
     55 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3 и 6 разряд по событию 55" ENDOF
     63 OF  0x01 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа1 по событию ASK 63"ENDOF
     71 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4, 5 разряд по событию 71" ENDOF
     79 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4, 5 разряд по событию 79" ENDOF
     87 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3. 5 разряд по событию 87" ENDOF
     95 OF  0x04 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа3 по событию 95" ENDOF
     103 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4 разряд по событию 103" ENDOF
     111 OF  0x10 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа4 по событию 111" ENDOF
     119 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3 разряд  по событию 119" ENDOF
     127 OF  0x80 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа8 по событию BUSY127" ENDOF
     135 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4, 5, 6 и 7 все разряды в 0 по событию 135" ENDOF
     143 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4, 5, 6 и 7 разряд по событию 191" ENDOF
     151 OF  0x01 0x378 DlPortWritePortUchar DROP MSG: "3, 5, 6и 7 разряд по событию 151" ENDOF
     159 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "5, 6 и 7 разряд по событию 159" ENDOF
     167 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4, 6 и 7 разряд по событию 167" ENDOF
     175 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4. 6 и 7 разряд по событию 175" ENDOF
     183 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 6 и 7 разряд по событию 183" ENDOF
     191 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "6 и 7 разряд по событию 191" ENDOF
     199 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4, 5 и 7 разряд по событию 199" ENDOF
     207 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4, 5 и 7 разряд по событию 207" ENDOF
     215 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 5 и 7 разряд по событию 215" ENDOF
     223 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "5 и 7 разряд по событию 223" ENDOF
     231 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3, 4 и 7 разряд по событию 231" ENDOF
     239 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "4 и 7 разряд по событию 239" ENDOF
     247 OF  0x20 0x378 DlPortWritePortUchar DROP MSG: "3 и 7 разряд по событию 247" ENDOF
     255 OF  0x02 0x378 DlPortWritePortUchar DROP MSG: "Включена лампа2 по событию 255" ENDOF
    DUP OF MSG: "Неизвестная ошибка!" ENDOF
    ENDCASE
)#
Last edited by VoidVolker on Wed, 07 Dec 2011, 18:10, edited 1 time in total.
Reason: Используйте для кода тег code
vzhelezo_201256
 
Posts: 1
Joined: Wed, 07 Dec 2011, 08:15

Re: Управление реле через Com порт

Postby Nick_st » Wed, 07 Dec 2011, 17:16

dlportio.dll вроде только для LPT а надо для com тк LPT занят другой железкой
Nick_st
 
Posts: 3
Joined: Mon, 28 Nov 2011, 09:37

Re: Управление реле через Com порт

Postby dyku » Tue, 03 Apr 2012, 08:27

присоединяюсь к главному вопросу темы:
можно ли управлять выходными реле (ключами) com (lpt) порта используя nnCron, например по расписанию???
пишут, что это много раз обсуждалось,
перерыл форумы... в результате нашел только какие-то обрывки, или там всё так сложно- вилы!!!
и никакого окончательного решения!!!
скажите мне пожалуйста, по-простому, можно или нет это делать с простым примером!!!
или направьте в нужном направлении, к нужной теме!!!
dyku
 
Posts: 1
Joined: Tue, 03 Apr 2012, 08:12

Re: Управление реле через Com порт

Postby VoidVolker » Tue, 03 Apr 2012, 16:58

А чем плох пример постом выше?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests

cron