Uploaded by Андрей Пономаров

Система реального времени CoDeSys

advertisement
CoDeSys SP RTE
Система реального времени CoDeSys
для Windows NT/2000/XP
Руководство для OEM
Copyright  2003, 2004, 2005, 2006 by 3S - Smart Software Solutions GmbH
All rights reserved.
Copyright  2004, 2005, 2006 ПК Пролог (Русская редакция)
Текст данного документа тщательно проверен. Однако практически невозможно гарантировать абсолютное отсутствие ошибок. Мы будем благодарны вам за замечания и предложения по улучшению текста и содержимого документа.
Trademark
Intel is a registered trademark and 80286, 80386, 80486, Pentium are trademarks of Intel Corporation.
Microsoft, MS and MS-DOS are registered trademarks, Windows is a trademark of Microsoft Corporation.
Документ подготовлен:
3S - Smart Software Solutions GmbH
Memminger Straße 151
D-87439 Kempten
Тел.: +49 831 5 40 31 - 0
Факс: +49 831 5 40 31 - 50
Русская редакция:
ПК Пролог
21400, Россия, г. Смоленск, ул. Октябрьской революции, 9
Тел.: +7 (481-2) 38-29-31
Тел./Факс: +7 (481-2) 65-81-71
Текст этого документа опирается на международную версию CoDeSys с английским интерфейсом.
Наименования команд, тексты диалогов и сообщений соответствуют указанной версии.
Последнее обновление 02.02.2006
Редакция RU 1.2, для CoDeSys V.2.3.6.x
1-2
CoDeSys V2.3
Оглавление
1
Обзор
1-6
1.1 Что такое расширение реального времени?
1.2 Детальное описание системы
2
Работа с RTЕ
2-7
2.1 Системное меню
2.1.1
Диагностика (Diagnostic)
2.1.2
Инициализация (Startup)
2.1.3
Настройка (Config)
2.1.4
Дополнительная настройка (Ext. Config)
2.1.5
Доступ (Access)
2.1.6
Драйверы ввода/вывода (IO Drivers)
2.2 Лицензия (License ...)
3
Коммуникация
Системная диагностика
4-25
4-25
5-26
5.1 Диагностика платы с помощью драйверов ввода/вывода
6
5-26
Конфигуратор задач в CoDeSys V2.36-28
6.1 Основные положения
6.2 Сторожевой таймер задач
6.3 Микросекунды в качестве базового кванта времени
6.4 Свободно выполняемые задачи (free wheeling tasks)
6.5 Системные события
7
3-16
3-17
3-18
3-18
3-19
3-20
3-20
3-20
3-21
3-21
3-22
3-22
3-23
3-23
3-23
3-24
4-25
4.1 Драйвер Shared Memory
4.2 Драйвер TCP/IP Level2 Route
5
2-8
2-8
2-10
2-11
2-12
2-13
2-14
2-15
Стандартные драйверы ввода/вывода 3S 3-16
3.1 Драйвер ввода/вывода RTIOdrvHilscherDPM
3.1.1
The SysLibDpV1.lib
3.2 Драйвер ввода/вывода RTIOdrvFC310x.sys
3.2.1
Библиотека SysLibFCDPV1.sys
3.2.2
Библиотека FC_SlaveHandling.lib
3.2.3
FC310x в ведомом режиме
3.3 Драйвер ввода/вывода RTIOdrvCP5613.sys
3.4 Драйвер ввода/вывода RTIOdrvDAMP
3.5 Драйвер ввода/вывода RTIOdrvApplicom
3.6 Драйвер ввода/вывода RTIOdrvIBS (IBS = Interbus, ibpcimpm.sys)
3.7 RTIOdrvSJA and RTIOwdmPCAN
3.8 RTIOdrvAutomata и RTIOwdmAutomata
3.9 RTIOdrvHMS и RTIOwdmHMS
3.10 Драйвер ввода/вывода RTIOdrvAPIC
3.11 The RTIOwdmCANAutomata
3.12 The RTIOwdmSofting
4
1-6
1-6
Системные библиотеки
6-28
6-28
6-28
6-29
6-29
7-30
7.1 DllCall.lib вместе с библиотекой SysLibSystemCall.lib
7.2 SysLibCallback.lib
7.3 SysLibCom.lib
7.4 SysLibFile.lib
7.5 SysLibPorts.lib
7.6 SysLibTime.lib
7.7 SysLibSockets.lib
7-30
7-30
7-30
7-31
7-31
7-32
7-32
1-3
CoDeSys V2.3
8
Поведение системы в случае ошибок выполнения 8-33
9
Приложение
9-34
9.1 Параметры реестра, используемые системой исполнения
9-34
1-4
CoDeSys V2.3
CoDeSys SP RTE
1 Обзор
Документ предполагает, что читатель знаком с назначением и настройкой основных опций системы
исполнения CoDeSys. Данное руководство описывает только специфические расширения системы
исполнения CoDeSys, необходимые для реализации задач реального времени под Windows NT.
Система SP RTE запускается командой «Start CoDeSys SP RTE» из раздела CoDeSys меню «Пуск»
Windows. На панели задач Windows должна появиться иконка
1.1 Что такое расширение реального времени?
Система реального времени характеризуется детерминированным временным поведением. Так если,
например, одна из задач вызывает определенные программы (назначенные в конфигурации), она обязана укладываться в отведенные ей временные рамки. Нарушение этого условия, воспринимается как
сбой всей системы.
Выше сказанное нужно отнести и к контроллерам, работающим под управлением CoDeSys. Это означает, что любая циклическая задача должна вызываться через заранее (с известной точностью) определенные интервалы времени.
Опыт использования Windows NT показывает, что эта операционная система не обеспечивает относительно точных временных характеристик выполняемых задач, т.е. NT нельзя считать системой реального времени.
Однако, аппаратные средства PC, позволяют создать надежный программный планировщик задач.
Расширение реального времени для Windows NT - это NT драйвер, который устанавливает ISR (процедуру обслуживания прерывания), вызываемую периодически сигналом прерывания от аппаратного
таймера PC. Эта процедура выполняет вызов определенных в CoDeSys задач или возвращает управление определенной системе.
1.2 Детальное описание системы
1-6
CoDeSys V2.3
CoDeSys SP RTE
Ядро расширения реального времени (сокращенно RTЕ) состоит из 2-х частей: системного сервиса
RTService.exe и драйвера режима ядра (3SRTE.sys). В обычном режиме системный таймер генерирует
2 аппаратных прерывания в миллисекунду и таким образом вызывает планирование RTE. Планировщик использует одно прерывание для вызова своих задач, а второе для возвращения прерванного
управления ОС. Таким образом, все задачи, определенные в CoDeSys, прерываются через каждую
миллисекунду для того, чтобы операционная система могла выполнить необходимое ей действия. Соотношение совокупного времени выполнения кода операционной системы и времени выполнения задач CoDeSys можно настраивать.
Показанные на рисунке драйверы ввода-вывода (IO-drivers), используемые в RTE, должны иметь определенный интерфейс, который описан в пакете разработчика IO-DriverToolkit.
RTE не изменяет кода ядра операционной системы при установке и во время выполнения.
2 Работа с RTЕ
Для управления RTЕ щелкните правой кнопкой мыши на иконке панели задач.
Доступные команды обозначены черным шрифтом. Доступность команды определяется состоянием, в
котором находится система.
В целом, возможны следующие команды:
−
Start System загружает и запускает драйвер 3SRTE.sys. Только после выполнения этой команды
возможно выполнение задач реального времени и взаимодействие с системой программирования;
−
Stop System останавливает драйвер и выгружает его из памяти;
−
Start Cycle / Stop Cycle запускает или останавливает циклическое выполнение МЭК-задач. Данная команда соответствует командам "Run" /"Stop" в меню "Online" CoDeSys;
−
далее идут три команды сброса, аналогичные доступным в меню CoDeSys;
−
About показывает окно с информацией о версии и авторских правах данного программного продукта;
−
System… открывает диалог настройки параметров системы. Здесь нужно задать 2 ключевых параметра: если установлена опция "Start when booting“ ,то сервис автоматически запускается при
2-7
CoDeSys V2.3
CoDeSys SP RTE
загрузке операционной системы. Это выполняется независимо от того, регистрируется пользователь в системе или нет. Опция “Automatic PLC Start“ определяет, будет ли драйвер 3SRTE.sys загружен автоматически или нет;
−
Exit останавливает не только драйвер, но и сервис. Сервер можно заново запустить с помощью
“Start – Settings– System Control – Services“ или в меню программы. Для запуска драйвера можно
воспользоваться “System Control – Devices”, также командой “ Start System”;
−
License… доступна только в том случае, если вы пользуетесь новой версией, в которой аппаратный ключ заменен программной лицензией.
2.1 Системное меню
Выбрав пункт System в контекстном меню, вы увидите следующий диалог:
Ниже будет описана каждая вкладка этого диалога отдельно.
Для подтверждения выбранных настроек необходимо нажать кнопку “ОК.”. Изменения вступят в силу после того, как ПЛК будет перезапущен.
2.1.1 Диагностика (Diagnostic)
Первые две строчки в этом диалоге описывают состояние системы.
Ошибки в ходе загрузки ядра (Error while startup of kernel)
В этом поле указываются ошибки, которые происходят во время загрузки. Возможны следующие сообщения об ошибках:
−
"No error.": система запущена без ошибок;
2-8
CoDeSys V2.3
CoDeSys SP RTE
−
"No memory available for CodeArea0.": сегмент кода CodeArea0 не был создан. Размер системного
ОЗУ недостаточен для размещения требуемого сегмента памяти. Уменьшите размер памяти программ (см. ниже);
−
"No memory available for CodeArea1.". Смотри предыдущий пункт.
−
"No memory available for DataArea.":. Смотри предыдущий пункт. Уменьшите требуемый размер
памяти данных;
−
"Communication Interface could not initialize.".: Объем ОЗУ недостаточен для размещения коммуникационных данных. Единственно, что может помочь в этой ситуации это использование дополнительной памяти.
−
"Checksumerror when loading bootproject.".: Загрузочный проект “Default.prg” поврежден. Создайте его заново;
−
"Bootproject too big.".: Размер кода загрузочного проекта слишком велик. Переделайте загрузочный проект, либо измените размер сегмента программы;
−
"Datasize of bootproject too big.".: Смотри пункт "Bootproject too big".
−
"Could not relocate bootproject." : Возможно загрузочный проект поврежден;
−
"Error reading bootprojectfile.": Загрузочный проект либо поврежден, либо занят другим приложением;
−
"Error reading taskconfig from bootproject.": Возможно загрузочный проект поврежден;
−
"Error reading IOconfig from bootproject.": Возможно загрузочный проект поврежден;
−
"No IO-driver found but specified." : Выбранные драйверы не найдены или не могут быть загружены. Установите драйвер;
−
„An IO-driver failed in his initfunction." :Ошибка при инициализации драйверов ввода/вывода;
−
„An IO-driver must handle at least 1 device.".: Драйвер сообщает о том, что он не может найти устройство. Проверьте конфигурацию входов/выходов;
−
„The PC-timer could not be calibrated." : Системный таймер не вызывает процедуру обработки прерывания. Возможно у вас не АТ-совместимый ПК. Свяжитесь с 3S, либо переустановите RTE;
−
„The PC-timertick is inexact.": Системный таймер работает не верно.
Ошибки в ходе исполнения
В данном поле появляются ошибки, которые происходят во время выполнения программы ПЛК.
Они одинаковы для всех систем исполнения CoDeSys:
 Watchdog: Время выполнения задачи превысило максимально допустимое, определенное в конфигурации сторожевого таймера. Возможно, в вашей программе есть ошибка (например, бесконечный цикл).
 Fieldbus error : Ошибка во время настройки карт ввода/вывода.
