SERIAL I/O

Name

SERIAL I/O --  Описания функций для rоммуникации посредством COM-портов.

Function

nTotalCharacters    COM_COUNT(<nComPort>)
lOldDTRStatus       COM_DTR(<nComPort>,[<lNewDTRStatus>])
lClear              COM_FLUSH(<nComPort>)
lOldHandshake       COM_HARD(<nComPort>,<lNewHandshake>,[<lDTR/DSR>])
lInitialized        COM_INIT(<nComPort>,[<nBaudRate>],[<cParity>], [<nDataLength>],[<nStopBits>])
nMaxCom             COM_NUM()
lStatus             COM_OPEN(<nComPort>,<notused>,<notused>,<notused>, [<lRTSCTS>],[<lXONXOFF>],[<lDebug>])
cData               COM_READ(<nComPort>,[<nLength>])
lOldRTSStatus       COM_RTS(<nComPort>,[<lNewRTSStatus>])
nLength             COM_SEND(<nComPort>,<cString>)
lDeleted            COM_SFLUSH(<nComPort>)
lOldHandshake       COM_SOFT(<nComPort>,[<lNewHandshake>],[<cXONchar>],[<cXOFFchar>])
nOldTimeout         COM_TIMEOUT(<nComPort>[,<nTimeout>])

Description

В категории Serial I/O находятся описания функций для коммуникации посредством COM-портов. Эти функции основаны на многоплатформной библиотеке EZV24 http://libezV24.sourceforge.net/.

Для использования необходимо линковать библтотеку clip-com:

clip -e test.prg -lclip-com

Function COM_COUNT()

 COM_COUNT(<nComPort>) --> nTotalCharacters

Эта функция позволяет узнать число доступных символов в буфере приема. Это позволяет определить, сколько символов может быть прочитано функцией COM_READ().

Если функция вызывается для закрытого порта, возвращается -1.

Function COM_DTR()

 COM_DTR(<nComPort>,[<lNewDTRStatus>]) --> lOldDTRStatus

COM_DTR() запрашивает или устанавливает статус сигнала DTR. Если второй параметр не указан, статус сигнала не изменяется.

Функция COM_CLOSE() сбрасывает сигнал DTR. Однако, COM_OPEN не устанавливает DTR автоматически.

Function COM_FLUSH()

 COM_FLUSH(<nComPort>) --> lClear

Эта функция позволяет очистить все символы в буфере приема.

COM_FLUSH() гарантирует полную очистку буфера приема. Однако, новые символы могут быть приняты между вызовом COM_COUNT() и COM_READ().

Function COM_HARD()

 COM_HARD(<nComPort>,<lNewHandshake>,[<lDTR/DSR>]) --> lOldHandshake

Размер буфера приема всегда ограничен. Для того чтобы предотвратить переполнение и потерю символов, используется аппаратое или программное управление потоком. При аппаратном управлении, порт использует сигнал RTS для остановки передачи. Когда аппаратный буфер приемника наполняется до 75%, RTS активизируется и останавливает передачу. Как только заполнение буфера снижается до 50%, сигнал RTS сбрасывается и разрешает передачу. Некоторые принтеры используют другой сигнал (DTR) вместо RTS и DSR вместо CTS. В этом случае необходимо установить параметр <lDTR/DSR> в .T.

Функция работает как при приеме, так и при передаче.

Если вы используете аппаратное управление потоком, сигнал RTS не должен устанавливаться вручную с использованием функций COM_RTS() или COM_MCR().

Function COM_INIT()

 COM_INIT(<nComPort>,[<nBaudRate>],[<cParity>],
 [<nDataLength>],[<nStopBits>]) --> lInitialized

Для иницализации открытого порта требуется четыре параметра. Это скорость порта в бодах (бит в секунду), число битов данных, четность, и число стоп-битов. По умолчанию выбираются следующие параметры: 9600 бод, 8 бит данных, проверка на четность отсутствует, 1 стоп-бит. Важно отметить, что любой из этих параметров может быть изменен, пока порт не закрыт. При использование этой функции данные и регистры статуса модема (DTR и другие) не затрагиваются.

Порт должен быть предварительно открыт. Инициализация не открытого порта невозможна.

Если любые из четырех параметров порта не заданы, либо заданы некорректно, используются значения по умолчанию: 9600 бод, без проверки на четность, 8 бит данных, 1 стоп-бит.

Function COM_NUM()

 COM_NUM() --> nMaxCom

Эта функция позволяет узнать максимальное число последовательных портов в системе. Однако, она не гарантирует доступность портов. Например, если функция вернула 3, то COM2 может отсутствовать или быть недоступен. Реальная доступность порта проверяется функциями COM_OPEN() или COM_INIT().

Function COM_OPEN()

 COM_OPEN(<nComPort>,<notused>,<notused>,<notused>,
 [<lRTSCTS>],[<lXONXOFF>],[<lDebug>]) --> lStatus

Эта функция открывает порт последовательного интерфейса.

Function COM_READ()

 COM_READ(<nComPort>,[<nLength>]) --> cData

Принимаемые символы запоминаются во внутреннем буфере. Существует возможность определить число символов в буфере, и чтения одного, нескольких, или всех символов. Если не задан параметр <nLength>, то читаются все доступные символы.

Учтите, что порт может принять дополнительные символы между вызовами COM_COUNT() и COM_READ().

Function COM_RTS()

 COM_RTS(<nComPort>,[<lNewRTSStatus>]) --> lOldRTSStatus

COM_RTS() запрашивает или устанавливает статус сигнала RTS. Если второй параметр не указан, статус сигнала не изменяется.

Функция COM_CLOSE() сбрасывает сигнал RTS. Однако, COM_OPEN не устанавливает RTS автоматически.

Function COM_SEND()

 COM_SEND(<nComPort>,<cString>) --> nLength

Передает один или более символов через выбранный порт.

Function COM_SFLUSH()

 COM_SFLUSH(<nComPort>) --> lDeleted

Эта функция удаляет все символы из буфера передачи, которые еще не переданы.

Function COM_SOFT()

 COM_SOFT(<nComPort>,[<lNewHandshake>],[<cXONchar>],[<cXOFFchar>]) -->  lOldHandshake

При использовании модемного соединения, а также в некоторых других случаях, аппаратное управление потоком не всегда возможно. Поэтому в таких случаях применяется программная реализация. Когда буфер приема заполняется на 75%, передается XOFF символ. При приеме которого удаленная станция должна приостановить пердачу.Как только наполнение буфера снижается до 50%, передается XON символ, разрешающий передачу удаленной станции.

Когда вы передаете бинарные данные, программное управление потоком должно быть отключено.

Function COM_TIMEOUT()

 COM_TIMEOUT(<nComPort>[,<nTimeout>]) --> nOldTimeout

Все фукции чтения могут использовать механизм таймаута при ожидании символов. Если таймаут первышен, функция обрывает ожидание.

Длительность таймаута определяется параметром TenthOfSeconds. Значение задается в десятых долях секунды.