Category Archives: CoDeSys. Теория.

Элементарные типы данных CoDeSys

Типы данных

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

Логический (BOOL)

BOOL логический тип данных. Переменная может принимать 2 значения ИСТИНА (TRUE) или ЛОЖЬ (FALSE). Занимает 8 бит памяти, если не задан прямой битовый адрес.

Целочисленные

BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, и UDINT — все это целочисленные типы.

Они отличаются различным диапазоном сохраняемых данных и, естественно, различными требованиями к памяти. Подробно данные характеристики представлены в следующей таблице:

Тип Нижний предел Верхний предел Размер памяти
BYTE 0 255 8 Бит
WORD 0 65535 16 Бит
DWORD 0 4294967295 32 Бит
SINT: -128 127 8 Бит
USINT: 0 255 8 Бит
INT: -32768 32767 16 Бит
UINT: 0 65535 16 Бит
DINT: -2147483648 2147483647 32 Бит
UDINT: 0 4294967295 32 Бит

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

Рациональные

REAL и LREAL данные в формате с плавающей запятой, используются для сохранения рациональных чисел. Для типа REAL необходимо 32 бита памяти и 64 для LREAL.

Диапазон значений REAL от: 1.175494351e-38 до 3.402823466e+38

Диапазон значений LREAL от: 2.2250738585072014e-308 до 1.7976931348623158e+308

Строки

Строковый тип STRING представляет строки символов. Максимальный размер строки определяет количество резервируемой памяти и указывается при объявлении переменной. Размер задается в круглых или квадратных скобках. Если размер не указан, принимается размер по умолчанию — 80 символов.

Длина строки не ограничена в CoDeSys, но строковые функции способны обращаться со строками от  1 до 255 символов!

Пример объявления строки размером до 35 символов:

str:STRING(35):=’Просто строка»;

Время и дата

TIME представляет длительность интервалов времени в миллисекундах. Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms).

TIME, TIME_OF_DAY (сокр. TOD) содержит время суток, начиная с 0 часов (с точностью до миллисекунд). Диапазон значений TOD от: 00:00:00 до 23:59:59.999.

DATE содержит календарную дату, начиная с 1 января 1970 года. Диапазон значений от: 1970-00-00 до 2106-02-06.

DATE_AND_TIME (сокр. DT) содержит время в секундах, начиная с 0 часов 1 января 1970 года. Диапазон значений от: 1970-00-00-00:00:00 до 2106-02-06-06:28:15.

Типы TIME, TOD, DATE и DATE_AND_TIME (сокр. DT) сохраняются физически как DWORD.

Формат представления данных описан в разделе Константы:

Командный файл (cmdfile) CoDeSys (часть 2)

Системный вызов:

system <command> Выполнить команду операционной системы

Выбор целевой платформы:

target <Id> Установить целевую платформу для текущего проекта. Если CoDeSys запущен с опцией командной строки «/notargetchange», то это единственный способ выбора целевой платформы.

Запрос состояния:

state offline  Возвращает «S_OK» при отсутствии соединения с контроллером (режим offline), иначе возвращает «HRESULT[0x800441f0)» (режим online).
state online Возвращает «S_OK» при наличии соединения с контроллером (режим online), иначе возвращает «HRESULT[0x800441f0)» (режим offline).

Пароли для групп пользователей:

Если открывается проект, защищенный паролями для групп пользователей, то нижеследующие команды позволят ввести необходимые пароли. Это позволяет открыть защищенный проект из командного файла. Данные команды должны предшествовать команде «Файл Открыть…»!

Пример:

user  level  0

user password aaa

file open «D:codesysprojectsxxxx.pro»

query off ok

user level  Выбор группы. 
user password   Пароль для выбранной группы.

Настройки визуализации:

visual settings…  Начинает команду, соответствующую командам меню ‘Дополнения’ ‘Настройки’ для визуализации.
…   language file on || off Опция ‘Языковой файл’ активируется (on) или деактивируется (off). При активации деактивирует опцию ‘Дин. тексты’.
…   set languagefile <Dateipfad Sprachdatei> Устанавливает языковой файл (.tlt или .vis). Пример: «visual settings set languagefile proj1.tlt.
…   dynamictexts on || off Опция ‘Дин. тексты’ активируется (on) или деактивируется (off). При активации деактивирует опцию ‚Языковой файл’.
…   dynamictextfiles <Dateipfad> | <Dateipfad> | … Задает новый список языковых файлов. Пример: «visual settings D:dynfilesp1.xml D:dynfilesp2.xml»
…   dynamictexthideelements on || off Активирует или деактивирует опцию ‘Скрывать элемент, если замена не выполнена’.»
…   language <Sprache> Выбор языка. Пример: «visual settings language German»
…   tablekeyboardusage_web on || off Активирует или деактивирует опцию ‘Keyboard usage for tables’ в Web-визуализации.»
…   tablekeyboardusage_codesys on || off  Активирует или деактивирует опцию ‘Keyboard usage for tables’ для CoDeSys-HMI.
visual webvisuactivation on || off  Активирует или деактивирует опцию ‚Web-Визуализация’ в Настройках целевой платформы.

Команды управления проектом в базе данных ENI:

В данных командах применяются следующие заместители:

<category>: замещает «project» или «shared» или «compile» в зависимости последующей категории базы данных: Объекты проекта, Разделяемые объекты, Файлы компилятора

<POUname>: имя объекта, соответствующее именам объектов в CoDeSys.

<Objecttype>: замещает расширение имени POU в базе, соответствующее типу объекта (определяется списком типов, см. ENI Администрирование).

Пример: «GLOBAL_1.GVL» -> имя POU «GLOBAL_1», тип «GVL» (global variables list)

<comment>: >:  замещает комментарий (в одиночных кавычках), сохраняемый с соответствующим действием в истории версий.

Команды настройки ENI сервера:

