1-RU-157964-1.3

Руководство пользователя

Цель документа

Библиотека SysLibCom — предоставляет работу с последовательными портами RS-485/RS-232 ПЛК. Используется для обмена данными с внешними устройствами.

Данный документ содержит описание алгоритмов работы блоков, входные/выходные параметры и типы данных каждого блока, и предназначен для ознакомления с составом библиотеки.

Для полного понимания принципов работы в среде необходимо ознакомиться с руководством пользователя ALTA IDE.

Установка библиотеки

Чтобы подключить библиотеку к проекту:

  1. Откройте редактор Менеджер библиотек одним из способов:

  • дважды нажмите ЛКМ на системную папку Менеджер библиотек в дереве проекта;

  • или нажмите ПКМ на системную папку Менеджер библиотек в дереве проекта и выберите в контекстном меню пункт Открыть:

    Graphic

  • В редакторе Менеджер библиотек откройте вкладку Магазин.

  • Выберите библиотеку SysLibCom и нажмите кнопку Подключить на карточке библиотеки.

  • Библиотека добавится в проект и отобразится на вкладке Мои библиотеки в редакторе Менеджер библиотек.

Описание библиотеки SysLibCom

Библиотека SysLibCom содержит:

Блоки библиотеки SysLibCom используются совместно, поэтому отдельные примеры работы каждого блока не приводятся. В разделе Пример представлен общий пример программы, демонстрирующий применение всех блоков.

SysComOpen

Функция SysComOpen типа данных DWORD открывает последовательный порт.

Имя переменной

Тип данных

Описание

Входные переменные

Port

PORTS

Открываемый порт (например: COM1); Порт определяется перечислением PORTS

SysComOpen возвращает дескриптор порта, который используется при вызове других функций библиотеки. В случае ошибки, возвращается 16#FFFFFFFF.

PORTS

Перечисление PORTS:

TYPE PORTS : BYTE (COM1:=1, COM2, COM3, COM4, COM5, COM6, COM7, COM8);

END_TYPE

SysComSetSettings

Функция SysComSetSettings типа BOOL устанавливает скорость, число стоповых бит, контроль паритета, таймаут, размер буфера и период опроса для последовательного порта. Требуемые параметры передаются посредством указателя на структуру COMSETTINGS.

Имя переменной

Тип данных

Описание

Входные переменные

dwHandle

DWORD

Дескриптор порта, возвращаемый SysComOpen

ComSettings

REF_TO COMSETTINGS

Указатель на структуру COMSETTINGS

Возвращает TRUE при успешной установке параметров, иначе FALSE.

COMSETTINGS

Элементы структуры COMSETTINGS определены следующим образом:

Имя переменной

Тип данных

Описание

Port

PORTS

Номер порта (см. PORTS)

dwBaudRate

DWORD

Скорость: 4800, 9600, 19200, 38400, 57600, 115200 (на данный момент реализована работа с данными скоростями, в дальнейшем список поддерживаемых скоростей будет расширен)

byStopBits

BYTE

0 = один стоп бит;

1 = полтора;

2 = два

byParity

BYTE

0 = нет бита контроля;

1 = нечетность;

2 = четность

dwTimeout

DWORD

Таймаут интерфейса в мс, по умолчанию 0

dwBufferSize

DWORD

Размер встроенного буфера, по умолчанию 0

dwScan

DWORD

Время полинга последовательного интерфейса, должно быть 0

SysComSetSettingsEx

Данная функция типа BOOL применяется для установки расширенных параметров порта. В дополнение к параметрам, определяемым SysComOpen, она задает управление потоком и размер символов. Требуемые параметры передаются посредством указателя на структуру COMSETTINGSEX. Возвращает TRUE при успешной установке параметров, иначе FALSE. В зависимости от аппаратной реализации, не всегда возможно многократно менять параметры открытого порта. В этом случае, закройте его и откройте заново.

Имя переменной

Тип данных

Описание

Входные переменные

dwHandle

DWORD

Дескриптор порта, возвращаемый SysComOpen

ComSettingsEx

REF_TO COMSETTINGSEX

Указатель на структуру COMSETTINGSEX

COMSETTINGSEX

Элементы структуры COMSETTINGSEX определены следующим образом:

Имя переменной

Тип данных

Описание

Size

INT

Размер структуры в байтах. Используйте sizeof() для заполнения этого поля

Port

PORTS

Номер порта (см. PORTS)

dwBaudRate

DWORD

Скорость: 4800, 9600, 19200, 38400, 57600, 115200

byStopBits

BYTE

0 = один стоп бит;

1 = полтора;

2 = два

byParity

BYTE

0 = нет бита контроля;

1 = нечетность;

2 = четность

dwTimeout

DWORD

Таймаут интерфейса в мс, по умолчанию 0

dwBufferSize

DWORD

Размер встроенного буфера, по умолчанию 0

dwScan

DWORD

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

cByteSize

BYTE

4...8: размер символа в битах

fOutxCtsFlow

BOOL

TRUE означает контроль потока передачи по сигналу CTS

fDtrControl

BYTE

DTR всегда 0 для открытого порта.

1: DTR