2-9
CoDeSys V2.3
CoDeSys SP RTE
 IO-updateerror: Ошибка во время чтения/записи входов или выходов. Например, вы пытаетесь читать или писать по адресу, который не доступен драйверу. Возможна только в том случае, если
выключена опция "no address check" в настройках целевой информации.
 Illegal instruction: Процессор не может выполнить команду. Такая ситуация возможна, если файл
проекта поврежден, либо часть кода программы затерта данными.
 Accessviolation: Ошибки доступа к памяти: приложение пытается обратиться по неправильному
адресу. У вас ошибка в программе.
 Вычислительные ошибки „Division by zero“, „Inexact result“, „Invalid operation“, „Denormal operand“ и „Overflow“. Являются следствием ошибок в программе.
Место в программном коде, где произошла любая их этих ошибок (за исключением IO-updateerror)
можно определить в Online режиме CoDeSys с помощью команды „Show Call Stack“.
Текущая загрузка ПЛК (Current PLC load)
Данный индикатор показывает текущую загрузку ПЛК. Если уровень загрузки ПЛК слишком высок
или происходят необоснованные срабатывания таймера-сторожа, увеличьте время выполнения RTE на
процессоре по сравнению с операционной системой (см. пункт „Config“). Уровень загрузки всегда определяется относительно максимально возможного уровня загрузки ПЛК, а не всего процессора.
Конфигурация ввода/вывода Detected IO Configuration)
Окно слева показывает выбранные драйверы. Окно справа показывает устройства, которые управляются выбранным драйвером. Для каждого драйвера показываются его версии и список устройств (начиная с 0).
2.1.2 Инициализация (Startup)
Здесь вы можете настроить процесс инициализации системы.
Опции:
Start the RTE basic systemservice when booting: SP RTE будет автоматически загружена при загрузке
операционной системы.
RTE basic systemservice startup: Настройка процесса загрузки системного сервиса. Задайте в данном
разделе, будет ли сервис запускать ПЛК в любом случае, никогда, либо в случае, если ранее ПЛК
был остановлен корректно.
PLC startup: Настройка процесса загрузки ПЛК. Задайте в этом разделе, будет ли ПЛК загружать загрузочный проект в любом случае, никогда, либо в случае, если ранее ПЛК был остановлен корректно.
Bootproject startup: Настройка запуска загрузочного проекта. Задайте здесь, будет ли загрузочный
проект запущен в любом случае, никогда или в случае, если ранее ПЛК был остановлен корректно.
2-10
CoDeSys V2.3
CoDeSys SP RTE
2.1.3 Настройка (Config)
Задайте ряд базовых настроек:
−
Output handling: Если активна, то при остановке цикла выходы будут переведены в нулевое состояние (исключение: если опция „Force to logical 1“ также включена, то выходы будут переведены в единичное состояние).
2-11
CoDeSys V2.3
CoDeSys SP RTE
General NT-settings: Если опция „Enable bluescreen handling“ активна, то при возникновении системных ошибок операционная система не выводит „синий экран смерти“ (BSOD), а просто зависает, выполняется только RTE. В этом случае все функции (например, работа с файлами и сетью),
требующие участия операционной системы работать не будут.
−
Watchdog: Здесь вы можете включить или выключить контроль времени цикла для задач, а также
задать число (множитель) на которое нужно умножить номинальное время цикла, чтобы получить
максимальное время цикла при превышении которого произойдет срабатывание таймера-сторожа.
−
Timebase: Длительность базового интервала времени (по умолчанию равна 1 мс). Изменяя этот
параметр можно достичь большей точности (для версии CoDeSys 2.3 и выше), а также задать
время цикла меньше 1мс. (В версиях старше 2.3.1 также можно было определять время цикла
<1мс, но время, заданное в конфигураторе задач CoDeSys анализируется в микросекундах только
сейчас.)
−
PLC data- and codesize: Здесь определяется размер памяти программы и данных, которая выделяется ПЛК при загрузке. Эти значения должны соответствовать тем, что заданы в настройках целевой системы (memory layout).
−
PLC Filepath: В данной папке ПЛК хранит файл загрузочного проекта, содержимое энергонезависимой (retain) памяти и т.д. Данная папка должна существовать и иметь доступ по записи.
2.1.4 Дополнительная настройка (Ext. Config)
Настройка опций этого раздела требует глубокого понимания принципов функционирования аппаратного обеспечения ПК.
2-12
CoDeSys V2.3
CoDeSys SP RTE
 IO driver settings: Если опция „RTE Stops IOdrivers on exit“ активна, то ядро RTE остановит драйверы входов/выходов при завершении работы ПЛК. Если при обработке аппаратных прерываний