eni on
eni off
Опция ‘Использовать контроль версий (ENI)’ включается или выключается, соответственно. (‘Проект’ ‘Опции’ ‘Связь с базой данных’)
eni project readonly on
eni project readonly off
Опция ‘Только чтение’ для объектов проекта включается или выключается, соответственно. (‘Проект’ ‘Опции’ ‘Проект’)
eni shared readonly on
eni shared readonly off
Опция ‘Только чтение’ для категории базы данных ‘Разделяемые объекты’  включается или выключается, соответственно.(‘Проект’ ‘Опции’ ‘Разделяемые объекты’)
eni set local <POUname> Объект включается в категорию ‘Локальные’, т.е. не будет сохраняться в базе данных проекта(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’)
eni set shared <POUname> Объект включается в категорию ‘Разделяемые проекты'(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’)
eni set project <POUname> Объект включается в категорию ‘Проект'(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’)
eni <category> server <TCP/IP_Address> <Port> <Projectname> <Username> <Password> Настраивает соединение ENI Server для категории ‘Проект'(‘Проект’ ‘Опции’ ‘Связь с базой данных’);

Пример:

eni project server localhost 80 batchtestproject EniBatch Batch

(TCP/IP-Address = localhost, Port = 80, Project name = batchtestproject, User name = EniBatch, Password = Batch)

eni compile sym on
eni compile sym off
Опция создания символьного файла (‘Создавать символьный ASCII файл (.sym)’) для объектов категории включается/выключается(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’ ‘Настройка ENI’ для категории ‘Файлы компилятора’)
eni compile sdb on
eni compile sdb off
Опция ‘Создавать двоичный символьный файл (.sym)’ для категории ‘Файлы компилятора’ соответственно, включается/выключается(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’ ‘Настройка ENI’ для категории ‘Файлы компилятора’)
eni compile prg on
eni compile prg off
Опция ‘Создавать загрузочный проект’ для категории ‘Файлы компилятора’ соответственно, включается/выключается(‘Проект’ ‘Объект’ ‘Свойства’ ‘Связь с базой данных’ ‘Настройка ENI’ для категории ‘Файлы компилятора’)

Команды меню ‘Проект’ ‘База данных проекта’ для работы с базой данных:

eni set <category> Объект принимается в названную категорию базы данных (‘Определить’)
‘eni set <category>set <Objecttype>:<POUname> <Objecttype>:<POUname> Перечисленные через пробелы объекты принимаются в названную категорию базы данных. (‘Определить множество’)Пример:

«eni set project pou:as_fub pou:st_prg»

-> объекты (pou) as_fub и st_prg get принимаются в категорию ‘Проект’

eni <category> getall Последние версии объектов вызываются из базы данных. (‘Взять все новейшие версии’)
‘eni <category>get <Objecttype>:<POUname> <Objecttype>:<POUname> Перечисленные через пробелы объекты вызываются из базы данных. (‘Определить множество’). (‘Взять новейшую версию’)Пример:

«eni project get pou:as_fub gvl:global_1»

-> компонент (POU) as_fub.pou и список глобальных переменных global_1.gvl вызываются из базы данных.

eni <category> checkoutall «<comment>» Все объекты названной категории выписываются из базы данных. Указанный комментарий будет сохранен вместе с операцией в истории версий.
eni <category> checkout «<comment>» <Objecttype>:<POUname> <Objecttype>:<POUname> Все объекты (Objecttype:POUname), перечисленные через пробелы, выписываются из базы данных. Комментарий будет сохранен вместе с операцией в истории версий по каждому объекту.Пример:

«eni project checkout «for working on xy» pou:as_fub gvl:global_1″

-> компонент (POU) as_fub и список глобальных переменных global_1 выписываются из базы данных, комментарий «for working on xy» будет сохранен вместе с этой операцией.

eni <category>checkinall «<comment>» Все объекты проекта, включенные в контроль, прописываются в базе. Комментарий будет сохранен вместе с операцией.
eni <category> checkin «<comment>» <Objecttype>:<POUname> <Objecttype>:<POUname> Все объекты (Objecttype:POUname), перечисленные через пробелы, прописываются в базе. Комментарий будет сохранен вместе с операцией для каждого объекта.

Ключевые слова параметров команд:

В параметрах команд могут применяться следующие ключевые слова, заключенные между «$»:

$PROJECT_NAME$ Имя текущего проекта CoDeSys (имя файла без расширения «.pro»)
$PROJECT_PATH$ Путь или директория расположения текущего проекта CoDeSys (без имени диска и завершающей обратной косой черты, т.е. «projectssub1»).
$PROJECT_DRIVE$ Диск текущего проекта (без имени завершающей обратной косой черты, т.е. «D:»)
$COMPILE_DIR$ Полный путь (с диском и без завершающей обратной косой черты, т.е. «D:codesyscompile»)
$EXE_DIR$ Директория codesys.exe (с диском и без завершающей обратной косой черты, т.е.D:codesys)

Пример командного файла:

file open C:projectsCoDeSys_testampel.pro
query off ok
watchlist load c:workw.wtc
online login
online run
delay 1000
watchlist read
watchlist save $PROJECT_DRIVE$$PROJECT_PATH$w_update.wtc
online logout
file close

В данном примере открывается файл file ampel.pro, загружается ранее созданный список переменных (watch list) под именем w.wtc, затем проект загружается в контроллер и запускается. Через 1 секунду считываются значения переменных из списка и сохраняются в watch.wtc (в директории «C:projectsCoDeSys_test«). В конце проект закрывается.

Вызвать командный файл из командной строки можно, например, так:

«<path of codesys.exe>» /cmd «<path of cmd file>»

s’> � i�8�4align=top style=’width:138.0pt;padding:.75pt .75pt .75pt .75pt’>

object copy <source project file> <source path> <target path>

Копирует объекты (source path) в указанные (target path) объекты текущего проекта.

(source path) — это имя объекта. Если указана папка, берутся все ее объекты. В этом случае копируется полная структура папки.

Если (target path) отсутствует, будет создан новый объект.

Доступ только для чтения к определенным объектам:

object setreadonly <TRUE|FALSE> <object type> | <object name>  Установить доступ только по чтению для заданного объекта. Кроме конкретных идентификаторов, можно задать ограничение для всего типа объектов.Допустимые типы: pou, dut (data type), gvl (global variables list), vis (visualization), cnc (CNC object), liblist (Libraries), targetsettings, toolinstanceobject (particular Tools instance), toolmanagerobject (all instances in the Tools tree), customplconfig (PLC configuration), projectinfo (Project information), taskconfig (task configuration), trace, watchentrylist (Watch- and Recipe Manager), alarmconfig (Alarm configuration)

Пример: «object setreadonly TRUE pou plc_prg» задает для PLC_PRG доступ только по чтению.

Ввод параметров коммуникации (gateway, device):

gateway local Использовать Gateway данного локального компьютера.
gateway tcpip <Address> <Port>  Использовать Gateway указанного удаленного компьютера.<Address>: TCP/IP адрес или имя в сети удаленного компьютера.

<Port>: TCP/IP порт удаленного шлюза.

Внимание: Доступны только удаленные шлюзы, не защищенные паролем доступа!

device guid <guid>  Использовать коммуникационный интерфейс с указанным GUID.Формат GUID (пример): {01234567-0123-0123-0123-0123456789ABC}

Скобки и позиции дефисов важны.

device instance <Instance name> Установить заданное имя для текущего коммуникационного интерфейса.
device parameter <Id> <Value> Присвоить указанное значение определеннуму параметру (задается ID) интерфейса.

Командный файл (cmdfile) CoDeSys (часть 1)

Приведенные ниже команды можно использовать в командном файле, который в свою очередь вызывается из командной строки. Регистр знаков не учитывается. Командные строки показывается в окне сообщений и могут быть записаны в файл (за исключением команд, начинающихся с «@»). Часть строки после точки с запятой (;) игнорируется.

Команды управления выполнением:

onerror continue Последующие команды должны выполняться, даже если произошла ошибка выполнения.
onerror break Последующие команды не должны выполняться, если произошла ошибка выполнения.

Команды  меню Онлайн:

online login Подключение и загрузка проекта (‘Онлайн Подключение’)
online logout Отключение (‘Онлайн’ ‘Отключение’)
online run Запуск приложения (‘Онлайн’ ‘Старт’)
online stop Останов приложения (‘Онлайн’ ‘Стоп’)
online bootproject Создание загрузочного проекта. (См. ‘Онлайн’ ‘Создание загрузочного проекта’ !)
online sourcecodedownload Загрузка кода проекта в ПЛК (‘Онлайн’ ‘Загрузка исходных текстов’)
online sim Включить режим эмуляции (‘Онлайн’ ‘Режим эмуляции’)
online sim off Выключить режим эмуляции (‘Онлайн’ ‘Режим эмуляции’)

Команды  меню Файл:

file new Создать новый проект (‘Файл’ ‘Создать’)
file open <projectfile>возможные дополнения: Загрузить прект <projectfile> (‘Файл’ ‘Открыть’)
/readpwd:<readpassword> Задает пароль доступа на чтение, диалог ввода пароля не показывается.
/writepwd:<writepassword> Задает пароль полного доступа, диалог ввода пароля не показывается.
file close Закрыть проект (‘файл’ ‘Закрыть’)
file save Сохранить проект (‘Файл’ ‘Сохранить’)
file saveas <projectfile>опция: <type><version>

 

Сохранить проект под именем <projectfile> (‘Файл’ ‘Сохранить как’)По умолчанию: сохраняется файл проекта текущей версии CoDeSys <projectfile>. Если вы хотите сохранить проект как внешнюю или внутреннюю библиотеку либо в формате ранних версий, добавьте команду:

«internallib»  сохранить как внутреннюю библиотеку:

«externallib» сохранить как внешнюю библиотеку:

«pro»  сохранить в формате ранних версий:

допустимые версии <Version>: 15, 20, 21, 22 (версии 1.5, 2.0, 2.1, 2.2)

Пример: «file save as lib_xy internallib22» -> проект «project xy.pro», сохраняется как «lib_xy.lib» для V2.2.

file saveas <projectfile> The current project will be saved with the file name <projectfile> (‘Файл’ ‘Сохранить как’)
file printersetup <filename>.dfrопция

pageperobject или

pagepersubject

Определяет dfr файл для печати (‘Файл’ Параметры печати’) и одну из возможных опций ‘Новая страница на каждый объект’ или ‘Новая страница на каждый подобъект’ (См. раздел Документация)
file archive <filename>.zip Архивация проекта в zip-файл с указанным именем (‘Файл’ Сохранить/Отправить архив’)
file quit Завершить работу CoDeSys (‘Файл’ ‘Выход’)

Команды меню Проект:

project build Инкрементальная компиляция текущего проекта (‘Проект’ ‘Компилировать’)
project rebuild or
project compile
Полная компиляция текущего проекта (‘Проект’ ‘Компилировать все»)
project clean Удалить информацию о компиляции и онлайн коррекции (‘Проект’ ‘Очистить все’)
project check Контроль текущего проекта (‘Проект’ ‘Контроль’)
project import <file1> … <fileN> Файлы <file1> … <fileN> импортируются в текущий проект (‘Проект’ ‘Импорт’). Внимание: можно использовать шаблоны, например, «project import C:projects*.exp.
project export <expfile> Экспорт текущего проекта в файл <expfile> (‘Проект’ ‘Экспорт’)
project expmul Каждый объект текущего проекта экспортируется в отдельный файл, получающий имя объекта.
project documentation Печать проекта (См. раздел Документация)

Команды управления файлом сообщений:

out open <msgfile> Открыть файл сообщений <msgfile>. Новые сообщения добавляются.
out close Закрыть текущий файл сообщений.
out clear Очистить файл сообщений.

Команды управления сообщениями:

echo on Отображать команды.
echo off Скрыть команды.
echo <text> Отобразить текст <text>.

Команды управления заменой (нужны при выполнении импорта, экспорта, копировании):

