logo资料库

科维PLC内核二次开发中文手册.pdf

第1页 / 共116页
第2页 / 共116页
第3页 / 共116页
第4页 / 共116页
第5页 / 共116页
第6页 / 共116页
第7页 / 共116页
第8页 / 共116页
资料共116页,剩余部分请下载后查看
1 概述
1.1 定义
1.2 MULTIPROG简介
1.2.1 什么是MULTIPROG
1.2.2 MULTIPROG特性介绍
1.3 ProConOS eCLR介绍
2 ProConOS eCLR内核启动流程介绍
3 ProConOS eCLR内核二次开发
3.1 相关概念介绍
3.1.1 固件库
3.1.2 IEC61131数据类型与C#数据类型的对应
3.1.3 Managed与Native概念
3.2 ProConOS eCLR内核二次开发内容
3.3 ProConOS eCLR固件库开发
3.3.1 固件库开发资源准备
1. 控制器内核编译环境
2. 固件开发C#编译环境
3. 相关工具以及C#库资源准备
3.3.2 固件库工程创建步骤
3.3.3 功能/功能块开发方法及示例
1. Managed模式固件功能(FU)/功能块(FB)创建示例
3.3.3.1.1 基本数据类型功能(FU)的创建示例
3.3.3.1.2 基本数据类型功能块(FB)的创建示例
3.3.3.1.3 参数为数组(Array)类型的功能(FU)的创建示例
3.3.3.1.4 参数为数组(Array)类型的功能块(FB)创建示例
3.3.3.1.5 参数为数据结构(Struct)的功能(FU)创建示例
3.3.3.1.6 参数为数据结构(Struct)的功能块(FB)的创建示例
3.3.3.1.7 参数为字符串(STRING)的功能(FU)的创建示例
3.3.3.1.8 参数为字符串(STRING)的功能块(FB)的创建示例
3.3.3.1.9 参数为ANY类型的功能制作示例
3.3.3.1.10 带有EN/ENO功能(FU)的创建示例
2. Native模式固件功能(FU)/功能块(FB)
3.3.3.2.1 基本数据类型功能(FU)创建示例
3.3.3.2.2 参数为整型的Native FU/FB创建示例
3.3.3.2.3 参数为REAL类型Native模式FU创建示例
3.3.3.2.4 参数为数组(Array)类型的功能(FU)的创建示例
3.3.3.2.5 参数为数组(Array)类型的功能块(FB)创建示例
3.3.3.2.6 参数为数据结构(Struct)的功能(FU)创建示例
3.3.3.2.7 参数为数据结构(Struct)的功能块(FB)的创建示例
3.3.3.2.8 参数为字符串(STRING)的功能(FU)的创建示例
3.3.3.2.9 参数为字符串(STRING)的功能块(FB)的创建示例
3.4 共享缓存区开发方法及示例
3.4.1 共享内存的原理
3.4.2 共享缓存的创建示例
3.5 IO驱动开发方法及示例
3.5.1 IO驱动开发的原理介绍
3.5.2 IO接口开发示例程序
3.6 错误管理
3.6.1 错误管理API介绍
3.6.2 触发错误信息示例
1. 创建错误信息描述文件
2. 编辑预设值错误描述信息
3. 打包错误描述信息到src.st1配置文件中
4. 在ProConOS eCLR中触发错误信息
3.7 回调函数介绍
3.7.1 回调函数的原理
3.7.2 注册回调函数示例
3.8 异常处理
3.8.1 异常处理API介绍
3.8.2 示例代码
3.9 事件驱动的任务
3.9.1 原理介绍
3.9.2 在Multiprog中添加自定义事件
3.9.3 在控制器中触发事件任务
1. API介绍
2. 应用示例
3.9.4 在Multiprog中添加自定义系统异常事件
3.9.5 在控制器中触发系统异常任务
1. API介绍
2. 应用示例
3.10 文件管理
3.10.1 文件管理原理
3.10.2 文件打包方法
3.11 掉电保持数据的注册方法
3.11.1 掉电保持数据区注册API介绍
3.11.2 掉电保持数据区应用示例
3.12 在线不停机程序下载
3.12.1 不停机下载原理
3.12.2 支持不停机下载固件功能块示例
3.13 过程数据目录(PDD)操作相关函数说明及其示例
3.13.1 PDD函数介绍
3.13.2 固件功能块示例
3.14 强制变量操作相关函数说明及示例工程
3.14.1 强制变量操作API说明
3.14.2 示例工程
1. 示例工程1
2. 示例工程2
3.15 添加功能/功能块帮助文档及描述信息
3.15.1 在编辑向导中添加固件功能块描述信息
3.15.2 固件库添加帮助文档
3.15.3 用户库添加帮助文档
4 Multiprog客户端定制化
4.1 安装目录介绍
4.2 裁剪配置项
4.3 配置设备描述相关文件
4.4 添加IO驱动到IO配置列表中
4.5 MULTIPROG添加固件库
5 ProConOS eCLR其他开发内容
5.1 在x86+INtime平台实现微秒级任务
5.1.1 eCLR内核中任务调度时间关系
5.1.2 微秒级周期任务的设置方法
6 FAQ
6.1 修改eCLRDeviceProfiles.xml后出现的问题
6.2 IO的周期和任务的周期不一样
6.3 C#固件库中定义的数据类型如何提供给终端客户使用?
6.4 Multiprog5.35 build 519 中如何在监视时使用正常的小数显示,而不是显示为科学计数法形式?
6.5 如何在MultiProg中查看任务执行的相关信息?
6.6 如何让PLC启动时自动加载PLC应用程序并运行
6.7 MultiProg Express5.35如何支持事件任务
6.8 如何通过其他任务实现对eCLR的运行控制
6.9 eCLR g_ulSysTickCount累加是否会溢出影响定时功能
7 修订历史
ProConOS eCLR 二次开发中文手册 版本: 日期: 作者: 0.3 15/08/03 ProConOS eCLR 二次开发中文手册 发布列表: 名称 / 组织 上海代表处 公司 Phoenix Contact Software
菲尼克斯电气软件 Phoenix Contact Software GmbH 3.2 3.3 3.5 1.2.1 1.2.2 1.3 3.4.1 3.4.2 3.5.1 3.5.2 3.6.1 3.6.2 3.1.1 3.1.2 3.1.3 3.3.1 3.3.2 3.3.3 目录内容: 1 概述 ................................................................................................................................................... 3 1.1 定义 ............................................................................................................................................ 3 1.2 MULTIPROG 简介 ...................................................................................................................... 3 什么是 MULTIPROG ........................................................................................................... 3 MULTIPROG 特性介绍 ....................................................................................................... 3 ProConOS eCLR 介绍................................................................................................................ 4 2 ProConOS eCLR 内核启动流程介绍 ................................................................................................. 6 3 ProConOS eCLR 内核二次开发 ........................................................................................................ 9 3.1 相关概念介绍 .............................................................................................................................. 9 固件库 ................................................................................................................................. 9 IEC61131 数据类型与 C#数据类型的对应 .......................................................................... 9 Managed 与 Native 概念 ...................................................................................................10 ProConOS eCLR 内核二次开发内容 ........................................................................................10 ProConOS eCLR 固件库开发 ...................................................................................................13 固件库开发资源准备 .........................................................................................................13 固件库工程创建步骤 .........................................................................................................14 功能/功能块开发方法及示例 ..............................................................................................18 3.4 共享缓存区开发方法及示例 ......................................................................................................41 共享内存的原理 .................................................................................................................41 共享缓存的创建示例 .........................................................................................................42 IO 驱动开发方法及示例 ............................................................................................................44 IO 驱动开发的原理介绍 .....................................................................................................44 IO 接口开发示例程序 ........................................................................................................50 3.6 错误管理 ...................................................................................................................................57 错误管理 API 介绍 .............................................................................................................58 触发错误信息示例 .............................................................................................................60 3.7 回调函数介绍 ............................................................................................................................65 回调函数的原理 .................................................................................................................65 注册回调函数示例 .............................................................................................................67 3.8 异常处理 ...................................................................................................................................72 异常处理 API 介绍 .............................................................................................................72 示例代码 ............................................................................................................................72 3.9 事件驱动的任务 ........................................................................................................................73 原理介绍 ............................................................................................................................73 在 Multiprog 中添加自定义事件 .........................................................................................75 在控制器中触发事件任务 ..................................................................................................77 在 Multiprog 中添加自定义系统异常事件 ..........................................................................79 在控制器中触发系统异常任务 ...........................................................................................81 3.10 文件管理 ...............................................................................................................................83 文件管理原理 .................................................................................................................83 文件打包方法 .................................................................................................................83 3.11 掉电保持数据的注册方法 ......................................................................................................86 掉电保持数据区注册 API 介绍 .......................................................................................86 掉电保持数据区应用示例 ...............................................................................................86 3.12 在线不停机程序下载 .............................................................................................................87 不停机下载原理 .............................................................................................................87 支持不停机下载固件功能块示例 ....................................................................................87 3.13 过程数据目录(PDD)操作相关函数说明及其示例 ..............................................................88 PDD 函数介绍 ...................................................................................................................88 固件功能块示例 .............................................................................................................88 3.9.1 3.9.2 3.9.3 3.9.4 3.9.5 3.7.1 3.7.2 3.8.1 3.8.2 3.13.1 3.13.2 3.10.1 3.10.2 3.11.1 3.11.2 3.12.1 3.12.2 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 1 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 3.14.1 3.14.2 3.15.1 3.15.2 3.15.3 3.14 强制变量操作相关函数说明及示例工程 ................................................................................90 强制变量操作 API 说明 ..................................................................................................90 示例工程 ........................................................................................................................92 3.15 添加功能/功能块帮助文档及描述信息 ...................................................................................96 在编辑向导中添加固件功能块描述信息 .........................................................................96 固件库添加帮助文档 ......................................................................................................97 用户库添加帮助文档 ......................................................................................................97 4 Multiprog 客户端定制化 ...................................................................................................................98 4.1 安装目录介绍 ............................................................................................................................98 4.2 裁剪配置项 ...............................................................................................................................99 4.3 配置设备描述相关文件 ...........................................................................................................100 4.4 添加 IO 驱动到 IO 配置列表中 ................................................................................................103 4.5 MULTIPROG 添加固件库 .......................................................................................................104 ProConOS eCLR 其他开发内容 ........................................................................................................106 5.1 在 x86+INtime 平台实现微秒级任务 .......................................................................................106 eCLR 内核中任务调度时间关系 ......................................................................................106 微秒级周期任务的设置方法 .............................................................................................107 6 FAQ ...............................................................................................................................................108 6.1 修改 eCLRDeviceProfiles.xml 后出现的问题 ..........................................................................108 IO 的周期和任务的周期不一样 ...............................................................................................109 6.2 6.3 C#固件库中定义的数据类型如何提供给终端客户使用? .......................................................110 6.4 Multiprog5.35 build 519 中如何在监视时使用正常的小数显示,而不是显示为科学计数法形式? 6.5 如何在 MultiProg 中查看任务执行的相关信息? ....................................................................111 6.6 如何让 PLC 启动时自动加载 PLC 应用程序并运行 ................................................................112 6.7 MultiProg Express5.35 如何支持事件任务 .............................................................................113 7 修订历史 ........................................................................................................................................115 5 5.1.1 5.1.2 110 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 2 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 1 概述 本文档主要讲解 ProConOS eCLR 的二次开发相关内容。本文档不涉及如何使用 Multiprog 进行 PLC 应用编程等相关内容。拥有该文档者为负责 ProConOS eCLR 二次开发相关人员。 1.1 定义 配置(CONFIGURATION):对应于一个 PLC 系统工程; 资源(RESOURCE):对应于一个 CPU 处理器。 POU(Program Organization Units):程序组织单元,是 PLC 程序的基本单位; 1.2 MULTIPROG 简介 1.2.1 什么是 MULTIPROG MULTIPROG 编程系统是专门用于设计以及管理 IEC61131 应用程序,其支持 eCLR 运行系统,并 且提供了功能块图(FBD), 梯形图(LD), 结构化文本(ST), 指令表(IL), 顺序流程图(SFC),并且带有在线监 控,强制/覆盖,逻辑分析器等强大功能。 图 1-1 Multiprog 界面介绍 1.2.2 MULTIPROG 特性介绍 目前 MULTIPROG 版本分为 Pro 版本与 Express 版本,目前这两种版本基本编程功能上是相同的, 都支持 5 种 IEC61131 编程语言,多任务的架构。当然在功能上有一些区别,例如在 Pro 版本下支持 16 个任务,同时能管理现场 100 个控制器,而在 Express 版本下只能支持 5 个任务,同时能管理现场的 1 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 3 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 个控制器。关于 Multiprog 的应用开发及使用方法,请参考 Multiprog 自带的帮助文档或者 Phoenix Contact Software 所提供的文档。 1.3 ProConOS eCLR 介绍 ProConOS eCLR (Programmable Controller Operating System embedded Common Language R untime)是 Phoenix Contact Software 开发最新一代的 PLC 运行系统,符合 IEC61131 标准,可以满足 不同的自动化应用(PLC, PAC, 运动控制, CNC, 机器人等)由于采用机器码执行的方式,因此执行 IEC 61131 代码的效率十分高。 ProConOS eCLR 是基于.NET CLR 技术并且完全为工业控制应用而设计的。因此 eCLR 运行在嵌 入式平台上并且支持不同的 CPU。eCLR 提供了一个功能强大,开放,标准以及平台无关的编程接口, 并且是一个为自动化设备设计的通用的运行系统,这就意味着,在 eCLR 中能够执行不同语言(一般为 C#编程语言)的代码,而并不是单独的 IEC61131 代码。同时 ProConOS eCLR 提供了开放式的二次开 发接口,便于扩展客户自定义算法模块,共享缓存,各种类型 IO 接口等。 图 1-2 ProConOS eCLR 软件架构 图 1-3 ProConOS eCLR 开放的接口 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 4 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 图 1-4 ProConOS eCLR 在多种平台上的支持 图 1-5 系统结构 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 5 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 2 ProConOS eCLR 内核启动流程介绍 本章节结合 Windows 平台内核 eCLRSample 从以下 8 个步骤来介绍 eCLR 内核的启动流程。 1) 创建控制器实例 if (ClrController::Create("Default", new char[CONTROLLER_DATA_SIZE], CONTROLLER_DATA_SIZE) == NULL) { printf("Setup controller failed!\n"); return 0; } 该函数主要用于对 eCLR 运行环境以及资源的检查和测试,并对 Controller 实例进行初始化。如果 失败则会返回 NULL。以下情况有可能导致创建失败:  当前工程中 C++构造函数不支持(No support of C++ constructor methods);  注册的 Heap 资源不够,最好在 16kBytes 以上;  Core-Libraries 注册安装失败; 为了避免以上情况的发生,请在移植之前使用 Phoenix Contact Software 所提供的环境测试程序进 行测试。 2) 设置 PLC 任务的优先级范围 每个 PLC 任务都对应于操作系统上的一个任务,所以在创建一个 PLC 任务时,在控制器中要给其 设定一个合理的系统优先级,所以在此要给 eCLR 内核注册创建的 PLC 任务的优先级范围。 一般把优先级分为三个优先级范围等级:  Low-Priority: 最低优先级等级,一般用来设置优先级比较低的任务,例如通讯任务 Remoting-Daemon 运行在该优先级;  Normal-Priority: 用户创建的 PLC 任务运行在该优先级范围;在 Multiprog 中任务设置的逻辑 优先级会映射到该范围中;  Highest-Priority: 最高优先级,一般情况下,PLC 任务的调度任务运行在该优先级;. 对于每个优先级等级,ProConOS eCLR 内核中都有相应的函数用来注册该优先级范围,如下为运 行在 Windows 平台的示例: // only one prio level available mscorlib::PriorityClass::SetLowest(-7, -7); // 12 level avalable mscorlib::PriorityClass::SetNormal(-6, 5); // only one prio level available mscorlib::PriorityClass::SetHighest(6, 6); 3) 注册设备参数 为了区分不同的控制器设备,可以在此注册相应的设备描述信息,部分信息可以在 Multiprog 的 “工程控制对话框”中的“信息”窗口查看到,关于参数的说明请参考如下参数表。 CDeviceInfo* pDeviceInfo = ClrController::getDeviceInfo(); pDeviceInfo->setAttribute(CDeviceInfo::Manufacturer, "Phoenix Contact"); pDeviceInfo->setAttribute(CDeviceInfo::ProductName, "eCLR"); pDeviceInfo->setAttribute(CDeviceInfo::HardwareVersion, "1.0"); pDeviceInfo->setAttribute(CDeviceInfo::FirmwareVersion, "1.0"); pDeviceInfo->setAttribute(CDeviceInfo::TimerResolution, 1000); pDeviceInfo->setAttribute(CDeviceInfo::ScheduleInterval, 1000); pDeviceInfo->setAttribute(CDeviceInfo::MaxApplImageFilesSize, MAXIMAGESIZE); pDeviceInfo->setAttribute(CDeviceInfo::MaxApplImageSize, MAXIMAGESIZE); 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 6 / 115
菲尼克斯电气软件 Phoenix Contact Software GmbH 表格 1 设备描述参数表 参数 Manufacturer ProductName HardwareVersion FirmwareVersion TimerResolution ScheduleInterval 描述 设置设备厂商名称信息 设置设备名称,显示在 Multiprog 的资源信息窗口中; 硬件版本信息 固件库版本信息,显示在 Multiprog 的资源信息窗口中; 时钟周期,显示在 Multiprog 的资源信息窗口中; 调度周期; MaxApplImageFilesSize 设定最大的 PLC 应用程序镜像文件大小,包含打包进来的文件; MaxApplImageSize 设定最大的 PLC 应用程序镜像文件大小,不包含打包进来的文件; 设定 PLC 应用程序数据空间大小; DataHeap 4) 创建应用程序运行域 应用程序域是 CLI(Common Language Infrastructure)中的概念,在此要注册 PLC 应用程序所需要 的额外的资源。每个资源的应用程序都在一个单独的应用程序域中运行。  获取应用程序域,创建成功后,则返回应用程序域的指针。 ClrAppDomain* pAppDomain = ClrController::CreateDomain("Default"); if (pAppDomain == NULL) { printf("Setup default domain failed!\n"); return 0; }  注册其他资源 在下载 PLC 程序之前,必须要注册 PLC 应用程序数据区域以及预设值的 PLC 应用程序代码执行区 域等资源,如下所示。 pAppDomain->SetDataMemory(new char[APPLICATION_DATA_SIZE], APPLICATION_DATA_SIZE); pAppDomain->SetCodeMemory(new char[APPLICATION_CODE_SIZE], APPLICATION_CODE_SIZE);  注册 PLC 应用程序本地写入接口 一般 PLC 应用程序文件需要下载到本地,以便于在下次掉电重启时能自动从本地加载到内存中来 运行。通过如下代码注册本地写入接口。 pAppDomain->SetImageStream(&pcosImageFile); 5) 注册固件库 // Announcing native libraries modules to eCLR kernel. if (demoio::init() == true) { if (demoio::loadLibrary() == false) { printf("Could not load demo io library!"); } } else { printf("Could not initialize demo io library!"); } 6) 创建 PLC 状态机接口,启动 PLC 尽管应用程序域管理着 PLC 的所有资源,但在具体的实现过程中,PLC 的状态机是在类 CPcosDomain 中来实现的,通过如下代码来获取并且启动 PLC 状态机的实例。 上海市徐汇区宜山路 889 号 齐来大厦 1902 室 邮编 200233 Tel: 021 5228 9958/5228 9957 Fax: 5228 9956 Room 1902, Qilai Bldg, 889 Yishan Road West, Shanghai, 200233, PR China 7 / 115
分享到:
收藏