требуется выполнение операций с плавающей запятой, включите опцию “Connect interrupts floatingpoint-save”. Не следует использовать эту опцию без необходимости. Это приведет к потере
производительности. Если обработчик прерывания будет использовать операции с числами с плавающей запятой, а эта опция не будет включена, это вызовет крах системы. В поле
„Initial
stackpool for IO drivers“ введите размер стека для задач, создаваемых драйвером ввода/вывода (не
путайте с задачами, созданными CoDeSys). Опция “Disable automatic bus diagnostic” запрещает
запись диагностических данных по соответствующим адресам, определенным в конфигурации
ПЛК.
 Retain: Если опция „Do not allocate retainmemory in RAM“ и “Retainmemory on physical address“ активна, то все переменные, объявленные в CoDeSys с флагом “RETAIN” будут записываться в статическое ОЗУ. Для этой цели ПК должно иметь статическое ОЗУ по адресу, указанному в папке
"Рhysical address". Опция „Retain are saved by IODriver” должна быть включена, если вы хотите
использовать драйвер ввода/вывода для управления SRAM. Опция „Retain are saved to file on
exit“ не требует наличия специальной аппаратуры. Если опция активна, то значения RETAINпеременных сохраняются при корректном завершении RTE. Эта настройка применяется, если PC
имеет источник бесперебойного питания.
 NMI Scheduling: Если опция "Schedule on NMI" выключена, то ПЛК не устанавливает обработчик
прерывания таймера. Эту опцию следует использовать, если имеется драйвер ввода/вывода, который генерирует или хотя бы подтверждает периодические прерывания. Если включена опция “RTE
connects NMI itself”, то ПЛК сам устанавливает обработчик прерывания на вектор NMI. Если опция
“IO driver determines next task“ активна, то драйвер ввода/вывода, который активизирует и подтверждает NMI, определяет, что планировщик должен делать после каждого прерывания. Если он
не может этого определить, то ПЛК сам определяет, когда нужно выполнять свои задачи, а когда
задачи операционной системы. Для этой цели ПЛК использует значение, заданное в поле „max.
non-NT-Intervall“, которое определяет время, выделенное для выполнения ПЛК-задач. По возможности не используйте этот метод, так как он не является гибким и предполагает ассиметричную генерацию прерывания. Если драйвер сам устанавливает прерывание для планировщика, то нужно
включить опцию „IO driver connects interrupt“. Если вы хотите позволить драйверу (который также
определяет прерывание для планировщика) вызывать задачу с самым большим приоритетом в любой момент времени, также включите эту опцию.
2.1.5 Доступ (Access)
Вы можете задать пороли для каждого из 5 уровней доступа к системе, которые обеспечивают защиту
от несанкционированного доступа. Система всегда запускается с самым большим (по номеру) уровнем доступа, для которого определен пароль, т.е. с уровнем приоритета с наименьшими правами. Пароль можно задать, только находясь на первом уровне доступа. Права более высокого уровня доступа
автоматически включают все права нижних уровней, а также специальные права, соответствующие
именно этому уровню. Для входа в систему с необходимыми уровнями доступа нажмите кнопку
Change Level, выберите нужный уровень и введите пароль. Данный уровень доступа будет сохраняться до тех пор, пока вы не нажмете кнопку Logout.
Таблица, приведенная ниже, иллюстрирует, какие действия доступны на каждом уровне доступа.
Level
Start/Stop
Cycle
Start/Stop/Exit
System
Startup/
Configuration
1
2
3
4
5
x
x
x
x
x
x
x
x
x
-
x
x
x
-
Extended
Configuration/
IO-Driver config.
x
x
-
Change
passwords
x
2-13
CoDeSys V2.3
CoDeSys SP RTE
В полях Password Level вы должны ввести пароли и подтвердить их в поле Confirm password,
2.1.6 Драйверы ввода/вывода (IO Drivers)
Здесь вы можете присоединить к ПЛК драйверы ввода/вывода и пользовательские DLL. Их название
можно вносить вручную или выбрать из списка, который создается при установке. Список драйверов
и DLL хранятся в реестре в разделах \HKEY_LOCAL_MACHINE\SOFTWARE\3SSmart Software Solutions
GmbH\CoDeSys SP\RTPLC\IO Driverpool и соответственно External DLL Pool. Названия разделов реестра соответствуют элементам списка.
Драйверы и DLL получают порядковые номера по возрастанию, начиная с 0.
При корректном выборе драйвера справа появляется серая галочка. Это говорит о том, что драйвер зарегистрирован в системе. Если это не так, то при запуске ПЛК вы увидите сообщение об ошибке.
2-14
CoDeSys V2.3
CoDeSys SP RTE
Замечание для разработчиков драйверов: Если объект, который создает драйвер, имеет тоже имя, что и .sysфайл, то в этом поле достаточно указание одного слова. В противном случае драйвер задается двумя
словами, разделенными пробелом <имя объекта> <имя драйвера>
Каждый драйвер занимает определенное адресное пространство. Размер этого пространства показан в
разделе "Diagnostic" (см. выше). Адресные пространства для каждого драйвера идут в том же порядке
(друг за другом), как они перечислены здесь.
Пример:
В ПК имеется 2 платы Hilscher: одна (Device0) занимает 512 бит, а 2-я 3584. Обе платы сконфигурированы с помощью SyCon, все модули адресуются без пропусков, начиная с 0.
В СоDeSys первая плата будет отображаться на адресное пространство входов, начиная с %IB0 до
%IB511, и входов, начиная с %QB0 до %QB511 . Вторая плата будет занимать пространство, начиная
с %QB512 и %IB512 соответственно.
2.2 Лицензия (License ...)
Зарегистрируйте CoDeSys SP RTE, выбрав пункт меню “License…”. Появится диалог, в котором вы
увидите тип действующей лицензии.
2-15
CoDeSys V2.3
CoDeSys SP RTE
Нажав кнопку „Change...“ вы можете изменить установленный тип лицензии. Будет запущен мастер
лицензирования, который поможет вам получить необходимую лицензию по e-mail или телефону.
3 Стандартные драйверы ввода/вывода 3S
Примечание: Если вы установили RTE не на АТ-совместимый PC, но соответствующий спецификации UP-MPS,
то будет установлен драйвер RTIOdrvAPIC. Вы не сможете не настроить, не удалить этот драйвер.
3.1 Драйвер ввода/вывода RTIOdrvHilscherDPM
Драйвер RTIOdrvHilscherDPM использует подразделы Device 0 – 4, которые расположены в разделе
реестра HKEY_LOCAL_MACHINE\System\CurentControlSet\Services\RTIOdrvHilscherDPM\Params. В
них записаны настройки установленных в текущий момент плат.
Возможные параметры и их значения:
Возможные значения
Пояснения
Device0..4\Type (String)
8K_DPM или 2K_DPM
Установлена Hilscher-CIF/COM плата, занимающая 2K (1Kb ввод/вывод) или 8K (7Kb
ввод/вывод)
Device0..4\Address (DWORD)
32-разрядное значение
Физический адрес платы
CreateComTask
0 или 1, по-умолчанию:1.
Если параметр определен и равен 1, то создается
коммуникационная задача, которая постоянно
контролирует прием сообщений платами Hilscher.
Если параметр не определен или его значение
равно 0, то такая задача не создается.
Device0..4\DoNotConfigure
0 или 1
Если значение параметра равно 1, то плата игнорируется CoDeSys в PLC Configuration
Detected
Строка „Not found”или
“Card found: <Information
on the card>
Параметр показывает, какая плата была обнаружена драйвером
В Params: AutoDetection
0 или 1
Параметр используется для разрешения (1) или
блокирования автоматического поиска платы.
Если плата не обнаруживается автоматически,
адрес/тип платы нужно задать в ручную в полях
Address/Type.
Если вы используете ручную настройку (AutoDetection = 0), не забудьте, что адрес платы может поменяться при добавлении нового PCI устройства.
Данный драйвер способен работать со всеми платами Hilscher, даже с теми, которые нельзя конфигурировать в CoDeSys.
Если
включен
режим
автоматического
обнаружения
плат,
то
в
разделах
HKEY_LOCAL_MACHINE\System\CurentControlSet\Services\RTIOdrvHilscherDPM\Device0-4 появится
информация о найденных платах.
3-16
CoDeSys V2.3
CoDeSys SP RTE
Доступ к адресному пространству платы осуществляется циклически (синхронно), если в SyCon установлен тип доступа „user controlled, buffered“. Драйвер осуществляет хендшекинг со всеми Hilscher
платами через PdCom-Flag.
При использовании Profibus- или CANopen плат применяется PLC конфигуратор CoDeSys. С его помощью выполняется настройка адресов ввода/вывода, благодаря которой система знает, какую плату
нужно адресовать.
При работе с платами Hilscher интерфейс передачи сообщений доступен посредством библиотеки
Hilscher.lib (подробнее см. документацию Hilscher на плату). Кроме того, для CANopen библиотека
Hilscher_SDOtransfer.lib реализует SDO обмен с узлами в CAN сети. Обе библиотеки устанавливаются
автоматически.
3.1.1 The SysLibDpV1.lib
Библиотека SysLibDPV1.lib может быть использована совместно с RTIOdrvHilscherDPM и соответствующей платой. Библиотека содержит 2 функциональных блока:
DPV1_Read
DPV1_Write
С их помощью можно реализовать ацикличные коммуникационные сервисы класса 1 (MSAC_C1).
Функциональные блоки имеют следующие входные параметры:
ENABLE:BOOL; Вход разрешения работы, запуск сервиса.
Device:INT;
Номер платы. Равен 0, если в системе установлена только одна плата.
StationAddr:INT; Адрес станции для платы.
Slot:INT;
Слот (Slot) и индекс (Index) в соответствии со спецификацией сервисов DPV1.
Index:INT;
Len:INT;
Количество записываемых байт (при вызове WRITE), соответственно размер локального буфера (для READ).
Buffer:DWORD;
Адрес локального буфера. Как правило, это адрес массива байт. Используйте
ADR() для его определения.
Функциональный блок запускается по переднему фронту на входе ENABLE. Далее его нужно вызывать с ENABLE=TRUE до тех пор, пока на выходе READY не появится значение TRUE.
Выход STATE дает информацию о корректности выполнения сервиса.
Выход Size сообщает фактический размер переданных данных.
В случае ошибки, в первый байт буфера (только для READ) записывается код ошибки полученный от
платы Hilscher. См. соответствующую документацию на плату для подробного описания ошибки.
С платами Hilscher можно напрямую использовать интерфейс сообщений через библиотеку
Hilscher.lib (См. документацию, поставляемую с соответствующей платой). Для плат CANopen библиотека Hilscher_SDOtransfer.lib реализует обмен SDO. Обе библиотеки входят в дистрибутив.
3-17
CoDeSys V2.3
CoDeSys SP RTE
3.2 Драйвер ввода/вывода RTIOdrvFC310x.sys
Данный драйвер управляет ведущими (master) платами Beckhoff Profibus FC3101 и FC3102.
Платы определяются автоматически и могут быть настроены с помощью PLC configurator.
Двухканальная плата (FC3102) определяется как 2 отдельных устройства.
Драйвер считывает статус прошивки платы, но вы можете полностью использовать функциональность платы, если версия прошивки не ниже 2.0 (выпущена в августе 2002 года).
Для настройки платы драйвер использует параметр
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOdrvFC310x\Params\Debug, который
кодируется побитно (если этот параметр отсутствует, то он считается равным 0).
Бит 0: Если он равен "1", то при завершении работы драйвера, т.е. при завершении работы RTE, в этом
разделе реестра сохраняется статистика ошибок для каждого сконфигурированного подчиненного
устройства. Таким образом, вы можете оценить качество работы РВ-сети.
Бит 1: Если установлен в 1, то режим синхронизации задач для этой платы не используется. Следовательно, РВ циклы будут выполняться асинхронно с задачами ПЛК.
Для вызова коммуникационных DPV1 сервисов Read и Write платы FC310x используется библиотека
SysLibFCDPV1.lib.
3.2.1 Библиотека SysLibFCDPV1.sys
Эту библиотеку можно использовать только вместе с драйвером RTIOdrvFC310x и соответствующей
платой. Она содержит 2 функциональных блока:

FC_DPV1_Read

FC_DPV1_Write
С помощью этих функциональных блоков осуществляется асинхронная передача данных через сервисы класса 1 (MSAC_C1).
Оба функциональных блока имеют следующие входные параметры:
ENABLE:BOOL;
Функциональный блок запускается по переднему фронту.
Device:INT;
Номер платы. Если на ПК установлена только одна плата, то присвойте этому входу значение 0.
StationAddr:INT;
Адрес подчиненного узла, с которым нужно связаться.
Slot:INT;
Эти параметры определены в спецификации РВ и различны для каждого подчиненного устройства (см. соответствующую документацию
устройств).
Index:INT;
Len:INT;
Число байт для записи (для блока WRITE) или размер буфера приема
(для блока READ).
3-18
CoDeSys V2.3
CoDeSys SP RTE
buffer:DWORD;
Адрес буфера. Для его определения используйте оператор ADR().
Обычно это адрес массива байт.
Для запуска этих функциональных блоков подайте передний фронт на вход enable. Затем вызывайте
функциональный блок циклически до тех пор, пока выход READY не примет значение, равное TRUE.
Код завершения операции можно узнать на выходе STATE. При выполнении блока READ, в случае
ошибки ее код записывается в буфер приема. Значения этих кодов можно узнать в документации на
FC3101/FC3102
Функция FC_ClearMessageBox используется для сброса интерфейса сообщений платы и должна вызываться только после команды ONLINE/RESET или после завершения загрузки программы в контроллер.
Функцию нужно использовать следующим образом (вызывается циклически):
IF ClearFCMessageBox THEN
dwMsgBoxState := FC_ClearMessageBox(0);
IF dwMsgBoxState = 0 THEN
ClearFCMessageBox := FALSE;
END_IF
END_IF
Если возвращаемое значение равно 0, то задач, которые должны быть удалены нет. В противном случае в 16 старших битах содержится идентификатор удаленной задачи. Если функция возвращает
16#FFFFFFFF, то это означает что, функция выполнена с ошибкой.
Единственный входной параметр – это индекс платы, задачи которой нужно удалить.
3.2.2 Библиотека FC_SlaveHandling.lib
Библиотека FC_SlaveHandling.lib используется с платой FC310x (версия прошивки 2.17 и выше). Библиотека используется для активирования/деактивирования открытых подчиненных устройств во время
исполнения.
Функциональный блок имеет следующие входы:
ENABLE: BOOL;
Функциональный блок запускается по переднему фронту.
iSlaveAddress : BYTE;
Адрес подчиненного устройства, которое должно быть активировано/деактивировано
iNewState : SETSTATE;
Состояние, в которое нужно перевести подчиненное устройство.
После деактивирования подчиненного устройства, плата FC3101/FC3102 более не будет обмениваться
данными с этим устройством, также как и в случае, когда устройство вообще не было сконфигурировано. После активации подчиненного, ведущее устройство возобновит обмен данными.
Все сконфигурированные подчиненные устройства являются активными после загрузки программы
CoDeSys. Библиотека может понадобиться лишь в том случае, если нужно активировать/деактивировать устройство во время исполнения.
3-19
CoDeSys V2.3
CoDeSys SP RTE
3.2.3 FC310x в ведомом режиме
Данные платы могут применятся и в ведомом режиме (двухканальная плата FC3102 может работать
как ведущей и ведомый в двух разных сетях). Вы должны указать драйверу, какая плата должна работать ведомой, и какую скорость передачи нужно использовать. Установки вводятся путем редактирования реестра
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOdrvFC310x\Params).
Значение “DeviceXIsSlave“ типа DWORD нужно установить в 1, где X это индекс платы. (Так, при наличии единственной платы FC3101 идентификатор значения будет “Device0IsSlave“.)
Значение “SlaveXBaudRate“типа DWORD должно содержать необходимую скорость обмена (плата не
способна определить его автоматически!). (Например, опять же при единственной FC3101: идентификатор значения будет “Slave0BaudRate“ и может иметь значение 12000000 для скорости 12MBaud.)
Обязательно необходимо установить значение “Debug“типа DWORD равным 2.
Внимание: Данные значения считываются при запуске драйвера. Драйвер запускается командой “Start system “ из
меню RTE.
3.3 Драйвер ввода/вывода RTIOdrvCP5613.sys
Данный драйвер применяется для Siemens Profibus master CP5613.
Для работы драйвера необходим файл „FW_5613.bin“. Этот файл должен находится в рабочей папке
RTE. Путь к этой директории записан в реестре HKEY_LOCAL_MACHINE\SOFTWARE\3S Smart
Software Solutions GmbH\CoDeSys SP\RTPLC\ Path.
Драйвер использует два параметра из раздела
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOdrvCP5613\Param
 „Debug“: Если этот параметр не равен 0, то LDB, создаваемая из конфигурационных данных
CoDeSys, будет записана не только в плату, но и в виде файла на жесткий диск, Этот файл называется „out__x.ldb“, где x – индекс платы, и находится в рабочей папке RTE.
 „ReadFile“: Если этот параметр не равен 1, то создаются конфигурированные данные CoDeSys, а