replace yesall Заменять все (отвечает «да» на все запросы замены, диалог не отображается)
replace noall Запрет замены (отвечает «нет» на все запросы замены, диалог не отображается)
replace query Показывать диалог замены независимо от ‘replace yesall’ или ‘replace noall’

Команды, изменяющие параметры диалогов CoDeSys по умолчанию:

query on Отображать диалоги и ждать ввода пользователя
query off ok Для всех диалогов отвечать ‘OK’
query off no Для всех диалогов отвечать ‘No’
query off cancel Для всех диалогов отвечать ‘Cancel’

Вызов вложенных командных файлов:

call <parameter1> … <parameter10> Вызов файла команд. Допускается до 10 параметров:$0 — $9.
call <parameter1> … <parameter10> Command files are called as subroutines. Up to ten parameters can be consigned. In the subroutine called you can access the parameters using $0 — $9.

Задание директорий CoDeSys:

(Диалог опций проекта, категория ‘Директории’, раздел ‘Общие’): Если в нижеописанных командах нуж-но задать несколько директорий, то их определения должны быть разделены точкой с запятой и пробелом. Определение директории нужно заключить в кавычки. Например:

dir lib «D:codesysLibrariesStandard; D:codesysLibrariesNetVar»

dir lib <libdir> Задает <libdir> как директорию библиотек
dir compile <compiledir> Задает <compiledir> как директорию для компиляции
dir config <configdir> Задает <configdir> как директорию файлов конфигурации
dir upload <uploaddir> Задает <uploaddir> как директорию для загружаемых файлов

Задержка выполнения CMDFILE:

delay 5000 Пауза 5 секунд

Управление Менеджером просмотра:

watchlist load <file> Загрузить список (Watchlist) из файла <file> и открыть соответствующее окно (‘Дополнения’ ‘Открыть список просмотра’)
watchlist save <file> Сохранить текущий список в файле <file> (‘Дополнения’ ‘Сохранить список просмотра’)
watchlist set <text> Присвоить загруженному списку имя <text> (‘Дополнения’ ‘Переименовать список’)
watchlist read Обновить значения в списке (‘Дополнения’ ‘Считать значения’)
watchlist write Установить значения переменных в соответствии с заданными в списке (‘Дополнения’ ‘Записать значения’)

Компоновка библиотек:

library add <library file1> <library file2> .. <library fileN>  Добавить в текущий проект. Если указан относительный путь, то в качестве корневого, используется директория библиотек.
library delete [<library1> <library2> .. <libraryN>] Удалить указанные или все (если не указано какие) библиотеки из состава текущего проекта.

Копирование объектов:

object copy <source project file> <source path> <target path>  Копирует объекты (source path) в указанные (target path) объекты текущего проекта.(source path) — это имя объекта. Если указана папка, берутся все ее объекты. В этом случае копируется полная структура папки.

Если (target path) отсутствует, будет создан новый объект.

Доступ только для чтения к определенным объектам:

object setreadonly <TRUE|FALSE> <object type> | <object name>  Установить доступ только по чтению для заданного объекта. Кроме конкретных идентификаторов, можно задать ограничение для всего типа объектов.Допустимые типы: pou, dut (data type), gvl (global variables list), vis (visualization), cnc (CNC object), liblist (Libraries), targetsettings, toolinstanceobject (particular Tools instance), toolmanagerobject (all instances in the Tools tree), customplconfig (PLC configuration), projectinfo (Project information), taskconfig (task configuration), trace, watchentrylist (Watch- and Recipe Manager), alarmconfig (Alarm configuration)

Пример: «object setreadonly TRUE pou plc_prg» задает для PLC_PRG доступ только по чтению.

Ввод параметров коммуникации (gateway, device):

gateway local Использовать Gateway данного локального компьютера.
gateway tcpip <Address> <Port>  Использовать Gateway указанного удаленного компьютера.<Address>: TCP/IP адрес или имя в сети удаленного компьютера.

<Port>: TCP/IP порт удаленного шлюза.

Внимание: Доступны только удаленные шлюзы, не защищенные паролем доступа!

device guid <guid>  Использовать коммуникационный интерфейс с указанным GUID.Формат GUID (пример): {01234567-0123-0123-0123-0123456789ABC}

Скобки и позиции дефисов важны.

device instance <Instance name> Установить заданное имя для текущего коммуникационного интерфейса.
device parameter <Id> <Value> Присвоить указанное значение определеннуму параметру (задается ID) интерфейса.

Командная строка в CoDeSys

Параметры, указанные в командной строке при запуске CoDeSys, определяют дополнительные режимы работы программы. Все параметры начинаются символом «/». Регистр знаков не учитывается. Команды выполняются слева направо.

/online  Непосредственно после запуска CoDeSys перейти в режим online текущего проекта.
/batch CoDeSys стартует без пользовательского интерфейса, выполняет командный файл и немедленно завершает работу, возвращая результат выполнения в формате  HRESULT. Выполнение командного файла будет остановлено, если при выполнении очередной команды произойдет ошибка. Предупреждения не прерывают выполнение. Если ошибок и предупреждений не произошло, то возвращает значение S_OK.
/run  После подключения автоматически запускает приложение.Имеет смысыл только совместно с /online
/show …/show hide

/show icon

/show max

/show normal

Вид окна при старте CoDeSysОкно не показывается, нет индикатора в панели задач

Окно свернуто

Развернуто на весь экран

Размер окна равен размеру, установленному в предыдущем сеансе работы.

/out <outfile>  Все сообщения программы дополнительно записываются в файл <outfile>.
/noinfo Не показывать заставку при запуске
/userlevel <group> Определение пользовательской группы (например, «/userlevel 0» для группы 0)
/password <password> Прямой ввод пароля пользовательской группы (например, «/password abc»)
/openfromplc Будет загружен проект из целевой системы.
/visudownload Если CoDeSys HMI запускается с проектом, не соответствующим присутствующему в целевой системе, то будет дан диалог подтверждения загрузки.
/notargetchange Изменение целевой платформы может быть выполнено только через командный файл (См. описание команды «target…»).
/cmd <cmdfile> После запуска выполнить команды из файла <cmdfile>.