2: Управление по DTR

fDsrSensitivity

BOOL

При TRUE запрещен прием при отсутствии сигнала DSR

fRtsControl

BYTE

0: RTS всегда 0 для открытого порта;

1: RTS всегда 1 для открытого порта;

2: Драйвер держит RTS пока буфер приемника заполнен менее чем на половину. Драйвер снимает RTS, если буфер заполнен более чем на три четверти;

3: Управление по RTS: драйвер устанавливает RTS на время передачи. После передачи всех данных из буфера RTS снимается

fOutxDsrFlow

BOOL

Разрешает управление по DSR. При переходе DSR в ноль передача приостанавливается

SysComClose

Функция SysComClose типа BOOL закрывает COM порт. Возвращает TRUE при успешном завершении, иначе FALSE.

Имя переменной

Тип данных

Описание

Входные переменные

dwHandle

DWORD

Дескриптор порта, возвращаемый SysComOpen

SysComWrite

SysComWrite — это функция типа DINT, записывающая данные в порта на передачу. Возвращает число реально записанных байт.

Имя переменной

Тип данных

Описание

Входные переменные

dwHandle

DWORD

Дескриптор порта, возвращаемый SysComOpen

BufferAddress

DWORD

Указатель на буфер, содержащий данные для передачи. (Используйте оператор REF — полную информацию по указателю см. в Руководстве пользователя ALTA IDE)

BytesToWrite

DWORD

Число байт в буфере

dwTimeout

DWORD

Время в мс, после которого функция обязана завершиться

SysComRead

Функция типа DINT читает принятые данные из порта. Возвращает число считанных байтов.

Имя переменной

Тип данных

Описание

Входные переменные

dwHandle

DWORD

Дескриптор порта, возвращаемый SysComOpen

BufferAddress

DWORD

Указатель на буфер, куда копируются принятые данные. (Используйте оператор REF)

BytesToRead

DWORD

Число считаемых байт

dwTimeout

DWORD

Время в мс, после которого функция обязана завершиться

SysComGetVersion2300

Функция типа DWORD всегда возвращает 100. Используется для внутренней автоматической проверки версии. В прикладных программах ее вызывать не нужно.

Пример

Ниже приведен пример программы для взаимодействия с COM-портом ПЛК. В ходе ее выполнения последовательно происходит:

  • Открытие порта.

  • Запись первоначальных настроек COM-порта.

  • Отправка данных в COM-порт.

  • Чтение данных из COM-порта.

  • Закрытие порта.

При запуске программы, ПЛК однократно производит попытку открытия порта RS485-1 и задает его настройки. В случае, если при открытии порта произошла ошибка и в качестве дескриптора порта программа вернула значение 16#FFFFFFFF, запись данных из буфера в COM-порт не будет произведена. Так же, как и чтение данных из COM-порта в буфер.

VAR bPort: BYTE; // номер порта dwHandle: DWORD; // дескриптор порта isOpen: BOOL; // флаг открытия порта isClosed: BOOL := TRUE; // флаг закрытия порта isInit: BOOL; // флаг первоначального задания настроек settings: COMSETTINGS; // элемент структуры с настройками порта xStatusSettings: BOOL; // флаг проверки на успешную запись настроек порта dwBufWrite: DWORD := 16#41; // буфер с данными, запись символа ASCII "А" dwBufRead: DWORD; // буфер для считанных данных dwAmountOfBytes: DWORD; // количество байт переданных в результате операции чтения/записи ton1: TON; // таймер с задержкой по включению xStartTMR: BOOL := FALSE; // команда запуска таймера END_VAR (*Открываем порт RS485-1*) IF isOpen = FALSE THEN bPort := PORTS.COM5; dwHandle := SysComOpen(bPort); isClosed := FALSE; isOpen := TRUE; END_IF (*Задаем настройки порта, если они еще не были заданы*) IF isInit = FALSE THEN settings.Port := bPort; settings.dwBaudRate := 9600; settings.byStopBits := 0; settings.byParity := 0; settings.dwTimeout := 0; settings.dwBufferSize := 0; settings.dwScan := 0; xStatusSettings := SysComSetSettings(dwHandle,ADR(settings)); IF xStatusSettings = TRUE THEN isInit := TRUE; END_IF END_IF (*Записываем данные из буфера в порт*) IF dwHandle <> 16#FFFFFFFF AND isClosed = FALSE THEN dwAmountOfBytes := SysComWrite(dwHandle,ADR(dwBufWrite),SIZEOF(dwBufWrite),1000); (*Считываем данные из порта*) ton1(In := xStartTMR, pt := T#30ms); xStartTMR := TRUE; IF ton1.Q THEN dwAmountOfBytes := SysComRead(dwHandle,ADR(dwBufRead),SIZEOF(dwBufRead),1000); END_IF END_IF (*Закрываем порт*) IF isClosed = FALSE THEN isClosed := SysComClose(dwHandle); isClosed := TRUE; END_IF

Номера портов

ПЛК210-12-ALTA-TEST

Название порта

Номер порта в ALTA IDE

RS232-1

COM1

RS485-1

COM5

RS485-2

COM4