если "Debug" равен 1, то они записываются на диск, однако в плату будет записываться LDBфайл с именем "in.ldb" и находящийся в рабочей папке RTE.
Если вы хотите работать с платой в RTE, то в этом случае вы должны создать РВ-конфигурацию в
CoDeSys, даже если конфигурация считывается из файла.
Драйвер обслуживает плату только в том случае, если конфигурация загружена вместе с программой.
3.4 Драйвер ввода/вывода RTIOdrvDAMP
Этот драйвер может работать с любой платой ввода-вывода, которая разделяет область памяти PC по
фиксированному физическому адресу (имеет двухпортовое ОЗУ).
Общая область памяти должна быть разделена на области ввода и вывода, а входы и выходы платы
должны быть распределены в этих областях по фиксированным адресам.
Драйвер настраивается в разделе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOdrvDAMP\Params, в котором нахо3-20
CoDeSys V2.3
CoDeSys SP RTE
дятся подразделы вида “DeviceX”, где X – это индекс платы (от 0 до 4) и параметр 'Simulation'. Если
этот параметр равен 1, то входы/выходы не будут читаться и записываться. Эту возможность удобно
использовать при тестировании программы.
Раздел “DeviceX” содержит следующие параметры:
 „Flags“: Если плата с данным индексом физически присутствует в PC, то параметр должен быть
равен "7", в противном случае, "0".
 „PhysAddrIn“: Физический адрес области ввода этой платы.
 „PhysAddrOut“:Физический адрес области вывода этой платы
 „InLen“: Размер области ввода в байтах.
 „OutLen“:Размер области вывода в байтах.
Пример:
ПЛК используется плата дискретных входов/выходов с областями ввода/вывода размером по 64 байта.
Плата вставлена в шину ISA и имеет адрес 0xC0000. Область вывода следует сразу за областью ввода.
В этом случае вышеперечисленные параметры реестра должны быть настроены следующим образом
(в Device0):

Flags = 7

InLen = 64

OutLen = 64

PysAddrIn = C0000

PhysAddrOut = C0040
3.5 Драйвер ввода/вывода RTIOdrvApplicom
Данный драйвер управляет платами ввода/вывода Applicom. Можно использовать платы с любым
шинным интерфейсом. Программный интерфейс между платой и ПЛК всегда один и тот же. Платы
настраиваются только с помощью инструмента конфигурирования, который поставляется фирмой
Applicom вместе с платами.
Для определения адресов ввода/вывода какого-либо модуля программист должен учесть, что модули
располагаются друг за другом в области ввода/вывода ПЛК.
Драйвер определяет и обслуживает каждую плату ApplicomIO независимо от других плат.
Драйвер не требует каких-либо настроек в реестре.
3.6 Драйвер ввода/вывода RTIOdrvIBS (IBS = Interbus, ibpcimpm.sys)
Драйвер управляет платой InterbusS master card IBS PCI SC/I-T фирмы Phoenix Contact.
Устанавливается автоматически при установке RTE. Для того, чтобы использовать IBS PCI SC/I-T под
Windows 2000 или ХР нужно установить другой драйвер из директории w2k_Xp инсталляционного
CD, используя соответствующие .inf-файлы. Возможно, придется деинсталлировать ранее установленный драйвер.
3-21
CoDeSys V2.3
CoDeSys SP RTE
Этому драйверу соответствует элемент „Ibsisasc1N1Dibpcimpm“в списке драйверов на вкладке IO
drivers .
Замечание: Драйвер может работать только с одной платой, установленной на ПК.
Плата настраивается с помощью инструмента конфигурирования фирмы Phoenix (CMD G4).
После этого RTE может обмениваться данными с InterbusS сетью, в соответствии со сделанными настройками. Адреса ввода/вывода в ПЛК-программе соответствуют тем, которые были установлены в
инструменте CMD.
Для того, чтобы работать с платой и драйвером, прежде всего, необходимо установить программу
CMD, поставляемую фирмой Phoenix Contact. Она нужна, чтобы загрузить конфигурацию в плату и
сохранить ее в памяти платы. Если вы хотите конфигурировать плату удаленно через последовательный интерфейс, этот шаг можно пропустить, но в любом случае запомните, что если вы позже всетаки решите установить CMD, то 3S-драйвер может быть перезаписан. В этом случае вам нужно будет
переустановить RTE после установки CMD (другой вариант: сохраните драйвер ibpcimpm.sys из директории System32\drivers и восстановите его после завершения установки CMD)
Для того, чтобы стал возможным перезапуск платы после ошибки в сети без использования CMD G4,
после конфигурирования и запуска платы с помощью CMD здесь же выполните команду „Write
parametrizing memory“ Это необходимо для того, чтобы сохранить конфигурацию в памяти платы. Таким образом, чтобы перезапустить плату, в случае ошибки сети выполните команду „Online/Reset“ в
меню CoDeSys или любую из команд „Reset Warm/Cold/Hard“ в пользовательском меню RTE.
3.7 RTIOdrvSJA and RTIOwdmPCAN
Для того, чтобы использовать CAN-плату PCAN-PCI фирмы Peak-Systems в Windows NT4 выберите
драйвер RTIOdrvSJA из списка драйверов на вкладке IO Drivers.
При работе в XP/Win2000 сначала установите плату, а потом драйвер, используя .inf –файл из директории Win2K_XP\Peak Systems PCAN.
3.8 RTIOdrvAutomata и RTIOwdmAutomata
Для того, чтобы использовать плату SERCOS- фирмы Automata в Windows NT4 выберите драйвер
RTIOdrvAutomata на вкладке IO Drivers.
Чтобы использовать эту плату в Windows ХР/2000, сначала установите плату, а также драйвер, используя inf-файл из директории Win2K_XP\Sercos Automata на инсталляционном диске, либо в директории RTE. После этого выберите драйвер RTIOwdmAutomata на вкладке IO Drivers .
Драйвер позволяет работать только с одной платой.
В Windows NT4.0 можно использовать версию платы ISA/PC104. В этом случае драйвер нужно настроить.
В
реестре
нужно
настроить
параметры
Address
и
Interrupt
в
разделе
\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\RTIOdrvAutomata\Params. Address - физический адрес платы, Interrupt – вектор прерывания.
PCI-версия платы может использоваться без всяких настроек сразу после установки RTE.
В данный момент код Windows XP и 2K можно использовать только платы PCI.
3-22
CoDeSys V2.3
CoDeSys SP RTE
3.9 RTIOdrvHMS и RTIOwdmHMS
Драйвер RTIOdrvHMS управляет Profibus-PCI платами компании HMS. Можно использовать как ведущие (master), так и ведомые (slave) версии платы.
Драйвер самостоятельно распознает платы. Его не нужно настраивать и он может поддерживать до 5
master и slave плат, причем master и slave платы можно использовать одновременно.
Для того, чтобы работать с этой платой под Windows XP и 2K., установите плату в ПК и установите
драйвер, используя .inf –файл из директории Win2K_XP\PBMasterSlave HMS.
На вкладке IO Drivers всегда выбирайте драйвер RTIOdrvHMS, независимо от версии Windows .
Замечание: Перед установкой драйвера, независимо не от чего, деинсталлируйте уже установленный HMS драйвер. Убедитесь, что менеджер оборудования установил драйвер, поставляемый 3S.
3.10 Драйвер ввода/вывода RTIOdrvAPIC
Этот драйвер устанавливается автоматически, если это необходимо. Его не нужно настраивать.
Но если одна из следующих переменных: SetClocksPerUS или SetClocksMS отсутствует в системном
реестре то, драйвер будет вынужден определять частоту прерываний при запуске. Это может занять
около 30 секунд. Далее драйвер запишет измеренные значения в реестр и будет использовать их при
последующих запусках. Изменение данных значений позволяет конфигурировать драйвер вручную.
Кроме того, в реестр записываются диагностические данные:
В разделе \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOdrvAPIC биты параметра
"ErrLog" имеют следующие значения:
Bit 0: NO_ERROR
Равен 1, если инициализация была выполнена успешно.
Bit 1: ERR_APIC_NOT_ENABLED
Контроллер прерываний не был инициализирован.
Bit 2: ERR_MISSING_CPU_FEATURE
Процессор не имеет требуемого контроллера прерываний
Bit 3: ERR_APIC_NOT_MAPPED l
Как и ранее
Bit 4: ERR_IOAPIC_NOT_MAPPED
Как и ранее
Bit 5: ERR_INTTEST_TIMEOUT
Источник прерывания не может быть инициализирован.
Bit 6: ERR_NO_CPU_CLOCKFRQ
Частота таймера ПК не может быть вычислена,
Bit 7: ERR_MY_INT_ISUSED
Не найдены свободные векторы прерываний.
Bit 8: ERR_NO_FREE_INT_FOUND l
Как в 7
Bit 9: ERR_TIMERINT_NOT_DISABLED
Это не APIC-платформа.
Если вы получили одну из этих ошибок, свяжитесь со службой поддержки 3S .
3.11 The RTIOwdmCANAutomata
Чтобы работать с CAN платой фирмы Automata, используйте этот драйвер. Драйвер работает под
Windows 2000/XP. Если вы хотите использовать плату под Windows NT 4.0, свяжитесь с 3S.
Для работs с платами CAN PCI 1N, 2N или 2NNV (описаны как 70034500, 70062810 и 70062800 в документации Automata) сначала установите плату, а при следующей загрузке PC, установите драйвер из
3-23
CoDeSys V2.3
CoDeSys SP RTE
директории “CAN Automata”. После установки драйвера появится соответствующий пункт на вкладке
IO Drivers.
Если вы используете плату с двумя каналами и NV-ram, то при запуске системы драйвер автоматически изменит настройки retain-переменных так, чтобы они отображались по физическим адресам NVram платы. Вы можете проверить это, командой Ext.config.
Для того, чтобы драйвер не изменял настройки retain переменных нужно создать параметр реестра
HKEY_LOCAL_MACHINE\SYSTEM\CrrentControlSet\Services\RTIOwdmCANAutomata\Params\ NoRetain
и записать в него 1.
3.12 The RTIOwdmSofting
Для работы с платой Profibus Master „PROFIboard PCI“ компании Softing в SP RTE, плату необходимо
инсталлировать с помощью файла RTIOwdmSofting.inf.
Драйвер предназначен для работы в Windows 2000 и XP.
В HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RTIOwdmSofting\Params значение опционального параметра “SyncMode” (типа DWORD) может быть принудительно установлено в 0. В
этом случае плата работает с собственным циклом обновления profibus. Обычно лучше позволить PLC
запускать PB-цикл. Такой режим задан по умолчанию.
3-24
CoDeSys V2.3
CoDeSys SP RTE
4 Коммуникация
Система программирования CoDeSys связывается с RTE двумя способами:
 С помощью драйвера Shared Memory.
 С помощью драйвера TCP/IP Level2 Route.