Формат командной строки:

«<Путь CoDeSys-exe>» «<Путь проекта>» /<команда1> /<c команда2> ….

Пример командной строки:

Открывается проект ampel.pro, все окна закрыты. Далее выполняются команды, указанные в command.cmd. Путь указывается в кавычках!

«D:dir1codesys» «C:projectsampel.pro» /show hide /cmd command.cmd

ПЛК – браузер CoDeSys

ПЛК-Браузер присутствует на вкладке Ресурсы Организатора объектов, если он активирован в настройках целевой платформы (категория Сетевая функциональность).

Окно ПЛК-Браузер состоит из строки команд и окна отображения результатов. Выпадающий список в строке команд содержит все ранее введенные команды со времени запуска проекта. Это упрощает их повторение. Новые команды автоматически добавляются в данный список.

По нажатию клавиши <Enter> команда передается в контроллер. Если Online соединение не установлено, команда отображается в том виде в котором она передается в контроллер. В режиме Online в окне отображается ответ контроллера.

Набор команд ПЛК-Браузера

Чаше всего ПЛК-Браузер выполняет стандартный набор команд 3S, поддержанный в системе исполнения. Он включает функции манипулирования памятью и информационные функции системы исполнения. Список доступных команд задан в ini файле, включенном в состав пакета целевой платформы.  Для расширения состава команд необходимо включить их реализацию в систему исполнения и описать в ini файле.

При открытии проекта, список доступных команд ПЛК-Браузера считывается из ini файла. Доступ к этим командам можно получить кнопкой  через диалог «Вставка стандартной команды» или клавишей <F2>. Дать команду можно и через меню ‘Вставка ‘Стандартные команды’. Кроме того, команду можно ввести в ручную.

Синтаксис команд:

<команда><пробел><параметры>

Список параметров определяется типом команды. Переданная команда повторяется в окне отображения вместе с ответом контроллера.

Пример: Запрос кода идентификатора проекта (Id) командой «pid»:

pid…..

Вывод результата:

pid
Project-ID: 16#0025CFDA

Для каждой команды можно запросить текст подсказки: ?<пробел><команда>. Текст подсказки находится в ini файле. В контроллер эта команда ни чего не передает.

Список стандартных 3S команд PLC-Browser:

Команда Описание
? Запрос у системы исполнения актуального списка всех поддерживаемых команд. Данный список не зависит от описаний включенных в файлы целевой системы..
mem Hex дамп области памятиСинтаксис 1: mem <start address> <end address>

Синтаксис 2: mem <start address>-<end address>