Есть и другие способы связи с RTE (например, Profibus FMS через 2 Hilscher PB-платы), но они не
входят в стандартную поставку RTE и их нужно запрашивать в 3S GmbH.
4.1 Драйвер Shared Memory
Драйвер доступен, когда вместе с ПЛК на PC запущен Gateway. В системе программирования CoDeSys откройте диалог “Online/Communication parameters“ и выберите 'Shared Memory Driver' в качестве
коммуникационного канала (при необходимости создайте новый канал, нажав „New...“).
Теперь система программирования может связаться с ПЛК.
4.2 Драйвер TCP/IP Level2 Route
При использовании этого драйвера не имеет значение, на каком ПК запущен Gateway.
В системе программирования CoDeSys в диалоге “Online/Communication parameters” выберите необходимый вам Gateway, например localhost. Потом выберите коммуникационный канал "TCP/IP Level2
Route" и введите адрес назначения: доменное имя или IP –адрес ПЛК.
После этого система программирования сможет связаться с ПЛК
4-25
CoDeSys V2.3
CoDeSys SP RTE
5 Системная диагностика
5.1 Диагностика платы с помощью драйверов ввода/вывода
Все драйверы ввода/вывода циклически заполняют диагностическую структуру GetBusState, как только МЭК-задача передаст значения входов/выходов драйверу.
TYPE GETBUSSTATE:
STRUCT
BOLDENABLE : BOOL;
ENABLE: BOOL;
DRIVERNAME:POINTER TO STRING;
DEVICENUMBER:INT;
READY:BYTE;
STATE:INT;
EXTENDEDINFO:ARRAY[0..129] OF BYTE;
END_STRUCT
END_TYPE
Структура определена в библиотеке BusDiag.lib.
Драйверы ввода/вывода располагают эту структуру по диагностическому адресу, который определен
в конфигурации для каждого ведущего устройства. Эта возможность доступна только для устройств,
которые сконфигурированы в CoDeSys.
Для каждого потенциального узла платы выделен байт в массиве EXTENDEDINFO, где биты от 0 до 2
имеют следующие значения:
Bit 0:
Узел доступен в конфигурации
Bit 1:
Узел доступен на шине.
Bit 2:
Узел возвратил ошибку.
Если узел на шине возвратил ошибку, то соответствующую диагностическую информацию можно получить с помощью функционального блока DiagGetState (определен также в BusDiag.lib).
DiagGetState вызывается для определенного узла шины.
FUNCTION_BLOCK DiagGetState
VAR_INPUT
ENABLE:BOOL ;
DRIVERNAME:POINTER TO STRING ;
DEVICENUMBER:INT ;
BUSMEMBERID:DWORD ;
END_VAR
VAR_OUTPUT
5-26
CoDeSys V2.3
CoDeSys SP RTE
READY: BOOL ;
STATE:INT ;
EXTENDEDINFO:ARRAY[0..99] OF BYTE ;
END_VAR
Функциональный блок будет выполнен по переднему фронту на вход ENABLE.
DRIVERNAME – имя драйвера (указатель на строку, содержащую адрес), которому должен быть послан диагностический запрос. Если это значение равно 0, то запрос посылается всем доступным драйверам.
DEVICENUMBER идентифицирует шину, которой управляет драйвер (драйвер плат Hilscher, например, может работать максимум с 5 платами (сетями). Индексация начинается с 0.
BUSMEMBERID Идентифицирует узел шины. Для CANOpen BUSMEMBERID - это, например,
идентификатор узла (NodeID), для плат PB-DP - это специальный адрес станции
(вообще BUSMEMBERID допускает прозрачную идентификацию узлов). Как именно идентифицируется
узел зависит от шины и драйвера.
READY - выходной параметр, который принимает истинное значение, когда диагностический запрос
выполнен. Параметр STATE принимает одно из следующих значений:
VAR_GLOBAL CONSTANT
NDSTATE_INVALID_INPUTPARAM:INT:=-1;
NDSTATE_NOTENABLED:INT:=0;
NDSTATE_GETDIAG_INFO:INT:=1;
NDSTATE_DIAGINFO_AVAILABLE:INT:=2;
NDSTATE_DIAGINFO_NOTAVAILABLE:INT:=3;
END_VAR
Массив EXTENDEDINFO содержит до 100 байт специальных, определенных разработчиком, диагностических данных узла сети.
5-27
CoDeSys V2.3
CoDeSys SP RTE
6 Конфигуратор задач в CoDeSys V2.3
Конфигуратор задач в CoDeSys V2.3 поддерживает ряд дополнительных RTE функций:
 Сторожевой таймер определяется для каждой задачи. Это максимальный промежуток времени,
который не должен быть превышен задачей.
 Для задания времени цикла используются микросекунды.
 Можно создавать свободно выполняемые задачи (freewheeling tasks).
 Можно назначать МЭК-функции для обработки системных событий.
6.1 Основные положения
В конфигураторе задач CoDeSys можно определить до 16 задач. Планировщик реализует вытесняющую многоприоритетную многозадачность, где планирование выполняется периодически через определенное время цикла.
Нескольких задач с одинаковым приоритетом быть не должно. Если более одной задачи имеют одинаковый приоритет, то это приводит к сбою процесса планирования. Если вам необходимы 2 задачи с
одинаковым приоритетом, то сделайте 2 вызова программ из одной задачи. (В последних версиях
CoDeSys попытка создания 2-х задач с одинаковыми приоритетами приводит к ошибке при компиляции).
6.2 Сторожевой таймер задач
Для каждой задачи можно определить максимальное время выполнения.
В случае, если время выполнения превышает заданное, то ПЛК останавливается. Остановки ПЛК
можно избежать, если задать обработчик события “watchdog”. Возвращенное обработчиком значение
определяет, будет ли ПЛК остановлен или нет (если возвращено = 0, то ПЛК будет остановлен, или
продолжит работать в противном случае).
При использовании нового конфигуратора задач опция “watchdog -> enable with multiplier” на вкладке
“Config” меню “System…” игнорируется.
Замечание:
В этой платформе параметр конфигуратора задач
равным 1.
sensitivity не используется и жестко задан
6.3 Микросекунды в качестве базового кванта времени
В новом конфигураторе задач в качестве базового кванта времени можно использовать как миллисекунды (“ms”), так и микросекунды(“µs”). (Сначала задайте число, а потом переключитесь между “ms”
и “µs”). Но пока базовый квант времени на вкладке “Config”в меню “System…”не будет переключен на
микросекунды, время цикла будет вычисляться с точностью до 1 мс. Действительное время цикла
кратно выбранному базовому кванту времени.
Например, для создания 100µs-задачи (100µs – наименьшее значение доступное в данный момент),
задайте базовый квант времени равным 50µs на вкладке “Config”. Создайте задачу с временем цикла
100µs и вы сможете увидеть (если запрограммировать простейший счетчик), что задача выполнилась
10000 раз за секунду.
6-28
CoDeSys V2.3
CoDeSys SP RTE
6.4 Свободно выполняемые задачи (free wheeling tasks)
Свободно выполняемая задача запускается при старте ПЛК и выполняется постоянно.
Время цикла такой задачи определяется приложениями, а не конфигурацией.
Убедитесь, что у вас определена только одна свободно выполняемая задача и она имеет наименьший
приоритет по сравнению со всеми остальными задачами, потому что в противном случае задачи с
меньшим приоритетом никогда не будут выполнены.
6.5 Системные события
В конфигураторе задач можно связать системные события с вызовами определенных в МЭК проекте
функций (callbacks). Это означает, что RTE сама вызывает эти функции при возникновении некоторых
событий.
Для того, чтобы использовать эту возможность,
“SysLibCallback.lib”
нужно включить в
проект библиотеку
Не забудьте, что функциональные возможности таких обработчиков событий ограничены: вы не
должны создавать локальные переменные, не должны использовать вызов асинхронно выполняемых
функций, таких как, например, функций доступа к файловой системе, вы не можете устанавливать
точки останова для отладки этих функций. Но вы можете вызывать другие пользовательские функции
отсюда.
6-29
CoDeSys V2.3
CoDeSys SP RTE
7 Системные библиотеки
Вместе с CoDeSys SP RTE можно использовать несколько системных библиотек. Правила пользования этими библиотеками описаны в следующих разделах. Системные библиотеки, не описанные в
данном руководстве, использовать с CoDeSys SP RTE нельзя.
7.1 DllCall.lib вместе с библиотекой SysLibSystemCall.lib
Библиотека позволяет сделать асинхронный вызов пользовательских функций, находящихся в DLL.
Правила создания таких DLL описаны в пакете разработчика “CustomDLL Toolkit”, который поставляется комплекте с RTE. Для использования библиотеки DllCall.lib вы должны обязательно добавить в
проект библиотеку SysLibSystemCall.lib, в противном случае компиляция будет выполнена с ошибками.
На входы функционального блока DllCall передается имя функции, выходной и входной буфер, а также таймаут. Вызов функции выполняется в пользовательском режиме.
После завершения выполнения функции выходной параметр функционального блока принимает значение STATUS_READY или STATUS_ERROR, в зависимости от результата выполнения DLLфункции. Если функция не успела выполниться за время, указанное в TIMEOUT, то STATUS будет
равен STATUS_TIMEOUT и выполнение функции будет остановлено.
STATUS принимает значение STATUS_EXCEPTION , если DLL-функция сгенерировала исключение.
7.2 SysLibCallback.lib
Если вы хотите связать определенные события с вашими функциями, то необходимо использовать
библиотеку SysLibCallback.lib. Библиотека содержит функцию SysCallbackRegister которая связывает
функцию с событием, и функцию SysCallbackUnregister, которая отключает обработчик событий.
События, поддерживаемые в настоящее время, можно увидеть в конфигураторе задач CoDeSys V2.3.
Дополнительная информация по этому вопросу описана в разделе “Системные события” данного руководства.
7.3 SysLibCom.lib
Библиотека используется для доступа к последовательному интерфейсу PC из пользовательских программ.
Для того, чтобы использовать последовательный интерфейс, выполните следующие шаги:
 Откройте последовательный порт с помощью SysComOpen, передав на вход функции имя последовательного порта COM1…8.
 Настройте параметры порта с помощью функций SysComSetSettings или SysComSetSettingsEx. При
использовании SysComSetSettings формат данных равен 8 битам, прерывания от порта не используются. Для более тонкой настройки используйте функцию SysComSetSettingsEx. Более подробно
использование данной функции описано в комментариях к структуре “COMSETTINGSEX” в библиотеке SysLibCom. Настраивать последовательный порт можно только один раз после того, как
7-30
CoDeSys V2.3
CoDeSys SP RTE
вы его откроете. Для того чтобы изменить настройки последовательного порта, закройте его и откройте заново.
 Теперь вы можете принимать данные из последовательного порта и посылать данные в последовательный порт, используя функции SysComRead и SysComWrite.
 Если вы больше не намерены использовать последовательный порт, то закройте его функцией
SysComClose.
7.4 SysLibFile.lib
Эта библиотека используется для работы с файловой системой PC. В данный момент поддерживаются следующие функции:
 SysFileOpen
 SysFileClose
 SysFileRead
 SysFileWrite
 SysFileDelete
Остальные функции, входящие в библиотеку в данный момент не поддерживаются.
Функция SysFileOpen используется для открытия файла. Передайте в функцию полное имя файла и
режим доступа к файлу:
 Режим “w” открывает файл для записи. Будьте внимательны: если открыть уже существующий
файл для записи и сразу закрыть его, то получиться так, что размер созданного файла будет равен
0.
 Режим ”r” открывает файл для чтения в последовательном режиме, при чтении данных указатель
перемещается на столько позиций вперед, сколько байт было считано.
 Режим “a” открывает файл для записи и устанавливает указатель в конец файла, что позволяет добавить данные в конец файла.
Если доступ к файлу более не требуется, то закройте его функцией SysFileClose.
7.5 SysLibPorts.lib
Позволяет работать приложению напрямую с портами ввода/вывода PC.
Для доступа к данным различного размера (byte, word, doubleword) используются различные функции.
Пример:
Чтобы прочитать данные из параллельного порта вызовите функцию SysPortIn(16#378). Для записи
данных в этот порт (удобно использовать для измерения время цикла с помощью осциллографа) вызовите SysPortOut(16#378, <значение>).
Чтобы использовать эти функции вы должны обладать хорошими знаниями архитектуры PC. Адрес
порта должен лежать в диапазоне 0…65535.
7-31
CoDeSys V2.3
CoDeSys SP RTE
7.6 SysLibTime.lib
Используется для точных измерений времени и для определения текущего системного времени.
CurTime – работает очень быстро и возвращает управление мгновенно. Функциональный блок CurTimeEx, также возвращает текущее системное время но, его исполнение требует до 1 ms.
Короткий пример использования библиотеки SysLibTime:
Объявите 2 переменных:
VAR
ct : CurTime;
(*экземпляр CurTime*)
syst : SysTime64; (*переменная, в которую CurTime возвращает данные*)
END_VAR
Реализация:
ct(SystemTime := syst);
После вызова экземпляра ct, переменная syst будет содержать 64-битное значение, представляющее
собой число µs прошедшее с момента загрузки PC.
7.7 SysLibSockets.lib
Используется главным образом для передачи сетевых переменных по протоколу UDP.
Библиотеку можно также использовать для реализации собственных прикладных протоколов.
Подробнее правила использования функций этой библиотеки описаны в библиотеке
Networkvariables_UDP.lib. Эта библиотека поставляется в составе системы программирования
CoDeSys. Только функции, используемые в этой библиотеке, полностью реализованы и протестированы.
7-32
CoDeSys V2.3
CoDeSys SP RTE
8 Поведение системы в случае ошибок выполнения
Есть несколько ошибок, приводящих к остановке ПЛК:
Номер
16
Название
Watchdog
20
Fieldbus error
21
Error in configuration
data
Error update IOs
81
Access violation
258
336-343
Division by zero
FPU-error
Причина
Приложению требуется больше времени, чем задано, для выполнения данного цикла. Максимальное время цикла вычисляется с
помощью watchdog-множителя (см. раздел “Config” в главе “Работа с RTE”). В CoDeSys-v.2.3 вы должны задать этот множитель
в конфигураторе задач.
Неудачная инициализация драйвера ввода/вывода. Может произойти только при запуске ПЛК.
Одна из используемых плат fieldbus не воспринимает установки
заданные в конфигурации ПЛК.
Может произойти только при загрузке программы. Возникает, если вы используете адрес ввода/вывода, неподдерживаемый драйвером
Приложение обращается по недоступному адресу памяти. Возможная причина: неправильно инициализированный указатель.
Деление на 0
Недопустимые операции с вещественными числами.
В случае возникновения этих ошибок ПЛК ведет себя следующим образом:
 Если сделаны соответствующие настройки, выходы устанавливаются в 1 или 0.
 Цикл ПЛК останавливается (выполнение задачи, которая вызвала ошибку, завершается немедленно, а все остальные задачи завершают текущий цикл, но не начинают нового).
 Обновление входов/выходов продолжается. (Значения переменных в области входов/выходов
могут меняться).
 Произошедшие ошибки отображаются на вкладке “Diagnostic”. ПЛК сохраняет ошибку вместе
(если это возможно) со стеком вызовов. После соединения с ПЛК, место, в котором произошла
ошибка, можно увидеть с помощью команды Online/callstack.
8-33
CoDeSys V2.3
CoDeSys SP RTE
9 Приложение
9.1 Параметры реестра, используемые системой
исполнения
Подраздел RegKeyRuntime можно найти в реестре в разделе
\\HKEY_LOCAL_MACHINE\SOFTWARE\3S-Smart Software Solutions GmbH\CoDeSys SP\RTPLC
Система исполнения использует следующие параметры из этого раздела:
Имя, тип
Возможное значение
LastExit,
DWORD
0 или 1
NmiConnect,
DWORD
0 или 1
NmiSchedule,
DWORD
Закодирован побитно.
Описание
Перед созданием загрузочного проекта, этот параметр
принимает значение 0. Если во время создания загрузочного проекта произойдет сбой ПЛК, то значение так и останется нулевым, т.е. если LastExit=0, то загрузочный проект
не был создан.
Если это значение равно 1, то обработчик прерывания системы исполнения устанавливается на 2-ой вектор прерывания. Можно использовать только вместе с NmiSchedule.
Bit0: Если бит установлен, то частота таймера не меняется
и собственный обработчик прерывания от таймера не устанавливается. Планировщик вызывается процедурой обработки Nmi.
Бит1: Если этот бит установлен, то драйвер ввода/вывода,
обрабатывающий NMI, может определить время, в которое
осуществляется планировка NT.
Бит2: Если этот бит, не равен 0, то ядро RTE не может самостоятельно устанавливать процедуру обработки циклического прерывания. Это должно быть выполнено соответствующим драйвером, который по запросу создает циклическое прерывание и вызывает процедуру его обработки,
которая работает как обработчик NMI.
MaxNonNtInt,
DWORD
50 – 950
Если планировщик вызывается по NMI, которое происходит ассиметрично (для того, чтобы дать NT меньше процессорного времени, чем RTE), то в этом случае это значение используется чтобы определить при котором прерывании и после каких МЭК задач будет выполняться код операционной системы.
MaxPLCTime,
DWORD
10 – 90
Если используется обычный планировщик (вызываемый
по прерыванию таймера), то это число определяет соотношение времени выполнения NT и RTE. Значение "90"
означает, что ПЛК получает 90% времени, а NT только
10%.
Path, STRING
\??\<существующее имя директории, начиная с имени
диска>
Все 32 бита используются
отдельно.
RetainFlags,
DWORD
Путь к директории, куда будут сохраняться все файлы,
касающиеся RTE. Max. 128 знаков.
По умолчанию сохраняемая память выделяется в ОЗУ
динамически. Сохранение в файл происходит при завершении RTE.
Битt0 = 1: Создаваемая память выделяется не динамически.
Битt1 = 1: Сохраняемая память выделяется по определенному физическому адресу
CoDeSys V2.3
9-34
CoDeSys SP RTE
Имя, тип
Возможное значение
Описание
ному физическому адресу
Если установлен только 0-й и 1-й бит (3), то предполагается, что сохраняемая память находится в SRAM. Сохраняемая память не сохраняется явно.
Битt2 = 1: Сохраняемая память сохраняется в файле, как в
случае сохранения по умолчанию.
Битt3 = 1: Сохраняемая память сохраняется драйвером
ввода/вывода циклически.
RetainAddr
Существующий физический
адрес.
RetainSize
Общий объем сохраняемой
памяти.
HandleBlueScreen
1 или 0
StopIODrivers
0 или 1
OutputFlags
Все 32 бита используются
отдельно.
StackpoolSize
Размер пула
CodeSize
Размер области кода в байтах.
DataSize
Размер области данных в байтах
WdgMultiplier 0 – 0xfffffffe , 0xffffffff
:отключен
Должен быть задан, если Бит1 параметра
RetainFlags.установлен в 1. Адрес сохраняемой памяти.
Объем этой памяти задан в RetainSize.
Должен быть задан, если Бит1 параметра RetainFlags установлен в 1.
Если этот параметр задан и равен 1, то в случае сбоя в системе будет запущен обработчик NT-Bluescreen. В этом
случае ПЛК продолжит свою работу (конечно, если не он
явился причиной зависания). Если параметр не существует
или равен 0, то компьютер зависнет в случае сбоя.
Если значение этого параметра равно 1, то RTService автоматически остановит драйверы при завершении своей работы (RTService также автоматически запускает драйверы).
Бит0: 0: Выходы не фиксируются при остановке ПЛК..
Бит0: 1: Выходы принимают значение, указанное в Бит1,
при остановке ПЛК.
Размер пула, из которого выделяется стек под задачи, создаваемые внешними драйверами. Этот пул размещается по
начальному адресу. Если параметру присвоено значение
512, то драйвер ввода/вывода не сможет создать задачи.
Если этот параметр не создан, то по умолчанию под пул
выделяется 64 kB.
ПЛК выделяет область в 2 раза большую, чем здесь указано для кода сгенерированного CoDeSys (для МЭК POU).
Если параметр не существует, то размер области кода равен 4MB
Размер памяти для размещения МЭК переменных, маркированной памяти и образа ПЛК. По умолчанию выделяется
2MB.
Число циклов задачи, в течение которых выполнение задачи может продолжаться до того, как сработает таймерсторож.
0 (по умолчанию): Сторожевой таймер сработает, как только заданное время цикла будет превышено.
0xffffffff: tтаймер-сторож отключен.
Resolution
50,100,200
InterruptFlags
0 или 1 (на данный момент)
DebugFlags
Кодирован побитно.
CoDeSys V2.3
Разрешение шкалы времени (используется только в ПЛК с
target Id 44 и 45) в µs.
Если значение этого параметра равно 1, то в обработчике
прерываний можно будет использовать операции над числами с плавающей запятой.
Бит0: Если 1, то RTE не создает обработчик исключений.
Это означает, что для обнаружения исключений можно
использовать отладчики, работающие в режиме ядра.
9-35
CoDeSys SP RTE
Имя, тип
Возможное значение
Описание
использовать отладчики, работающие в режиме ядра.
Бит1: Если 1, то неопределенные внешние ссылки, которые
могут быть после загрузки программы, будут указывать на
пустые функции-заглушки. Это означает, что загрузка программы возможна без специальных системных библиотек.
В разделе “IO Drivers“ вы найдете список драйверов ввода/вывода. Имя драйвера должно быть задано
в виде <имя драйвера> либо в виде <имя объекта><пробел><имя драйвера>.Вторая форма задания
имени используется в том случае, если драйвер создает объект-драйвер, чье имя не такое же, как у самого драйвера. Название параметра представлено в виде "Driver< порядковый номер>", где порядковый номер изменяется от 0 до 4. Значение параметра представляет собой строку. Эта строка может
быть использована для обращения к драйверу с помощью системных функций (например, CreateFile)..
Более подробная информация о драйверах дана в пакете разработчика RTIODrv и в документации по
интерфейсу системы исполнения.
Подраздел RegKeyRuntime “External Dlls“ содержит DLL, которые были загружены сервисом при запуске системы. Список состоит из параметров следующего вида:
Dllx <полный путь><имя файла>
x порядковый номер , начиная с 0. Функции Dlls могут быть вызваны из МЭК-программы с помощью
функционального блока “DllCall“.
Системой исполнения используются только упомянутые выше параметры. Конечно, в реестре могут
присутствовать и другие специфические записи, которые создают драйверы ввода/вывода для своих
целей.
9-36
CoDeSys V2.3
Download