Адрес вводится в виде десятичного, шестнадцатеричного числа (префикс 16#) или макро.

memc Относительный Hex дамп области кода; аналогична mem, адрес задается от начала области кода
memd Относительный Hex дамп области данных; аналогична mem, адрес задается от начала области данных
reflect Возврат строки (для тестирования)
dpt Чтение таблицы указателей данных
ppt Чтение таблицы POU
pid Чтение Id проекта
pinf Чтение информации о проекте
tsk Показать список IEC задач
startprg Запуск ПЛК программы
stopprg Останов ПЛК программы
resetprg Сброс ПЛК программы.  Инициализируются только не энергонезависимые переменные.
resetprgcold Холодный сброс ПЛК программы.  Инициализируются в том числе энергонезависимые переменные
resetprgorg Заводской сброс ПЛК программы.  Полная очистка областей кода и данных…
reload Перезапись загрузочного кода проекта
getprgprop Свойства программы
getprgstat Статус программы 
filedir Файловая команда «dir»
filecopy Копирование файла [from] [to]
filerename Переименование файла [old] [new]
filedelete Удаление файла [filename]
saveretain Запись сохраняемых  (retain) переменных
restoreretain Чтение сохраняемых  (retain) переменных
setpwd Установить пароль на контроллерСинтаксис: setpwd <password> [level]

<level> может быть «0» (по умолчанию) действительный для подключения системы программирования, или «1» действительный для всех приложений

delpwd Удалить пароль

Если команда (ключевое слово) не распознана контроллером, в окне результата выводится сообщение ‘Keyword not found’.

Макро расширения команд ПЛК-Браузера:

Если в строке команд введена команда с макро расширением, оно будет раскрыто до передачи команды контроллеру. Результат выполнения дается в «раскрытом» виде.

Синтаксис: <команда><макрос>

Макросы:

%P<NAME> Если NAME имя POU то, макрос раскрывается в индекс <POU-Index>, в противном случае текст не изменяется
%V<NAME> Если NAME имя переменной то, макрос раскрывается в #<INDEX>:<OFFSET>, в противном случае текст не изменяется, (нотация #<INDEX>:<OFFSET> интерпретируется контроллером как адрес памяти)
%T<NAME> IЕсли NAME имя переменной то, макрос раскрывается в <VARIABLENTYP>, в противном случае текст не изменяется
%S<NAME> Если NAME имя переменной то, макрос раскрывается в <SIZEOF(VAR)>, в противном случае текст не изменяется

Следующий за обратной косой чертой символ % игнорируется. Если необходимо передать символ косой черты, введите: .

Пример:

Ввод в строке команды (дамп памяти для переменной  .testit):

mem %V.testit

Вывод результата:

mem #4:52
03BAAA24 00 00 00 00 CD CD CD CD ….ÍÍÍÍ

Вспомогательные команды ПЛК-Браузера

В меню ‘Дополнения’ и панели команд ПЛК_Браузера присутствуют вспомогательные команды для ускорения ввода и просмотра истории:

Кнопки просмотра История далее и История ранее  дают возможность «прокрутить» результаты выполненных команд. Запись истории сохраняется до закрытия проекта.

Команда Отменить прерывает начатый запрос.

Команда Сохранить историю команд  сохраняет результаты выполненных команд в файле с расширением *.bhl. (Browser History List). Команда Печать последней команды открывает стандартный диалог печати. На печать будет выведен текущий запрос и его результат.

Библиотека SysLibShm.lib

Данная библиотека включает функции размещения и доступа к разделяемой памяти процессов (Shared-Memory, сокращенно ShM) по физическим адресам.

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

  • SysShmOpen
  • SysShmClose
  • SysShmRead
  • SysShmWrite

SysShmOpen

Функция типа DWORD, открывает разделяемую память.

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

Переменная Тип данных Описание

stName                                STRING         Имя Shared Memory, может быть произвольным

dwPhysicalAddress       DWORD        Либо:

— необходимый значимый физический адрес ShM;

— 0, для произвольной области ShM

pdwSize                            DWORD          Указатель на размер области ShM

— если ShM уже существует, то здесь возвращается ее текущий размер.

— иначе создается ShM заданного размера. Задание здесь «0»

приведет к ошибке создания. Данную функцию можно

применить для проверки существования ShM.

SysShmClose

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

Переменная Тип данных Описание

hShm                               DWORD                       Дескриптор ShM (См. SysShmOpen)

SysShmRead

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

Переменная Тип данных Описание

hShm                                            DWORD                     Дескриптор ShM (См. SysShmOpen)

dwOffset                                      DWORD                    Смещение от начала области данных

pData                                           DWORD                      Адрес буфера данных для чтения

dwSize                                         DWORD                                      Число байт

SysShmWrite

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

Переменная Тип данных Описание

hShm                                                   DWORD                                   Дескриптор ShM

dwOffset                                             DWORD                 Смещение от начала области данных

pData                                                  DWORD                     Адрес буфера данных для записи

dwSize                                                DWORD                                              Число байт

 

Объектно-ориентированные расширения МЭК 611313

ЦЕЛИ

В то время как в сфере компьютерных приложений объектно-ориентированное программирование (ООП) давно стало составной частью всех ведущих языков, в сфере контроллерных приложений оно применяется крайне редко.

Говорят, что это происходит в силу некоторой консервативности, свойственной программистам контроллеров (ПЛК). Отчасти это действительно так. Но всё же в более значительной степени здесь сказываются ограниченные возможности инструментов программирования. Конечно, почти все современные контроллерные платформы дают возможность так или иначе использовать C++ (за дополнительные деньги). Однако компилятор обеспечивает только лишь аспекты чистого программирования. Функции отладки и ввода в эксплуатацию этих систем практически непригодны для контроллерных приложений. Даже для элементарного мониторинга значений входов-выходов приходится писать вызовы библиотечных функций. О таких приёмах, как «горячая» замена кода прикладной программы без остановки контроллера, вообще нужно забыть. Помимо этого автоматы и задачи с битовыми операциями реализуются в C++ достаточно сложно.

ТРЕБОВАНИЯ

В результате компанией 3S_Smart Software Solutions было принято решение расширить нормы стандарта МЭК 61131-3, введя поддержку ООП в новое поколение системы программирования CoDeSys. Расширения стандарта должны подчиняться следующим требованиям:

● ООП-расширения должны быть не обязательными, а опциональными;

● ООП- и не ООП-программирование можно совмещать;

● существующие приложения должны полностью поддерживаться с возможностью их плавной трансформации в ООП с учетом целесообразности;

● ООП должно быть применимо во всех языках МЭК 61131-3;

● программист не должен сталкиваться со сложными определениями.

РАСШИРЕНИЯ

Основное расширение МЭК 61131_3 касается превращения функционального блока (FUNCTION_BLOCK) в класс. Подобным образом структуры выросли в классы в языке C++. Это достигается введением методов. Фактически метод — это функция, встроенная в функциональный блок. В реализации функции доступны не только значения её параметров и локальных переменных, но и данные экземпляра функционального блока. В итоге вызов метода всегда включает имена экземпляра и метода.

Следующий пример показывает определение и вызов простого метода.

TYPE Direction: (Forward, Backward);

END_TYPE

FUNCTION_BLOCK Pump

VAR

Enabled: BOOL;

Direction: Direction;

END_VAR

METHOD GetState : BOOL

GetState := Enabled;

END_METHOD

METHOD Start: BOOL (* Метод Start *)

VAR_INPUT

WantedDirection: Direction;

END_VAR

Enabled := TRUE;

Direction := WantedDirection;

END_METHOD

END_FUNCTION_BLOCK

PROGRAM Main

VAR

Pump1: Pump;

Pump2: Pump;

END_VAR

Pump1.Start(Forward); (*Вызов метода Start*)

Pump2.Start(Backward);

END_PROGRAM

Естественно, вызов метода можно выполнить и в графических языках (рис. 1). Даже если функциональный блок имеет методы, ничто не мешает использовать его обычным образом, как определено в стандарте МЭК 61131-3.

Рис. 1. Пример вызова метода в FBD

Помимо пользовательских методов и стандартной реализации, функциональный блок включает два предопределённых метода: Init и Exit. Init вызывается неявно для всех экземпляров всех функциональных блоков после загрузки кода приложения или «холодного» рестарта контроллера. Exit вызывается перед «горячим» обновлением кода экземпляра, перед сбросом или управляемым отключением питания ПЛК. Например, его можно применить для корректного завершения работы.

Для упрощения правила видимости заданы жёстко:

Уже существующий класс может быть дополнен с помощью ключевого слова EXTENTS.

FUNCTION_BLOCK MonitoredPump EXTENTS Pump

VAR

MonitoredState: (OK, Error);

END_VAR

METHOD HasError : BOOL;

HasError := MonitoredState <> OK;

END_METHOD

END_FUNCTION_BLOCK

PROGRAM Main

VAR

Pump1: Pump;

Pump2: MonitoredPump;

END_VAR

Pump1.Start(Forward);

IF NOT Pump2.HasError THEN

(* Все методы базового класса доступны *)

Pump1.Start(Backward);

END_IF

END_PROGRAM

Однако реальную мощь ООП даёт возможность создания интерфейсов. Под интерфейсом понимается набор методов, работающих с одинаковыми параметрами, но разными реализациями для разных функциональных блоков. Интерфейс можно передать в качестве параметра, и программный компонент (POU) не будет в действительности заботиться о том, какой функциональный блок им применяется.

Следующий пример иллюстрирует данную технику:

INTERFACE Drive

METHOD HasError : BOOL;

END_METHOD

METHOD Home : BOOL;

END_METHOD

METHOD MoveAbsolute : BOOL;

VAR_INPUT

Pos: DINT;

END_VAR

END_METHOD

END_INTERFACE

Теперь мы можем написать несколько функциональных блоков, реализующих интерфейс Drive (привод) с помощью ключевого слова IMPLEMENTS.

FUNCTION_BLOCK CANDrive IMPLEMETS Drive

VAR

CANId: DINT;

State: (OK, ParamError, DriveError, CommError);

InHoming: BOOL;

END_VAR

METHOD HasError : BOOL;

HasError: State <> OK;

END_METHOD

METHOD Home : BOOL;

IF NOT InHoming THEN

WriteSDO(CANId, 16#4711, 16#02, 1);(*Команда на исх.*)

InHoming := TRUE;

ELSE

Home := ReadSDO(CANId, 16#4711, 16#03);

InHoming := NOT Home;

END_IF

END_METHOD

METHOD MoveAbsolute : BOOL;

VAR_INPUT

Pos: DINT;

END_VAR

… (* Реализация абсолютного перемещения *)

END_METHOD

METHOD SetCanId : BOOL;

VAR_INPUT

Id: DINT;

END_VAR

CANId := Id;

END_METHOD

END_FUNCTION_BLOCK

Как можно видеть, все методы интерфейса Drive наполнены специальными реализациями, построенными на CAN-сообщениях. Сверх того здесь присутствуют некоторые специфические переменные и методы. В данном случае это метод, устанавливающий CAN Id. Далее мы могли бы описать еще один вид привода, например аналоговый (AnalogDrive). В нём можно реализовывать методы совершенно иначе, чем для цифрового привода (CANDrive).

Теперь можно написать функциональный блок, получающий интерфейс в качестве параметра:

FUNCTION_BLOCK InitMove

VAR_INPUT

D: Drive;

Pos: INT;

END_VAR

VAR_OUTPUT

Done: BOOL;

END_VAR

IF Drive.Home() THEN

IF Drive.MoveAbsolute(Pos) THEN

Done := TRUE;

END_IF

END_IF

END_FUNCTION_BLOCK

Данный POU сможет работать с разными типами приводов, причём обратите внимание, что никакой их дифференциации в нём нет.

VAR

IM1, IM2: InitMove;

DriveCAN1: CANDrive;

DriveAna2: AnalogDrive;

END_VAR

DriveCAN1.SetCANId(12);

IM1(D := DriveCAN1, Pos := 100);

IM2(D := DriveAna2, Pos := 200);

Можно легко применять интерфейсы так же, как обычные типы данных, например, создавать массивы. Это позволяет использовать следующий приём:

VAR

AD: ARRAY[1..2] OF Drive;

DriveCAN1: CANDrive;

DriveAna2: AnalogDrive;

I: INT;

END_VAR

DriveCAN1.SetCANId(12);

AD[1] := DriveCAN1;

AD[2] := DriveAna2;

FOR I := 1 TO 2 DO

AD[I].Home();

END_FOR

Библиотека SysLibDir.lib

Данная библиотека позволяет работать с директориями файловой системы, если это поддержано в

системе исполнения. Выполнение функций библиотеки синхронное.

Библиотека содержит следующие функции:

  • SysDirCreate
  • SysDirOpen
  • SysDirRead
  • SysDirRemove
  • SysDirRename

SysDirCreate

Функция типа BOOL, создает новую директорию. Функция возвращает TRUE, если директория успешно создана, иначе FALSE.

SysDirOpen

Функция типа DWORD, открывает указанную директорию. Она возвращает дескриптор, типа DWORD, который можно использовать для чтения состава директории (файлы, поддиректории) функцией SysDirRead.

SysDirRead

Функция типа UDINT, используется для чтения списка элементов открытой функцией SysDirOpen директории.

При каждом вызове, функция читает очередной элемент оглавления. Его наименование помещается в строку stDirEntry. Данную функцию необходимо вызывать в цикле до тех пор, пока она не возвратит значение 0. Это будет означать что, оглавление прочитано полностью. Дополнительная информация об элементе директории записывается в структуру DIRECTORY_INFO.

Входныепеременные Тип данных Описание
hDir DWORD Дескриптор директории
stDirEntry STRING Имя элемента директории (файл или директория), не более 80символов.
pDirInfo POINTER TODIRECTORY_INFO Указатель на структуру DIRECTORY_INFO, которая будетзаполнена информацией об элементе. Можно задать нулевой

указатель (0) если данная информация не требуется.

SysDirRemove

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

SysDirRename

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

Структура DIRECTORY_INFO

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

Элементы структуры:

Структура DIRFILETIME

Элементы данной структуры служат для представления времени и даты создания, доступа и последнего изменения файла (директории). Используется в структуре DIRECTORY_INFO.

Элементы структуры:

Библиотека SysLibCom.lib

Данная библиотека поддерживает работу с последовательным портом. Реализуется в системе исполнения (опционально). Библиотека содержит следующие функции (выполнение синхронное):

  • SysComOpen
  • SysComSetSettings
  • SysComSetSettingsEx
  • SysComClose
  • SysComRead
  • SysComWrite
  • SysComGetVersion2300

SysComOpen

Данная функция типа DWORD открывает последовательный порт. Она возвращает дескриптор порта, который используется при вызове других функций библиотеки.В случае ошибки,возвращается 0xFFFFFFFF.

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

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

END_TYPE

SysComSetSettings

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

Элементы структуры 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

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

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

END_TYPE

SysComSetSettingsEx

Данная функция типа BOOL, применяется для установки расширенных параметров порта. В дополнение к параметрам, определяемым SysComOpen, она задает управление потоком и размер символов. Требуемые параметры передаются посредством указателя на структуру

COMSETTINGSEX.

Возвращает TRUE при успешной установке параметров, иначе FALSE. В зависимости от аппаратной реализации, не всегда возможно многократно менять параметры открытого порта. В этом случае, закройте его и откройте заново.

Элементы структуры 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; 0: 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 в ноль, передача приостанавливается.

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

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

END_TYPE

Пример настройки параметров для аппаратного хендшекинга:

dwHandle: DWORD;

pt_comsettingsex:COMSETTINGSEX:=(Port:=COM1,

dwBaudRate:=38400,

byStopBits:=0,

dwTimeout:=5000,

cByteSize:=7,

byParity := 2,

fOutxCtsFlow := FALSE,

fOutxDsrFlow:=TRUE,

DtrControl := 2,

fRtsControl := 2);

Реализация:

pt_comsettingsex.Size := sizeof(pt_comsettingsex);

SysComSetSettingsEx(dwHandle := Handle, ComSettingsExt :=ADR(pt_comsettingsex));

Где Handle есть значение, полученное вызовом SysComOpen(COM1).

SysComClose

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

SysComWrite

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

SysComRead

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

SysComGetVersion2300

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

Библиотека SysLibCallback.lib

Данная библиотека позволяет активировать пользовательские функции обратного вызова для событий системы исполнения. Она содержит функции SysCallbackRegister и SysCallbackUnregister.

Обе функции имеют тип BOOL и возвращают TRUE, если соответствующая функция обратного вызова успешно зарегистрирована или отключена, соответственно. Функции выполняются синхронно.

Прототип функции обратного вызова должен выглядеть так:

FUNCTION Callback : DWORD

VAR_INPUT

dwEvent:DWORD; // (* Событие *)

dwFilter:DWORD; // (* Фильтр *)

dwOwner:DWORD; // (* Источник *)

END_VAR

 

Внимание:  в целевых платформах RISC и Motorola 68K имя функции обратного вызова должны начинаться с „callback“!

 

Библиотечные функции SysCallbackRegister и SysCallbackUnregister имеют одинаковый набор параметров:

 

Входные 

переменные

Тип данных Описание
iPOUIndex INT POU индекс функции обратного вызова, может быть получен при помощи оператора INDEXOF(<имя функции >).
Event RTS_EVENT Событие в системе исполнения, по которому должна вызываться callback-функция. Определяется значением перечисления RTS_EVENT, определенного в данной библиотеке (см. ниже).

 

Перечисление RTS_EVENT определено следующим образом:

TYPE RTS_EVENT :

(

EVENT_ALL,
(* Общие события *)
EVENT_START,
EVENT_STOP,
EVENT_BEFORE_RESET,
EVENT_AFTER_RESET,
EVENT_SHUTDOWN,
(* Исключения системы исполнения *)
EVENT_EXCPT_CYCLETIME_OVERFLOW, (* Переполнение времени цикла *)
EVENT_EXCPT_WATCHDOG, (* Сработал программный сторожевой таймер МЭК задачи *)
EVENT_EXCPT_HARDWARE_WATCHDOG, (* Сработал аппаратный сторожевой таймер. Фатальная ошибка. *)
EVENT_EXCPT_FIELDBUS, (* Ошибка Fieldbus *)
EVENT_EXCPT_IOUPDATE, (* Ошибка обновления входов-выходов *)
(*Исключения выполнения *)
EVENT_EXCPT_ILLEGAL_INSTRUCTION, (* Недопустимая инструкция *)
EVENT_EXCPT_ACCESS_VIOLATION, (* Ошибка доступа *)
EVENT_EXCPT_PRIV_INSTRUCTION, (* Привилегированная операция *)
EVENT_EXCPT_IN_PAGE_ERROR, (* Ошибочная страница *)
EVENT_EXCPT_STACK_OVERFLOW, (* Переполнение стека *)
EVENT_EXCPT_MISALIGNMENT, (* Ошибка размещения по типу данных *)
EVENT_EXCPT_ARRAYBOUNDS, (* Выход за границы массива *)
EVENT_EXCPT_DIVIDEBYZERO, (* Деление на 0 *)
EVENT_EXCPT_OVERFLOW, (* Переполнение *)
EVENT_EXCPT_NONCONTINUABLE, (* Авария системы, продолжение работы невозможно *)
EVENT_EXCPT_NO_FPU_AVAILABLE, (* Мат. сопроцессор (FPU) недоступен *)
EVENT_EXCPT_FPU_ERROR, (* FPU: Неопределенная ошибка *)
EVENT_EXCPT_FPU_DENORMAL_OPERAND, (* FPU: Ошибочный операнд *)
EVENT_EXCPT_FPU_DIVIDEBYZERO, (* FPU: Деление на 0 *)
EVENT_EXCPT_FPU_INVALID_OPERATION, (* FPU: Ошибочная операция *)
EVENT_EXCPT_FPU_OVERFLOW, (* FPU: Переполнение*)
EVENT_EXCPT_FPU_STACK_CHECK, (* FPU: Перегрузка стека *)
(* События входов-выходов *)
EVENT_AFTER_READING_INPUTS,
EVENT_BEFORE_WRITING_OUTPUTS,
(* Прочие события *)
EVENT_TIMER, (* Прерывание по таймеру*)
EVENT_DEBUG_LOOP, (* Отладка по точке останова *)
(* Онлайн сервисы *)
EVENT_ONLINE_SERVICES_BEGIN := 500,
EVENT_LOGIN,
EVENT_CUSTOM_SERVICES,
(* Прерывания *)
EVENT_INT_0:=1000,
EVENT_INT_1,
EVENT_INT_2,
EVENT_INT_3,
EVENT_INT_4,
EVENT_INT_5,
EVENT_INT_6,
EVENT_INT_7,
EVENT_INT_8,
EVENT_INT_9,
EVENT_INT_10,
EVENT_INT_11,
EVENT_INT_12,
EVENT_INT_13,
EVENT_INT_14,
EVENT_INT_15,
EVENT_INT_255:=1255,
EVENT_MAX

);

END_TYPE