ISA95

标准把制造企业信息系统分为4个层级:

1层:设备层

边缘层:主要是网关,边缘一体机服务器

控制层:PLC,以及各种基于PC的控制器。

驱动层:伺服,电机驱动等, 各种服务总线就是工作在这一层如EtherCAT,CANOpen,CANLink,Modbus,Ethernet/IP,PROFIBUS,PROFINET

执行层:电机,传感器,开关等

2层:设备控制层

HMI:人机交互 (Human Machine Interface )人机界面产品的定义  连接可编程序控制器(PLC)、变频器、直流调速器、仪表等工业控制设备,利用显示屏显示,通过输入单元(如触摸屏、键盘、鼠标等)写入工作参数或输入操作命令,实现人与机器信息交互的数字设备,由硬件和软件两部分组成。

SCADA:数据采集与监控系统(SCADA)是一种控制系统架构,使用计算机、网络数据通信和图形用户界面进行高级过程监控管理。

DCS:分布式控制系统(DCS)是用于过程控制或制造领域的计算机控制系统,其中控制元件(控制器)分布在整个系统中。

PLC:但在以顺序逻辑作为需求的行业中使用最多的是PLC(可编程逻辑控制器),这是从继电器和定时器演变而来的。以前的控制器难以组态和查找故障,并且PLC控制使得信号能够与具有电子显示器的中央控制区域联网。PLC首先开发用于汽车行业的车辆生产线,其中顺序逻辑变得非常复杂,然后是印刷机和水处理厂。

各种控制器,PLC,基于PC的控制系统等

3层:生产执行层(MES)

MES(Manufacturing Execution System)平台以及根中订单管理,生产管理,质量管理,设备管理,物料管理等 PCS过程控制连续的或按一定程序周期进行的生产过程的自动控制称为生产过程自动化。生产过程自动化是保持生产稳定、降低消耗、降低成本、改善劳动条件、促进文明生产、保证生产安全和提高劳动生产率的重要手段,是20世纪科学与技术进步的特征,是工业现代化的标志。

4层:资源管理层(ERP)

企业资源计划即 ERP (Enterprise Resource Planning),建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。由美国 Gartner Group 公司于1990年提出。企业资源计划是 MRP II(企业制造资源计划)下一代的制造业系统和资源计划软件。除了MRP II 已有的生产资源计划、制造、财务、销售、采购等功能外,还有质量管理,实验室管理,业务流程管理,产品数据管理,存货、分销与运输管理,人力资源管理和定期报告系统。

自动化软件

控制器软件

STEP 7产品系列用于SIMATIC S7控制器系统的组态、编程、测试和诊断。

人机界面软件

人机界面产品的定义  连接可编程序控制器(PLC)、变频器、直流调速器、仪表等工业控制设备,利用显示屏显示,通过输入单元(如触摸屏、键盘、鼠标等)写入工作参数或输入操作命令,实现人与机器信息交互的数字设备,由硬件和软件两部分组成。

人机界面产品由硬件和软件两部分组成,硬件部分包括处理器、显示单元、输入单元、通讯接口、数据存贮单元等,其中处理器的性能决定了HMI 产品的性能高低,是HMI的核心单元。根据HMI的产品等级不同,处理器可分别选用8位、16位、32位的处理器。HMI软件一般分为两部分,即运行于 HMI硬件中的系统软件和运行于PC机Windows操作系统下的画面组态软件(如JB-HMI画面组态软件)。使用者都必须先使用HMI的画面组态软件制作“工程文件”,再通过PC机和HMI 产品的串行通讯口,把编制好的“工程文件”下载到HMI的处理器中运行。

SCADA软件

从过程可视化到工厂智能或基础设施项目的开放式系统的软件解决方案。

用于能源管理的软件

能源管理软件包括现场层的能量数据记录到管理层的公司范围能量分析。

COMOS 工厂工程软件 制造运营管理软件 产品生命周期管理软件 SIMIT 仿真软件 适用于 SIRIUS 开关装置的软件 XHQ 运营智能软件 面向过程工业的西门子工业套件PlantSight

自动化设备

PLC(可编程逻辑控制器)

传感器

电机

PAC智能控制器

CNC

与普通机床相比,数控机床有如下特点:

●加工精度高,具有稳定的加工质量; ●可进行多坐标的联动,能加工形状复杂的零件; ●加工零件改变时,一般只需要更改数控程序,可节省生产准备时间; ●机床本身的精度高、刚性大,可选择有利的加工用量,生产率高(一般为普通机床的3~5倍); ●机床自动化程度高,可以减轻劳动强度; ●对操作人员的素质要求较高,对维修人员的技术要求更高。

组成:

主机:它是数控机床的主体,包括机床身、立柱、主轴、进给机构等机械部件。

数控装置:是数控机床的核心,包括硬件(印刷电路板、CRT显示器、键盒、纸带阅读机等)以及相应的软件,用于输入数字化的零件程序,并完成输入信息的存储、数据的变换、插补运算以及实现各种控制功能。

驱动装置:它是数控机床执行机构的驱动部件,包括主轴驱动单元、进给单元、主轴电机及进给电机等。它在数控装置的控制下通过电气或电液伺服系统实现主轴和进给驱动。当几个进给联动时,可以完成定位、直线、平面曲线和空间曲线的加工。

辅助装置:指数控机床的一些必要的配套部件,用以保证数控机床的运行,如冷却、排屑、润滑、照明、监测等。它包括液压和气动装置、排屑装置、交换工作台、数控转台和数控分度头,还包括刀具及监控检测装置等。

编程及其他附属设备:可用来在机外进行零件的程序编制、存储等。

仪表

基于PC的控制器

识别

工业机器人机械臂系统

变频器(Variable-frequency Drive,VFD)

变频器主要由整流(交流变直流)、滤波、逆变(直流变交流)、制动单元、驱动单元、检测单元微处理单元等组成。变频器靠内部IGBT的开断来调整输出电源的电压和频率,根据电机的实际需要来提供其所需要的电源电压,进而达到节能、调速的目的。

其核心是IGBT芯片,绝缘栅双极晶体管(Insulate-Gate Bipolar Transistor—IGBT)综合了电力晶体管(Giant Transistor—GTR)和电力场效应晶体管(Power MOSFET)的优点,具有良好的特性,应用领域很广泛;IGBT也是三端器件:栅极,集电极和发射极。IGBT的主要作用是可以很容易地将输入的高压直流电流转换为高压交流电,只需通过脉宽调制即可实现变频控制,它通过十几伏的门极控制信号,即可实现kV级电压和kA级电流的控制,开关频率可达每秒几万次。

伺服(Servo)

包括 伺服和电机两部分(servo motor )

伺服电机内部的转子是永磁铁,驱动器控制的U/V/W 三相电形成电磁场,转子在此磁场的作用下转动,同时电机自带的编码器反馈信号给驱动器,驱动器根据反馈值与目标值进行比较,调整转子转动的角度。伺服电机的精度决定于编码器的精度(线数)。

伺服电机可以控制速度,位置精度非常准确,可以将电压信号转化为转矩和转速以驱动控制对象。伺服电机转子转速受输入信号控制,并能快速反应,在自动控制系统中,用作执行元件,且具有机电时间常数小、线性度高等特性,可把所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流和交流伺服电动机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。

步进电机(stepping motor)

步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。 可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

伺服和步进电机区别

控制的方式不同:步进电机是通过控制脉冲的个数控制转动角度的,一个脉冲对应一个步距角。 伺服电机是通过控制脉冲时间的长短控制转动角度的。

所需的工作设备和工作流程不同:步进电机所需的供电电源(所需电压由驱动器参数给出),一个脉冲发生器(现在多半是用板块),一个步进电机,一个驱动器(驱动器设定步距角角度,如设定步距角为 0.45°,这时,给一个脉冲,电机走 0.45°);其工作流程为步进电机工作一般需要两个脉冲:信号脉冲和方向脉冲。 伺服电机所需的供电电源是一个开关(继电器开关或继电器板卡),一个伺服电机;其工作流程就是一个电源连接开关,再连接伺服电机。

低频特性不同:步进电机在低速时易出现低频振动现象。振动频率与负载情况和驱动器性能有关,一般认为振动频率为电机空载起跳频率的一半。这种由步进电机的工作原理所决定的低频振动现象对于机器的正常运转非常不利。当步进电机工作在低速时,一般应采用阻尼技术来克服低频振动现象,比如在电机上加阻尼器,或驱动器上采用细分技术等。 交流伺服电机运转非常平稳,即使在低速时也不会出现振动现象。交流伺服系统具有共振抑制功能,可涵盖机械的刚性不足,并且系统内部具有频率解析机能(FFT),可检测出机械的共振点,便于系统调整。

矩频特性不同:步进电机的输出力矩随转速升高而下降,且在较高转速时会急剧下降,所以其最高工作转速一般在 300~600r/min。交流伺服电机为恒力矩输出,即在其额定转速(一般为 2000 或 3000 r/min)以内,都能输出额定转矩,在额定转速以上为恒功率输出。

过载能力不同:步进电机一般不具有过载能力。交流伺服电机具有较强的过载能力。

速度响应性能不同:步进电机从静止加速到工作转速(一般为每分钟几百转)需要 200~400ms。 交流伺服系统的加速性能较好,以松下MSMA400W 交流伺服电机为例,从静止加速到其额定转速 3000 r/min。仅需几 ms,可用于要求快速启停的控制场合。

HMI 人机交互 (Human Machine Interface )

人机界面产品的定义  连接可编程序控制器(PLC)、变频器、直流调速器、仪表等工业控制设备,利用显示屏显示,通过输入单元(如触摸屏、键盘、鼠标等)写入工作参数或输入操作命令,实现人与机器信息交互的数字设备,由硬件和软件两部分组成。

人机界面产品由硬件和软件两部分组成,硬件部分包括处理器、显示单元、输入单元、通讯接口、数据存贮单元等,其中处理器的性能决定了HMI 产品的性能高低,是HMI的核心单元。根据HMI的产品等级不同,处理器可分别选用8位、16位、32位的处理器。HMI软件一般分为两部分,即运行于 HMI硬件中的系统软件和运行于PC机Windows操作系统下的画面组态软件(如JB-HMI画面组态软件)。使用者都必须先使用HMI的画面组态软件制作“工程文件”,再通过PC机和HMI 产品的串行通讯口,把编制好的“工程文件”下载到HMI的处理器中运行。

自动化厂商

国产

汇川novance

软件:InoProShop,AutoShop

硬件:PLC,伺服,变频器,HMI

日系

欧姆龙Omron

三菱

日立

欧系

西门子

软件:TIAPortal,WinCC,(SCADA(Supervisory Control And Data Acquisition)系统),STEP7

硬件:工业自动化系统 SIMATIC系列传感器,PLC,运动控制等(控制器以及相关解决方案),SIMATIC S7-1500,运动控制系统 SIMOTION(驱动伺服等),数控系统INUMERIK

施耐德

贝福BackOff

美系

通用电气GE

软件:Proficy HMI / SCADA

硬件:PLC,运动控制系统,数控系统

AB

罗克韦尔Rockwell

软件:Integrated Architecture Builder (IAB) ,Studio 5000

硬件:PLC,运动控制系统,数控系统

工业阶段

工业1.0

机械化,以蒸汽机为标志,用蒸汽动力驱动机器取代人力,从此手工业从农业分离出来,正式进化为工业。

工业2.0

电气化,以电力的广泛应用为标志,用电力驱动机器取代蒸汽动力,从此零部件生产与产品装配实现分工,工业进入大规模生产时代。

工业3.0

自动化,以PLC(可编程逻辑控制器)和PC的应用为标志,从此机器不但接管了人的大部分体力劳动,同时也接管了一部分脑力劳动,工业生产能力也自此超越了人类的消费能力,人类进入了产能过剩时代。

工业4.0

智能化机器人,最主要的就是万物互联。

PLC(可编程逻辑控制器)

IEC的PLC国际标准主要包括以下几个:

IEC 61131-3:定义了PLC编程语言的国际标准,包括Ladder Diagram(LD)、Structured Text(ST)、Function Block Diagram(FBD)等。

指令表(Instruction List Diagram,ILD)

阶梯图(Ladder Diagram,LD)

功能区块图(Function Block Diagram,FBD)

结构化文字(Structured Text Language,STL)

顺序功能流程图(Sequential Function Chart,SFC)

IEC 61158:定义了PLC网络通信的国际标准,包括Fieldbus和Industrial Ethernet等通信协议。

IEC 60870-5:定义了PLC在电力系统自动化领域中的通信协议和交换标准。

模块

CPU

扩展模块

数字输入模块

数字输出模块

模拟输入模块

模拟输出模块

脉冲定位模块

温度模块

电源模块

CAN通信模块

EtherCAT模块

EtherCAT通信接口模块

EtherCAT通信接口模块

EtherCAT数字量模块

EtherCAT高速计数模块

EtherCAT脉冲定位模块

EtherCAT温度检测模块

EtherCAT探针模块

EtherCAT从站分支器模块

温度控制模块

扩展板卡

混合扩展模块

分类

按结构形式分类

整体式PLC :整体式PLC是将电源、CPU、I/O接口等部件都集中装在一个机箱内, 具有结构紧凑、体积小、价格低的特点。扩展单元内只有I/O和电源等,没有CPU。基本单元和扩展单元之间一般用扁平电缆连接。整体式PLC一般还可配备特殊功能单元,如模拟量单元、位置控制单元等,使其功能得以扩展。

模块式PLCPLC:模块式PLC是将PLC各组成部分,分别作成若干个单独的模块,如CPU模块、I/O模块、电源模块(有的含在CPU模块中)以及各种功能模块。模块式PLC由框架或基板和各种模块组成。模块装在框架或基板的插座上。这种模块式PLC的特点是配置灵活,可根据需要选配不同规模的系统,而且装配方便,便于扩展和维修。大、中型PLC一般采用模块式结构。

还有一些PLC将整体式和模块式的特点结合起来,构成所谓叠装式PLC。叠装式PLC其CPU、电源、I/O接口等也是各自独立的模块,但它们之间是靠电缆进行联接,并且各模块可以一层层地叠装。这样,不但系统可以灵活配置,还可做得体积小巧。

按功能分类

低档PLC:具有逻辑运算、定时、计数、移位以及自诊断、监控等基本功能,还可有少量模拟量输入/输出、算术运算、数据传送和比较、通信等功能。主要用于逻辑控制、顺序控制或少量模拟量控制的单机控制系统。

中档PLC:除具有低档PLC的功能外,还具有较强的模拟量输入/输出、算术运算、数据传送和比较、数制转换、远程I/O、子程序、通信联网等功能。有些还可增设中断控制、PID控制等功能,适用于复杂控制系统。

高档PLC:除具有中档机的功能外,还增加了带符号算术运算、矩阵运算、位逻辑运算、平方根运算及其它特殊功能函数的运算、制表及表格传送功能等。高档PLC机具有更强的通信联网功能,可用于大规模过程控制或构成分布式网络控制系统,实现工厂自动化。

按I/O点数分类

小型PLC:I/O点数< 256点;单CPU、8位或16位处理器、用户存储器容量4K字以下。

GE-I型 美国通用电气(GE)公司

TI100 美国德洲仪器公司

F、F1、F2 日本三菱电气公司

C20 C40 日本立石公司(欧姆龙)

S7-200 德国西门子公司

EX20 EX40 日本东芝公司

SR-20/21 中外合资无锡华光电子工业有限公司

中型PLC:I/O点数256~2048点;双CPU,用户存储器容量2~8K

S7-300 德国西门子公司

SR-400 中外合资无锡华光电子工业有限公司

SU-5、SU-6 德国西门子公司

C-500 日本立石公司

GE-Ⅲ GE公司

大型PLC:I/O点数2048点;多CPU,16位、32位处理器,用户存储器容量8~16K

如:S7-400 德国西门子公司

GE-Ⅳ GE公司

C-2000 立石公司

K3 三菱公司等

程序执行方式

解释型:具有逻辑运算、定时、计数、移位以及自诊断、监控等基本功能,还可有少量模拟量输入/输出、算术运算、数据传送和比较、通信等功能。主要用于逻辑控制、顺序控制或少量模拟量控制的单机控制系统。

编译型:除具有低档PLC的功能外,还具有较强的模拟量输入/输出、算术运算、数据传送和比较、数制转换、远程I/O、子程序、通信联网等功能。有些还可增设中断控制、PID控制等功能,适用于复杂控制系统。

自动化软件

常用工业软件分类

CAD CAX

工艺系统

电气

仪表

结构

估算

项目管理

DCS

DCS(Distributed Control System)

硬件

现场控制单元

现场控制单元一般远离控制中心,安装在靠近现场的地方,其高度模块化结构可以根据过程监测和控制的需要配置成由几个监控点到数百个监控点的规模不等的过程控制单元。 现场控制单元的结构是由许多功能分散的插板(或称卡件)按照一定的逻辑或物理顺序安装在插板箱中,各现场控制单元及其与控制管理级之间采用总线连接,以实现信息交互。 现场控制单元的硬件配置需要完成以下内容: 插件的配置 根据系统的要求和控制规模配置主机插件(CPU插件)、电源插件、I/O插件、通信插件等硬件设备; 硬件冗余配置 对关键设备进行冗余配置是提高DCS可靠性的一个重要手段,DCS通常可以对主机插件、电源插件、通信插件和网络、关键I/O插件都可以实现冗余配置。 硬件安装 不同的DCS,对于各种插件在插件箱中的安装,会在逻辑顺序或物理顺序上有相应的规定。另外,现场控制单元通常分为基本型和扩展型两种,所谓基本型就是各种插件安装在一个插件箱中,但更多的时候时需要可扩展的结构形式,即一个现场控制单元还包括若干数字输入/输出扩展单元,相互间采用总线连成一体。 就本质而言,现场控制单元的结构形式和配置要求与模块化PLC的硬件配置是一致的。

操作站

操作站用来显示并记录来自各控制单元的过程数据,是人与生产过程信息交互的操作接口。典型的操作站包括主机系统、显示设备、键盘输入设备、信息存储设备和打印输出设备等,主要实现强大的显示功能(如模拟参数显示、系统状态显示、多种画面显示等等)、报警功能、操作功能、报表打印功能、组态和编程功能等等。 另外,DCS操作站还分为操作员站和工程师站。从系统功能上看,前者主要实现一般的生产操作和监控任务,具有数据采集和处理、监控画面显示、故障诊断和报警等功能。后者除了具有操作员站的一般功能以外,还应具备系统的组态、控制目标的修改等功能。从硬件设备上看,多数系统的工程师站和操作员站合在一起,仅用一个工程师键盘加以区分。

软件

DCS的软件体系通常可以为用户提供相当丰富的功能软件模块和功能软件包,控制工程师利用DCS提供的组态软件,将各种功能软件进行适当的“组装连接”(即组态),生成满足控制系统的要求各种应用软件。 软件系统 现场控制单元的软件主要包括以实时数据库为中心的数据巡检、控制算法、控制输出和网络通信等软件模块组成。 实时数据库起到了中心环节的作用,在这里进行数据共享,各执行代码都与它交换数据,用来存储现场采集的数据、控制输出以及某些计算的中间结果和控制算法结构等方面的信息。数据巡检模块用以实现现场数据、故障信号的采集,并实现必要的数字滤波、单位变换、补偿运算等辅助功能。DCS的控制功能通过组态生成,不同的系统,需要的控制算法模块各不相同,通常会涉及以下一些模块:算术运算模块、逻辑运算模块、PID控制模块、变型PID模块、手自动切换模块、非线性处理模块、执行器控制模块等等。控制输出模块主要实现控制信号以故障处理的输出。 软件系统 DCS中的操作站用以完成系统的开发、生成、测试和运行等任务,这就需要相应的系统软件支持,这些软件包括操作系统、编程语言及各种工具软件等。一套完善的DCS,在操作站上运行的应用软件应能实现如下功能:实时数据库、网络管理、历史数据库管理、图形管理、历史数据趋势管理、数据库详细显示与修改、记录报表生成与打印、人机接口控制、控制回路调节、参数列表、串行通信和各种组态等。

组态

DCS的开发过程主要是采用系统组态软件依据控制系统的实际需要生成各类应用软件的过程。组态软件功能包括基本配置组态和应用软件组态。基本配置组态是给系统一个配置信息,如系统的各种站的个数、它们的索引标志、每个控制站的最大点数、最短执行周期和内存容量等。应用软件的组态则包括比较丰富的内容,主要包括以下几个方面。

控制回路的组态

控制回路的组态在本质上就是利用系统提供的各种基本的功能模块,来构成各种各样的实际控制系统。目前各种不同的DCS提供的组态方法各不相同,归纳起来有指定运算模块连接方式、判定表方式、步骤记录方式等等。 指定运算模块连接方式是通过调用各种独立的标准运算模块,用线条连接成多种多样的控制回路,最终自动生成控制软件,这是一种信息流和控制功能都很直观的组态方法。判定表方式是一种纯粹的填表形式,只要按照组态表格的要求,逐项填入内容或回答问题即可,这种方式很利于用户的组态操作。步骤记入方式是一种基于语言指令的编写方式,编程自由度大,各种复杂功能都可通过一些技巧实现,但组态效率较低。另外,由于这种组态方法不够直观,往往对组态工程师在技术水平和组态经验有较高的要求。

实时数据库生成

实时数据库是DCS最基本的信息资源,这些实时数据由实时数据库存储和管理。在DCS中,建立和修改实时数据库记录的方法有多种,常用的方法是用通用数据库工具软件生成数据库文件,系统直接利用这种数据格式进行管理或采用某种方法将生成的数据文件转换为DCS所要求的格式。

工业流程画面的生成

DCS是一种综合控制系统,它必须具有丰富的控制系统和检测系统画面显示功能。显然,不同的控制系统,需要显示的画面是不一样的。总的来说,结合总貌、分组、控制回路、流程图、报警等画面,以字符、棒图、曲线等适当的形式表示出各种测控参数、系统状态,是DCS组态的一项基本要求。此外,根据需要还可显示各类变量目录画面、操作指导画面、故障诊断画面、工程师维护画面和系统组态画面。

历史数据库的生成

所有DCS都支持历史数据存储和趋势显示功能,历史数据库通常由用户在不需要编程的条件下,通过屏幕编辑编译技术生成一个数据文件,该文件定义了各历史数据记录的结构和范围。历史数据库中数据一般按组划分,每组内数据类型、采样时间一样。在生成时对各数据点的有关信息进行定义。

控制回报表生成

DCS的操作员站的报表打印功能也是通过组态软件中的报表生成部分进行组态,不同的DCS在报表打印功能方面存在较大的差异。一般来说,DCS支持如下两类报表打印功能:一是周期性报表打印,二是触发性报表打印,用户根据需要和喜好生成不同的报表形式。

先进控制技术

DCS在控制上的最大特点是依靠各种控制、运算模块的灵活组态,可实现多样化的控制策略以满足不同情况下的需要,使得在单元组合仪表实现起来相当繁琐与复杂的命题变得简单。随着企业提出的高柔性、高效益的要求,以经典控制理论为基础的控制方案已经不能适应,以多变量预测控制为代表的先进控制策略的提出和成功应用之后,先进过程控制受到了过程工业界的普遍关注。需要强调的是,广泛应用各种先进控制与优化技术是挖掘并提升DCS综合性能最有效、最直接、也是最具价值的发展方向。 在实际过程控制系统中,基于PID控制技术的系统占80%以上,PID回路运用优劣在实现装置平稳、高效、优质运行中起到举足轻重的作用,各DCS厂商都以此作为抢占市场的有力竞争砝码,开发出各自的PID自整定软件。另外,根据DCS的控制功能,在基本的PID算法基础上,可以开发各种改进算法,以满足实际工业控制现场的各种需要,诸如带死区的PID控制、积分分离的PID控制、微分先行的PID控制、不完全微分的PID控制、具有逻辑选择功能的PID控制等等。 与传统的PID控制不同,基于非参数模型的预测控制算法是通过预测模型预估系统的未来输出的状态,采用滚动优化策略计算当前控制器的输出。根据实施方案的不同,有各种算法,例如,内模控制、模型算法控制、动态矩阵控制等。目前,实用预测控制算法已引入DCS,例如IDCOM控制算法软件包已广泛应用于加氢裂化、催化裂化、常压蒸馏、石脑油催化重整等实际工业过程。此外,还有霍尼韦尔公司的HPC,横河公司的PREDICTROL,山武霍尼韦尔公司在TDC-3000LCN系统中开发的基于卡尔曼滤波器的预测控制器等等。这类预测控制器不是单纯把卡尔曼滤波器置于以往预测控制之前进行噪声滤波,而是把卡尔曼滤波器作为最优状态推测器,同时进行最优状态推测和噪声滤波。 PID回路显示控制器 先进控制算法还有很多。目前,国内、外许多控制软件公司和DCS厂商都在竞相开发先进控制和优化控制的工程软件包,希望在组态软件中嵌入先进控制和优化控制策略。 DCS在控制上的最大特点是依靠各种控制、运算模块的灵活组态,可实现多样化的控制策略以满足不同情况下的需要,使得在单元组合仪表实现起来相当繁琐与复杂的命题变得简单。随着企业提出的高柔性、高效益的要求,以经典控制理论为基础的控制方案已经不能适应,以多变量预测控制为代表的先进控制策略的提出和成功应用之后,先进过程控制受到了过程工业界的普遍关注。需要强调的是,广泛应用各种先进控制与优化技术是挖掘并提升DCS综合性能最有效、最直接、也是最具价值的发展方向。

PID回路

就是说先由控制器将收集到的数据与一个参考值进行比较,然后把这个差别用于计算新的输入值,这个新的输入值的目的是可以让系统的数据达到或者保持在一定的数值状态。和其他简单的控制运算不同,PID控制器可以根据历史数据和差别的出现率来调整输入值,这样可以使系统更加准确,更加稳定。 可以通过数学的方法证明,在其他控制方法导致系统有稳定误差或过程反复的情况下,一个PID反馈回路却可以保持系统的稳定。

在实际过程控制系统中,基于PID控制技术的系统占80%以上,PID回路运用优劣在实现装置平稳、高效、优质运行中起到举足轻重的作用,各DCS厂商都以此作为抢占市场的有力竞争砝码,开发出各自的PID自整定软件。另外,根据DCS的控制功能,在基本的PID算法基础上,可以开发各种改进算法,以满足实际工业控制现场的各种需要,诸如带死区的PID控制、积分分离的PID控制、微分先行的PID控制、不完全微分的PID控制、具有逻辑选择功能的PID控制等等。

开环控制系统(open-loop control system)是指被控对象的输出(被控制量 PID调节器)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。

闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。闭环控制系统有正反馈和负反馈,若反馈信号与系 统给定值信号相反,则称为负反馈(Negative Feedback),若极性相同,则称为正反馈,一般闭环控制系统均采用负反馈,又称负反馈控制系统。闭环控制系统的例子很多。比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,充当反馈,人体系统能通过不断的修正最后作出各种正确的动作。如果没有眼睛,就没有了反馈回路,也就成了一个开环控制系 统。另例,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,并在洗净之后能自动切断电源,它就是一个闭环控制系统。

非参数模型的预测控制算法

与传统的PID控制不同,基于非参数模型的预测控制算法是通过预测模型预估系统的未来输出的状态,采用滚动优化策略计算当前控制器的输出。根据实施方案的不同,有各种算法,例如,内模控制、模型算法控制、动态矩阵控制等。目前,实用预测控制算法已引入DCS,例如IDCOM控制算法软件包已广泛应用于加氢裂化、催化裂化、常压蒸馏、石脑油催化重整等实际工业过程。此外,还有霍尼韦尔公司的HPC,横河公司的PREDICTROL,山武霍尼韦尔公司在TDC-3000LCN系统中开发的基于卡尔曼滤波器的预测控制器等等。这类预测控制器不是单纯把卡尔曼滤波器置于以往预测控制之前进行噪声滤波,而是把卡尔曼滤波器作为最优状态推测器,同时进行最优状态推测和噪声滤波。

非参数模型的预测控制算法

与传统的PID控制不同,基于非参数模型的预测控制算法是通过预测模型预估系统的未来输出的状态,采用滚动优化策略计算当前控制器的输出。根据实施方案的不同,有各种算法,例如,内模控制、模型算法控制、动态矩阵控制等。目前,实用预测控制算法已引入DCS,例如IDCOM控制算法软件包已广泛应用于加氢裂化、催化裂化、常压蒸馏、石脑油催化重整等实际工业过程。此外,还有霍尼韦尔公司的HPC,横河公司的PREDICTROL,山武霍尼韦尔公司在TDC-3000LCN系统中开发的基于卡尔曼滤波器的预测控制器等等。这类预测控制器不是单纯把卡尔曼滤波器置于以往预测控制之前进行噪声滤波,而是把卡尔曼滤波器作为最优状态推测器,同时进行最优状态推测和噪声滤波。

其他

先进控制算法还有很多。目前,国内、外许多控制软件公司和DCS厂商都在竞相开发先进控制和优化控制的工程软件包,希望在组态软件中嵌入先进控制和优化控制策略。

SCADA

SCADA(Supervisory Control And Data Acquisition)系统,即数据采集与监视控制系统。SCADA系统是以计算机为基础的DCS与电力自动化监控系统;它应用领域很广,可以应用于电力、冶金、石油、化工、燃气、铁路等领域的数据采集与监视控制以及过程控制等诸多领域。 在电力系统中,SCADA系统应用最为广泛,技术发展也最为成熟。它在远动系统中占重要地位,可以对现场的运行设备进行监视和控制,以实现数据采集、设备控制、测量、参数调节以及各类信号报警等各项功能,即我们所知的”四遥”功能.RTU(远程终端单元),FTU(馈线终端单元)是它的重要组成部分.在现今的变电站综合自动化建设中起了相当重要的作用. SCADA(Supervisory Control And Data Acquisition)系统,即数据采集与监视控制系统,涉及到组态软件、数据传输链路(如:数传电台、GPRS等)

硬件

通常SCADA系统分为两个层面,即客户/服务器体系结构。服务器与硬件设备通信,进行数据处理和运算。而客户用于人机交互,如用文字、动画显示现场的状态,并可以对现场的开关、阀门进行操作。还有一种“超远程客户”,它可以通过Web发布在Internet上进行监控。硬件设备(如PLC)一般既可以通过点到点方式连接,也可以以总线方式连接到服务器上。点到点连接一般通过串口(RS232),总线方式可以是RS485,以太网等连接方式。

软件

SCADA由很多任务组成,每个任务完成特定的功能。位于一个或多个机器上的服务器负责数据采集,数据处理(如量程转换、滤波、报警检查、计算、事件记录、历史存储、执行用户脚本等)。服务器间可以相互通讯。有些系统将服务器进一步单独划分成若干专门服务器,如报警服务器,记录服务器,历史服务器,登录服务器等。各服务器逻辑上作为统一整体,但物理上可能放置在不同的机器上。分类划分的好处是可以将多个服务器的各种数据统一管理、分工协作,缺点是效率低,局部故障可能影响整个系统 。

通信

SCADA系统中的通信分为内部通信、与I/O设备通信、和外界通信。客户与服务器间以及服务器与服务器间一般有三种通信形式,请求式,订阅式与广播式。设备驱动程序与I/O设备通讯一般采用请求式,大多数设备都支持这种通讯方式,当然也有的设备支持主动发送方式。SCADA通过多种方式与外界通信。如OPC,一般都会提供OPC客户端,用来与设备厂家提供的OPC服务器进行通讯。因为OPC有微软内定的标准,所以OPC客户端无需修改就可以与各家提供的OPC服务器进行通讯。

系统构成

SCADA系统主要有以下部分组成:监控计算机、远程终端单元(RTU)、可编程逻辑控制器(PLC)、通信基础设施、人机界面(HMI)。 使用SCADA概念可以构建大型和小型系统。这些系统的范围可以从几十到几千个控制回路,具体取决于应用。示例流程包括工业,基础设施和基于设施的流程,如下所述: 工业过程包括制造,过程控制,发电,制造和精炼,并可以连续,间歇,重复或离散模式运行。 基础设施过程可以是公共的或私人的,包括水处理和分配,污水收集和处理,油气管道,电力输送和配电以及风力发电场。 设施流程,包括建筑物,机场,船舶和空间站。他们监视和控制暖气,通风和空调系统(HVAC),通道和能源消耗。 但是,SCADA系统可能存在安全漏洞,因此应对系统进行评估,以识别风险和解决方案,以减轻这些风险。

监控计算机

远程终端单元,也称为(RTU),连接到过程中的传感器和执行器,并与监控计算机系统联网。 RTU是“智能I / O”,并且通常具有嵌入式控制功能,例如梯形逻辑,以实现布尔逻辑操作。

可编程逻辑控制器

也称为PLC,它们连接到过程中的传感器和执行器,并以与RTU相同的方式联网到监控系统。 与RTU相比,PLC具有更复杂的嵌入式控制功能,并且采用一种或多种IEC 61131-3编程语言进行编程。 PLC经常被用来代替RTU作为现场设备,因为它们更经济,多功能,灵活和可配置。

通信基础设施

这将监控计算机系统连接到远程终端单元(RTU)和PLC,并且可以使用行业标准或制造商专有协议。 RTU和PLC都使用监控系统提供的最后一个命令,在过程的近实时控制下自主运行。 通信网络的故障并不一定会停止工厂的过程控制,而且在恢复通信时,操作员可以继续进行监视和控制。 一些关键系统将具有双冗余数据高速公路,通常通过不同的路线进行连接。

人机界面

人机界面(HMI)是监控系统的操作员窗口。它以模拟图的形式向操作人员提供工厂信息,模拟图是控制工厂的示意图,以及报警和事件记录页面。 HMI连接到SCADA监控计算机,提供实时数据以驱动模拟图,警报显示和趋势图。在许多安装中,HMI是操作员的图形用户界面,收集来自外部设备的所有数据,创建报告,执行报警,发送通知等。 模拟图由用来表示过程元素的线图和示意符号组成,或者可以由工艺设备的数字照片覆盖动画符号组成。 工厂的监督操作是通过HMI进行的,操作员使用鼠标指针,键盘和触摸屏发出命令。例如,泵的符号可以向操作员显示泵正在运行,并且流量计符号可以显示通过管道泵送了多少流体。操作员可以通过鼠标点击或屏幕触摸从模拟器切换泵。 HMI将显示管道中流体的流量实时减少。 SCADA系统的HMI包通常包含一个绘图程序,操作员或系统维护人员用来改变这些点在接口中的表示方式。这些表示可以像在屏幕上的交通灯一样简单,其代表现场中实际交通灯的状态,或者像代表摩天大楼中所有电梯的位置的多投影仪显示器一样复杂,或者全部火车上的火车。 “历史记录”是HMI中的一项软件服务,它在数据库中存储带时间戳的数据,事件和报警,可以查询或用于填充HMI中的图形趋势。历史学家是从数据采集服务器请求数据的客户端 。

FCS(Fieldbus Control System)现场总线

现场总线(Field bus)是近年来迅速发展起来的一种工业数据总线,它主要解决工业现场的智能化仪器仪表、控制器、执行机构等现场设备间的数字通信以及这些现场控制设备和高级控制系统之间的信息传递问题。由于现场总线简单、可靠、经济实用等一系列突出的优点,因而受到了许多标准团体和计算机厂商的高度重视。

根据IEC61158的定义,现场总线是安装在制造或过程区域的现场装置与控制室内的自动控制装置之间的数字式、双向传输、多分支结构的通信网络。现场总线使测控设备具备了数字计算和数字通信能力,提高了信号的测量、传输和控制精度,提高了系统与设备的功能、性能。IEC/TC65的SC65C/WG6工作组于1984年开始致力于推出世界上单一的现场总线标准工作,走过了16年的艰难历程,于1993年推出了IEC61158-2,之后的标准制定就陷于混乱。

计算机控制系统的发展在经历了基地式气动仪表控制系统、电动单元组合式模拟仪表控制系统、集中式数字控制系统以及集散控制系统(DCS)后,将朝着现场总线控制系统(FCS)的方向发展。虽然以现场总线为基础的FCS发展很快,但FCS发展还有很多工作要做,如统一标准、仪表智能化等。另外,传统控制系统的维护和改造还需要DCS,因此FCS完全取代传统的DCS还需要一个较长的过程,同时DCS本身也在不断的发展与完善。可以肯定的是,结合DCS、工业以太网、先进控制等新技术的FCS将具有强大的生命力。工业以太网以及现场总线技术作为一种灵活、方便、可靠的数据传输方式,在工业现场得到了越来越多的应用,并将在控制领域中占有更加重要的地位。

总线本质

从以上内容我们可以看到,现场总线体现了分布、开放、互联、高可靠性的特点,而这些正是DCS系统的缺点。DCS通常是一对一单独传送信号,其所采用的模拟信号精度低,易受干扰,位于操作室的操作员对模拟仪表往往难以调整参数和预测故障,处于“失控”状态,很多的仪表厂商自定标准,互换性差,仪表的功能也较单一,难以满足现代的要求,而且几乎所有的控制功能都位于控制站中。FCS则采取一对多双向传输信号,采用的数字信号精度高、可靠性强,设备也始终处于操作员的远程监控和可控状态,用户可以自由按需选择不同品牌种类的设备互联,智能仪表具有通信、控制和运算等丰富的功能,而且控制功能分散到各个智能仪表中去。由此我们可以看到FCS相对于DCS的巨大进步。

通信网络:用于过程自动化和制造自动化的现场设备或现场仪表互连的现场通信网络。

设备互联:依据实际需要使用不同的传输介质把不同的现场设备或者现场仪表相互关联。

互操作性:用户可以根据自身的需求选择不同厂家或不同型号的产品构成所需的控制回路,从而可以自由地集成FCS。

分散功能块:FCS 废弃了DCS 的输入/输出单元和控制站, 把DCS 控制站的功能块分散地分配给现场仪表, 从而构成虚拟控制站,彻底地实现了分散控制。

通信线供电:通信线供电方式允许现场仪表直接从通信线上摄取能量, 这种方式提供用于本质安全环境的低功耗现场仪表, 与其配套的还有安全栅。

开放式互联网:现场总线为开放式互联网络,既可以与同层网络互联,也可与不同层网络互联,还可以实现网络数据库的共享。

发展趋势

一是寻求统一的现场总线国际标准

二是Industrial Ethernet走向工业控制网络

国际上形成的工业以太网技术的四大阵营:

Modbus-IDA工业以太网

Ethernet/IP工业以太网

PROFInet工业以太网

Foundation Fieldbus HSE工业以太网

由于各个国家各个公司的利益之争,虽然早在1984年国际电工技术委员会/国际标准协会(IEC/ISA)就着手开始制定现场总线的标准,统一的标准仍未完成。很多公司也推出其各自的现场总线技术,但彼此的开放性和互操作性还难以统一 。

概要

世界上存在着大约四十余种现场总线,工业总线网络可归为三类:485网络、HART网络、FieldBus现场总线网络。

485网络:RS485/MODBUS是流行的一种工业组网方式,其特点是实施简单方便,而且支持RS485的仪表又特别多。

HART:(Highway Addressable Remote Transducer),可寻址远程传感器高速通道的开放通信协议,是美国ROSEMOUNT公司于1985年推出的一种用于现场智能仪表和控制室设备之间的通信协议。

FieldBus现场总线网络:现场总线是当今自动化领域的热点技术之一,被誉为自动化领域的计算机局域网,使自控系统朝着“智能化、数字化、信息化、网络化、分散化”的方向进一步迈进,形成新型的网络通信的全分布式控制系统——现场总线控制系统FCS(Fieldbus Control System)。然而,现场总线还没有形成真正统一的标准,ProfiBus、CANbus、CC-Link等多种标准并行存在,并且都有自己的生存空间。何时统一,遥遥无期。

控制组成

1、现场总线控制系统:

它的软件是系统的重要组成部分,控制系统的软件有组态软件、维护软件、仿真软件、设备软件和监控软件等。首先选择开发组态软件、控制操作人机接口软件。通过组态软件,完成功能块之间的连接,选定功能块参数,进行网络组态。在网络运行过程中对系统实时采集数据、进行数据处理、计算。优化控制及逻辑控制报警、监视、显示、报表等。

2、现场总线的测量系统:

其特点为多变量高性能的测量,使测量仪表具有计算能力等更多功能,由于采用数字信号,具有高分辨率,准确性高、抗干扰、抗畸变能力强,同时还具有仪表设备的状态信息,可以对处理过程进行调整。

3、设备管理系统:

可以提供设备自身及过程的诊断信息、管理信息、设备运行状态信息(包括智能仪表)、厂商提供的设备制造信息。例如Fisher—Rosemoune公司,推出AMS管理系统,它安装在主计算机内,由它完成管理功能,可以构成一个现场设备的综合管理系统信息库,在此基础上实现设备的可靠性分析以及预测性维护。将被动的管理模式改变为可预测性的管理维护模式AMS软件是以现场服务器为平台的T型结构,在现场服务器上支撑模块化,功能丰富的应用软件为用户提供一个图形化界面。

6、网络系统的硬件与软件:

网络系统硬件有:系统管理主机、服务器、网关、协议变换器、集线器,用户计算机等及底层智能化仪表。网络系统软件有网络操作软件如:NetWarc,LAN Mangger,Vines,服务器操作软件如Lunix,os/2,Window NT。应用软件数据库、通信协议、网络管理协议等。

国产

EPA

G-link,

Symotion

NCUC-BUS

IEC61158 Ed.3

Type 1 TS61158现场总线

Type 2 ControlNet和Ethernet/IP现场总线

Type 3 Profibus现场总线

Profibus 作为一种快速总线,被广泛应用于分布式外围组件(PROFIBUS-DP)。除了 PROFIBUS-DP 和 FMS 以外,Beckhoff 还支持驱动器通讯标准 PROFIBUS MC。过程现场总线。

Type 4 P-NET现场总线

Type 5 FF HSE现场总线

Type 6 SwiftNet现场总线

Type 7 World FIP现场总线

Type 8 Interbus现场总线

Type 9 FF H1现场总线

Type 10 PROFInet现场总线

主要

1、基金会现场总线(FoundationFieldbus 简称FF)

这是以美国Fisher-Rousemount公司为首的联合了横河、ABB、西门子、英维斯等80家公司制定的ISP协议和以Honeywell公司为首的联合欧洲等地150余家公司制定的WorldFIP协议于1994年9月合并的。该总线在过程自动化领域得到了广泛的应用,具有良好的发展前景。 基金会现场总线采用国际标准化组织ISO的开放化系统互联OSI的简化模型(1,2,7层),即物理层、数据链路层、应用层,另外增加了用户层。FF分低速H1和高速H2两种通信速率,前者传输速率为31.25Kbit/秒,通信距离可达1900m,可支持总线供电和本质安全防爆环境。后者传输速率为1Mbit/秒和2.5Mbit/秒,通信距离为750m和500m,支持双绞线、光缆和无线发射,协议符号IEC1158-2标准。FF的物理媒介的传输信号采用曼切斯特编码。

2、CAN(ControllerAreaNetwork控制器局域网)

最早由德国BOSCH公司推出,它广泛用于离散控制领域,其总线规范已被ISO国际标准组织制定为国际标准,得到了Intel、Motorola、NEC等公司的支持。CAN协议分为二层:物理层和数据链路层。CAN的信号传输采用短帧结构,传输时间短,具有自动关闭功能,具有较强的抗干扰能力。CAN支持多主工作方式,并采用了非破坏性总线仲裁技术,通过设置优先级来避免冲突,通讯距离最远可达10KM/5Kbps/s,通讯速率最高可达40M /1Mbp/s,网络节点数实际可达110个。已有多家公司开发了符合CAN协议的通信芯片。

3、Lonworks

它由美国Echelon公司推出,并由Motorola、Toshiba公司共同倡导。它采用ISO/OSI模型的全部7层通讯协议,采用面向对象的设计方法,通过网络变量把网络通信设计简化为参数设置。支持双绞线、同轴电缆、光缆和红外线等多种通信介质,通讯速率从300bit/s至1.5M/s不等,直接通信距离可达2700m(78Kbit/s),被誉为通用控制网络。Lonworks技术采用的LonTalk协议被封装到Neuron(神经元)的芯片中,并得以实现。采用Lonworks技术和神经元芯片的产品,被广泛应用在楼宇自动化、家庭自动化、保安系统、办公设备、交通运输、工业过程控制等行业。

4、DeviceNet

DeviceNet是一种低成本的通信连接也是一种简单的网络解决方案,有着开放的网络标准。DeviceNet具有的直接互联性不仅改善了设备间的通信而且提供了相当重要的设备级阵地功能。DeviceNet基于CAN技术,传输率为125Kbit/s至500Kbit/s,每个网络的最大节点为64个,其通信模式为:生产者/客户(Producer/Consumer),采用多信道广播信息发送方式。位于DeviceNet网络上的设备可以自由连接或断开,不影响网上的其他设备,而且其设备的安装布线成本也较低。DeviceNet总线的组织结构是Open DeviceNet Vendor Association(开放式设备网络供应商协会,简称“ODVA”)。

5、PROFIBUS

PROFIBUS是德国标准(DIN19245)和欧洲标准(EN50170)的现场总线标准。由PROFIBUS–DP、PROFIBUS-FMS、PROFIBUS-PA系列组成。DP用于分散外设间高速数据传输,适用于加工自动化领域。FMS适用于纺织、楼宇自动化、可编程控制器、低压开关等。PA用于过程自动化的总线类型,服从IEC1158-2标准。PROFIBUS支持主-从系统、纯主站系统、多主多从混合系统等几种传输方式。PROFIBUS的传输速率为9.6Kbit/s至12Mbit/s,最大传输距离在9.6Kbit/s下为1200m,在12Mbit/s小为200m,可采用中继器延长至10km,传输介质为双绞线或者光缆,最多可挂接127个站点。

6、HART 

HART是Highway Addressable Remote Transducer的缩写,最早由Rosemount公司开发。其特点是在现有模拟信号传输线上实现数字信号通信,属于模拟系统向数字系统转变的过渡产品。其通信模型采用物理层、数据链路层和应用层三层,支持点对点主从应答方式和多点广播方式。由于它采用模拟数字信号混和,难以开发通用的通信接口芯片。HART能利用总线供电,可满足本质安全防爆的要求,并可用于由手持编程器与管理系统主机作为主设备的双主设备系统。

CC-Link是Control\&Communication Link(控制与通信链路系统)的缩写,在1996年11月,由三菱电机为主导的多家公司推出,其增长势头迅猛,在亚洲占有较大份额。在其系统中,可以将控制和信息数据同是以10Mbit/s高速传送至现场网络,具有性能卓越、使用简单、应用广泛、节省成本等优点。其不仅解决了工业现场配线复杂的问题,同时具有优异的抗噪性能和兼容性。CC-Link是一个以设备层为主的网络,同时也可覆盖较高层次的控制层和较低层次的传感层。2005年7月CC-Link被中国国家标准委员会批准为中国国家标准指导性技术文件。

8、WorldFIP

WorldFIP的北美部分与ISP合并为FF以后,WorldFIP的欧洲部分仍保持独立,总部设在法国。其在欧洲市场占有重要地位,特别是在法国占有率大约为60%。WorldFIP的特点是具有单一的总线结构来适用不同的应用领域的需求,而且没有任何网关或网桥,用软件的办法来解决高速和低速的衔接。WorldFIP与FFHSE可以实现“透明联接”,并对FF的H1进行了技术拓展,如速率等。在与IEC61158第一类型的连接方面,WorldFIP做得最好,走在世界前列。

9、INTERBUS

INTERBUS是德国Phoenix公司推出的较早的现场总线,2000年2月成为国际标准IEC61158。INTERBUS采用国际标准化组织ISO的开放化系统互联OSI的简化模型(1,2,7层),即物理层、数据链路层、应用层,具有强大的可靠性、可诊断性和易维护性。其采用集总帧型的数据环通信,具有低速度、高效率的特点,并严格保证了数据传输的同步性和周期性;该总线的实时性、抗干扰性和可维护性也非常出色。INTERBUS广泛地应用到汽车、烟草、仓储、造纸、包装、食品等工业,成为国际现场总线的领先者。

其他

BACnet:楼宇自动控制网络数据通讯协议 Building Automation Control Network

EtherCAT(Ethernet for Control Automation Technology,用于控制和自动化技术的以太网)是一种用于工业自动化的实时以太网解决方案,性能优越,使用简便。     

Lightbus:这种经过验证的 Beckhoff 光纤总线系统具有极为优秀的抗 EMI 性能,易于安装,数据流快速、循环且具有确定性。

Interbus 易于配置,通讯快速而可靠。主/从系统的移位寄存器协议可提供高效循环通讯。

CANopen:通过有效利用总线带宽,CANopen 可在即使相对较低的数据传输速率时也能实现较短的系统响应时间。秉承了 CAN 的传统优点,例如数据安全性高且具备多主站能力。

ControlNet 是一种开放式标准现场总线系统。该总线协议允许循环数据和非循环数据通过总线同时进行交换,而两者之间互不影响。     

SERCOS 最初作为用于驱动器的快速光纤总线系统研发。采用 Beckhoff SERCOS 总线耦合器,I/O 设备可以实现高速率数据传输和较短的循环时间。      

Ethernet:以太网是办公环境中的主流标准。在Beckhoff 以太网产品中,也秉承并发扬了以太网的优点,例如数据传输速率高,与现有网络的简便集成以及广泛的服务和接口等。

PROFINET 是一种由 PNO(PROFIBUS 用户组织)针对开放式工业以太网制定的标准:国际上订立的一种针对通讯的 IT 标准(如 TCP/IP 协议)。 

USB 已成为 PC 技术的标准接口,具有传输速率高,拓扑结构灵活(通过集成集线器)等特点,加上 Beckhoff USB 总线耦合器,在距离较短时,该系统可替代现场总线。 

Modbus 是一种基于主/从结构的开放式串行通讯协议。可非常轻松地在所有类型的串行接口上实现,已被广泛接受。

RS232 和 RS485 是经典的串行接口,一直被广泛使用。Beckhoff RS485/RS232 I/O模块采用的是易于实现的简单串行通讯协议

CC-Link(Control & Communication Link,控制与通信链路)是一种开放式总线系统,用于控制级和现场总线级之间的通讯。应用方面主要以亚洲地区为主。

AS-Interface:ASI 用于下位控制级的传感器/执行器总线 AS-interface 用于将传感器和执行器连接 至上位控制层,布线简单、经济。AS interface 符合国际标准EN 50295 和IEC 62026-2 标准。 AS-Interface(AS-i = 执行器/传感器接口) 是用于连接执行器和传感器的现场总线通讯方案。

LON(Local Operating Network,局部操作网络)是一种能够进行多网络连接的通讯系统,用于分布式应用。

EIB(European Installation Bus,欧洲安装总线)是一种用于楼宇布线的总线系统,主要在欧洲得到广泛应用。

SNMP:简单网络管理协议。

QOS:服务质量,解决延时和阻塞的一种技术。 

CAN 控制器局域网总线(CAN,Controller Area Network):控制器局域网络

MECHATROLINK是一个用在工业自动化的开放式通讯协定

DALI 楼宇自动化领域的通讯标准 DALI 标准(IEC60929)是一种跨越厂商的协议,其目的是在照明应用中确保电子镇流器的互用性。这个新标准用于替代1-10V调光器接口。 数字可寻址照明接口(DALI,Digital Addressable Lighting Interface)是一种楼宇自动 化标准,用于电子镇流器的数字控制。 DALI 作为一种子系统使用,例如照明、百叶帘或温度控制,可直接与楼宇管理 系统进行通讯。 【整理】工业自动化总线之楼宇自动化之照明接口:DALI

DeviceNet 采用CAN技术的设备总线DeviceNet 是一种传感器/执行器总线系统, 起源于美国,但现在在欧洲和亚洲地区也得到越来越多的应用。DeviceNet 基于CAN(Controller Area Net,控制器局域网)总线。

DMX EIB 楼宇自动化领域的通讯标准EIB(European Installation Bus,欧洲安装 总线) 是一种用于楼宇布线的总线系统,主要在欧洲地区广泛应用。

EnOcean 免维护、无需电池、无需接线是一种无线技术。主要用于楼宇自动化:不同的设备模块(比如一个灯的开关)内嵌了EnOcean支持。则就可以通过控制器控制该设备。

EtherNet/IP 来自ODVA 的工业以太网解决方案Ethernet/IP 是由ODVA(Open DeviceNet Vendor Association,开放式设备网络供货商协会)制定的工业以太网标准,它以Ethernet TCP/IP 和UDP/IP 标准为基础。

Ethernet TCP/IP 网络总线以太网是办公领域的一项重要标准,以太网所具备的很多优点,如传输速率高、与现有网络的集成简单、服务范围广以及接口种类多等,在Beckhoff 的以太网产品中也得到充分体现。

FIAS FIAS==Fidelio接口和应用规范==(估计是)Fidelio Interface Application Specification FIAS(Fidelio接口和应用规范)是世界领先的酒店管理软件的接口。 【整理】工业自动化之楼宇自动化之酒店管理软件的接口:FIAS和Fidelio

Fipio 符合WorldFIP 标准的现场总线FIP 符合欧洲标准EN 50170,并受到来 自WorldFIP 现场总线组织的独立制造商支持。通过周期性和非周期性的变量和信息交换,能够根据具体的应用调整总线性能

IEEE 1588 InterBus Interbus,于1987年进入市场interbus 现场总线具有组态方便、速度快、 可靠性高特点。这种主/从站系统的移位寄存器通信协议可提高循环通信的效率。

IO-Link IO-Link完美地将控制系统和工具加工所需的不同接口实现了标准化。IO-Link 可使用经济的点对点连接方法将 传感器和执行器连接至控制层。作为一种开放式接口,IO-Link 可集成于所有常用的现场总线系统中。IO-Link 系统由IO-Link 设备组成,如传感器、执行器或两者的结合。它们采用的是传统的三线制连接技术。

LightBus==高速光纤现场总线 无干扰现场总线通讯,用于高速机械控制这是由Beckhoff 公司开发的一种光纤总线系统,具有很高的成熟度,主要特点包括:抗电磁干扰性强、安装简便,数据传输速度非常快并具循环性和高度确定性。

LON 楼宇自动化领域的通讯标准LON(Local Operating Network,局域操作 网络)是一种能够进行多网络连接的通 讯系统,用于分布式应用,主要用于商 业楼宇的自动化应用领域。

Modbus 开放式现场总线Modbus 是一种基于主/从站结构的开放 式串行通讯协议。由于该协议可以非常轻松地在所有类型的串行接口上执行,因此得到了广泛认可。

Profibus PROFIBUS DP/FMS 符合欧洲标准EN50170PROFIBUS 作为一种高速总线,被广泛应 用于分布式外围设备(PROFIBUS DP)。除了PROFIBUS DP 和FMS 之外,Beckhoff还支持用于驱动器通讯的PROFIBUS MC协议

PROFINET 来自PNO 的工业以太网解决方案PROFINET 是由PNO(PROFIBUS 用户组 织)制定的开放式工业以太网标准,诸如TCP/IP这些国际公认的IT 标准则用于实现通讯。

RS232/RS485 最经济的解决方案,网络RS232 和RS485 是‘传统的’串行接口, 一直都被广泛应用。Beckhoff 的RS485/RS232 I/O 模块采用的是一种简单、易于实现的串行通讯协议。

SERCOS III 来自驱动工程领域的总线,SERCOS 最初是针对驱动器开发的一种高 速光纤总线系统。由于Beckhoff 开发了SERCOS 总线耦合器,使得SERCOS 总线的一些优点(如数据传输速率高,周期时间短)现在也可以用于I/O 外围设备。

USB 实验室用高速接口USB 已成为PC 技术领域中应用的标准接 口。由于USB 具有传输速率高、拓扑结构灵活(通过集成集线器)等特点,加上Beckhoff 的USB 总线耦合器,在距离较短的应用场合,该系统可替代现场总线。

此外较有影响的现场总线还有丹麦公司Process-Data A/S 提出的P-Net,该总线主要应用于农业、林业、水利、食品等行业;SwiftNet现场总线主要使用在航空航天等领域,还有一些其他的现场总线这里就不再赘述了。

西门子博图

PLC编程

设备组态

1.电源模块(PS),供电专用

2.CPU模块(CPU),负责处理信息

3.通信模块(IM)

4.数字量输入模块(DI)

5.数字量输出模块(DO)

6.模拟量输入模块(AI)

7.模拟量输出模块(AO)

在线和诊断

程序块

组织块

Program cycle

Startup

Time delay interrupt

Cyclic interrupt

Hardware interrupt

Time error interrupt

Diagnostic error interrupt

函数块

函数

数据库

程序语言

LAD

FBD

SCL

工艺对象

运动控制

轴(运动控制相关与PLCG关联)

TO_Axis_PTO

实例

  • 组态

  • 调试

  • 诊断

轴控制

TO_CommandTable_PTO

PID

PID是闭环控制系统的比例-积分-微分控制算法。控制器根据设定值(给定)与被控对象的实际值(反馈)的差值,按照PID算法计算出控制器的输出量,控制执行机构去影响被控对象的变化。

在工业过程控制中,按被控对象的实时数据采集的信息与给定值比较产生的误差的比例、积分和微分进行控制的控制系统,简称PID(Proportional Integral Derivative)控制系统。PID控制具有原理简单,鲁棒性强和实用面广等优点,是一种技术成熟、应用最为广泛的控制系统

PID_Compact

PID_3Step

SIMATIC Ident

TO_Ident

TP_TagLayout

SINAMICS

TO_BasicPos

PLC变量

数据类型

监控与强制表

监控表

可以定义多个表

强制表

只有一份

设备代理数据

程序块

工艺对象

PLC变量

PLC监控和报警

西门子S7Comm协议

S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。

S7协议的TCP/IP实现依赖于面向块的ISO传输服务。S7协议被封装在TPKT和ISO-COTP协议中,这使得PDU(协议数据单元)能够通过TCP传送。

它用于PLC编程,在PLC之间交换数据,从SCADA(监控和数据采集)系统访问PLC数据以及诊断目的。

S7Comm以太网协议基于OSI模型:

7 Application Layer -S7 communication

第7层,S7 communication,这一层和用户数据相关,对PLC数据的读取报文在这里完成。

6 Presentation Layer -S7 communication (COTP)

第6层COTP,按照维基百科的解释,COTP 是 OSI 7层协议定义的位于TCP之上的协议。COTP 以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;在具体的报文中COTP的作用是定义了数据传输的基本单位。

5 Session Layer S7- communication (TPKT)

第5层TPKT,应用程数据传输协议,介于TCP和COTP协议之间。这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁;TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);

4 Transport Layer- ISO-on-TCP (RFC 1006)

第1-4层会由计算机自己完成(底层驱动程序)

3 Network Layer -IP

2 Data Link Layer -Ethernet

1 Physical Layer -Ethernet

HMI编程

设备组态 在线和诊断 运行系统配置

画面

画面管理 画面模板 全局画面

HMI变量

连接

HMI报警

配方

记录

计划任务

文本和图形列表

用户管理

伺服

设备组态 在线和诊断 参数 调试 验收测试 Traces

博途(V16)

1、TIA Portal Multiuser Engineering

TIA允许多个用户同时工作在同一个项目上,增加协作的能力,另外还可以通过委托减少工作时间。

2、TIA Portal Teamcenter Gateway

Teamcenter网关让您保存和管理TIA Portal项目在Teamcenter。

3、TIA Portal Cloud Connector

允许客户通过工业私有云的形式,借助RDP协议接入远程PC的TIA管理器并可以连接现场硬件。

4、TIA User Management Component

TIA的用户管理组件(UMC)在TIA Portal V15提供全球用户管理的可选项。可以跨项目定义和管理用户和用户组。用户和用户组也可以从微软活动目录中获取。

5、TIA Portal Openness

S7-1500标准PLC程序自动加载,在这种情况下,PLC的启动停止是隐形的,可以通过用户权限来控制。

SINAMICS G120 and SINAMICS S120 drives可以被V15版本的驱动组件来创建。

系统UDT可以被用户数据类型访问。

SCL可以用XML来表示,意味着V15版本的LAD/FBD和SCL都相互导入导出为XML。

6、SIMATIC S7-PLCSIM Advanced

可以支持备份和恢复软硬件的配置。

支持RDREC/WRREC功能块和 alarms。

用co-simulation工具同步OB功能块的模拟。

在TIA中配置过程报警可以支持API输出。

允许PLCSIM和PLCSIM Adv安装在同一台PC。

7、SIMATIC Visualization Architect

TIA V15完美支持虚拟化架构,可以与SiVarc结合在一起。

8、SIMATIC OPC UA S7-1500

OPC UA S7-1500选项允许任何第三方设备轻松连接到S7-1500通过集成在S7-1500 CPU的OPC UA服务器。

OPC UA

OPC是自动化行业及其他行业用于数据安全交换时的互操作性标准,OPC基金会负责该标准的开发和维护。OPC标准是由行业供应商,终端用户和软件开发者共同制定的一系列规范。这些规范定义了客户端与服务器之间以及服务器与服务器之间的接口,比如访问实时数据、监控报警和事件、访问历史数据和其他应用程序等,都需要OPC标准的协调。OPC标准于1996年首次发布,其目的是把PLC特定的协议(如Modbus,Profibus等)抽象成为标准化的接口,作为“中间人”的角色把其通用的“读写”要求转换成具体的设备协议,反之亦然,以便HMI/SCADA系统可以对接。这也因此造就了整个行业内手工作坊的蓬勃兴起,通过使用OPC协议,终端用户就可以毫无障碍地使用最好的产品来进行系统操作。

现行标准 OPC DA(数据访问)是最常见的标准,它描述了一组与 PLC、DCS、HMI、CNC 和其他设备进行实时数据交换的功能。 OPC HDA(历史数据访问)提供对已保存数据和历史的访问。 OPC AE(警报和事件)为各种事件提供按需通知功能:紧急情况、操作员操作、信息消息等。 OPC Batch提供工艺过程的步骤和配方控制功能。 OPC DX (Data eXchange)提供通过以太网在 OPC 服务器之间组织数据交换的功能。该标准的主要目的是为来自不同制造商的设备和程序之间的数据交换创建网关。 OPC 安全定义了组织客户端对 OPC 服务器数据的访问权限的功能。 OPC XML-DA(XML 数据访问)提供了一种灵活的、规则驱动的格式,用于通过 XML、SOAP 和 HTTP 交换数据。 OPC 复杂数据是一组针对 OPC DA 和 XML-DA 的附加规范,允许服务器处理复杂数据类型,例如二进制结构和 XML 文档。 OPC 命令是一组编程接口,允许 OPC 客户端和服务器识别、发送和控制在控制器或 I/O 模块中执行的命令。 OPC UA(统一架构)是不基于 Microsoft COM 技术的最新规范,它提供了跨平台兼容性。

最普遍的标准是 OPC DA,但它有一个明显的缺点。在其发展时,它建立在当时的现代 Windows 技术之上:OLE、ActiveX、COM/DCOM,但此后行业发生了变化,其他操作系统和技术也开始流行。因此,使 OPC 技术独立于平台,并在开放的跨平台技术上开发了 OPC UA(统一架构)标准。

最初,OPC标准仅限于Windows操作系统。因此,OPC是OLE for Process Control的缩写(中文意思:用于过程控制的OLE)。我们所熟知的OPC规范一般是指OPC Classic,被广泛应用于各个行业,包括制造业,楼宇自动化,石油和天然气,可再生能源和公用事业等领域。

OPC有两种架构经典架构和统一架构:

经典架构(Classic Architecture)

OPC Classic规范基于Microsoft Windows技术,使用COM / DCOM(分布式组件对象模型)在软件组件之间交换数据。 规范为访问过程数据、报警和历史数据提供了单独的定义。

OPC Data Access (OPC DA),OPC DA规范定义了数据交换,包括值、时间和质量信息。

OPC Alarms & Events (OPC AE),OPC A&E规范定义了报警和事件类型消息信息的交换,以及变量状态和状态管理。

OPC Historical Data Access (OPC HDA),OPC HDA规范定义了可应用于历史数据、时间数据的查询和分析的方法。

统一架构(Unified Architecture)

OPC Classic规范很好地服务于工业企业。 然而随着技术的发展,企业对OPC规范的需求也在增长。2008年,OPC基金会发布了OPC统一架构(OPC UA),这是一个独立于平台的面向服务的架构,集成了现有OPC Classic规范的所有功能,并且兼容OPC Classic。 OPC统一架构(UA)将各个OPC Classic规范的所有功能集成到一个可扩展的框架中,独立于平台并且面向服务。

这种多层方法实现了最初设计UA规范时的目标:

功能对等性:所有COM OPC Classic规范都映射到UA 平台独立性:从嵌入式微控制器到基于云的基础设施 安全性:信息加密、身份验证和审核 可扩展性:添加新功能而不影响现有应用程序的能力 综合信息建模:用于定义复杂信息

功能对等性 基于OPC Classic的成功,OPC基金会推出了新的技术标准OPC UA。 OPC UA实现了所有OPC Classic的功能,并有以下的增强和超越:

OPC UA实现了所有OPC Classic的功能,并有以下的增强和超越:

发现:在本地PC和/或网络上查找可用的OPC服务器

地址空间:所有数据都是分层表示的(例如文件和文件夹),允许OPC客户端发现、利用简单和复杂的数据结构

按需:基于访问权限读取和写入数据/信息

订阅:监视数据/信息,并且当值变化超出客户端的设定时报告异常

事件:基于客户端的设定通知重要信息

方法:客户端可以基于在服务器上定义的方法来执行程序等

OPC UA产品和OPC Classic产品之间的集成可以通过COM/Proxy Wrappers轻松实现。

平台独立性 鉴于市场上有各种各样的硬件平台和操作系统,平台独立性就显得至关重要。OPC UA包含但不限于以下平台及系统:

硬件平台:传统PC硬件、云服务器、PLC、微控制器(ARM等) 操作系统:Microsoft Windows、Apple OSX、Android或任何Linux发行版本等 OPC UA为企业之间的互操作性提供必要的M2M、M2E及两者之间的基础架构。

安全性 企业在选择技术标准时最重要的考虑之一是安全性。OPC UA在通过防火墙时通过提供一套控制方案来解决安全问题:

传输:定义了许多协议,提供了诸如超快OPC二进制传输或更通用的SOAP-HTTPS等选项 会话加密:信息以128位或256位加密级别安全地传输 信息签名:信息接收时的签名与发送时必须完全相同 测序数据包:通过排序消除了已发现的信息重放攻击 认证:每个UA的客户端和服务器都要通过OpenSSL证书标识,提供控制应用程序和系统彼此连接的功能 用户控制:应用程序可以要求用户进行身份验证(登录凭据,证书等),并且可以进一步限制或增强用户访问权限和地址空间“视图”的能力 审计:记录用户和/或系统的活动,提供访问审计跟踪 可扩展性 OPC UA的多层架构提供了一个“面向未来”的框架。诸如新的传输协议、安全算法、编码标准或应用服务等创新技术和方法可以并入OPC UA,同时保持现有产品的兼容性。 今天的UA产品能够与未来的UA产品互联互通。

综合信息建模 OPC UA信息建模框架将数据转换为信息。通过完全面向对象的功能,即使是最复杂的多级结构也可以建模和扩展。数据类型和结构在配置文件中定义。 例如,现有的OPC Classic规范被建模为UA配置文件,也可以由其他组织扩展:

两种架构的区别

核心的区别是OPC是基于DOM/COM上,应用层最顶层;OPC UA是基于TCP IP scoket 传输层。而COM / DCOM(分布式组件对象模型)是Microsoft Windows技术,这就决定了使用OPC经典架构必须要跑windows,对于跑linux或者其他RTOS的嵌入式设备就用不了了,于是OPC UA就出现了,根据上面对OPC UA的介绍,它是被定义为跨平台,并且可以通过一些方法兼经典架构的产品。

OPC UA系列标准

核心规范

IEC 62541-1 概念和概述:给出OPC UA的概念和概述

IEC 62541-2 安全模型:描述OPC UA客户端和服务器之间安全交互模型。

IEC 62541-3 地址空间模型:描述了服务器地址空间的内容和结构。

IEC 62541-4 服务:规定了OPC UA服务器提供的服务。

IEC 62541-5 信息模型:规定了OPC UA服务器的类型及其关系。

IEC 62541-6 映射:规定了OPC UA支持的传输映射和数据编码。

IEC 62541-7 规约:规定了可用于OPC客户端和服务器的行规。

访问类型规范

IEC 62541-8 数据访问:规定了使用OPC UA进行数据访问。

IEC 62541-9 报警和条件:规定了使用OPC UA支持用于访问报警和条件。

IEC 62541-10 程序:规定了支持对程序进行访问的OPC UA。

IEC 62541-11 历史访问:规定了使用OPC UA进行历史访问,包括历史数据和历史事件。

应用规范

IEC 62541-12 发现:规定了服务器在不同情况下如何工作,以及服务器和客户端之间如何交互。

IEC 62541-13 聚合:规定了如何计算和返回聚合。

开源实现open62541

OPC UA有一个国际电工技术委员会(IEC)制定的规范文档IEC TR 62541 ,这也是为什么这个开源协议叫open62541的原因。open62541官网。open62541是使用C99和C++ 98语言的通用子集编写的OPC UA(OPC统一体系结构)的开源和免费实现。该库可用于所有主要编译器,并提供必要的工具以实现专用的OPC UA客户端和服务器,或将基于OPC UA的通信集成到现有应用程序中。open62541库是独立于平台的。所有特定于平台的功能都是通过可替换的插件实现的。为主要操作系统提供了插件实现。

open62541已获得Mozilla Public License v2.0 (MPLv2)的许可。这样就可以将open62541库与任何专有软件组合并分发。复制和分发时,仅对open62541库本身所做的更改需要在MPLv2下获得许可。插件以及服务器和客户端示例均位于公共领域(CC0许可证)。可以在任何许可下重复使用它们,而不必发布更改。open62541实现了OPC UA二进制协议栈以及客户端和服务器SDK。最终服务器二进制文件的大小可能完全低于100kb,具体取决于所选功能和信息模型的大小

通讯栈

OPC UA二进制协议 分块(分割大信息) 可交换网络层(插件),用于使用自定义网络API(例如,在嵌入式目标上) 加密通信 客户端中的异步服务请求 信息模型

支持所有OPC UA节点类型(包括方法节点) 支持在运行时添加和删除节点和引用。 支持对象和变量类型的继承和实例化(自定义构造函数/析构函数,子节点的实例化) 单个节点的访问控制 订阅

支持订阅/监视项目以获取数据更改通知 每个受监视值的资源消耗非常低(基于事件的服务器体系结构) 代码生成

支持从标准XML定义生成数据类型 支持从标准XML定义生成服务器端信息模型(节点集) 示例认识OPC UA到底能做什么?

下载源码

git clone -b 1.0 https://github.com/open62541/open62541.git open62541还有一些子模块,当enable一些特殊功能时就需要他们了,例如自定义namespace等,这个需要使用以下命令去下载(在上面下载源码后的源码根目录下操作)

git submodule update –init 编译 在ubuntu上编译,编译前有一些工具需要安装:

sudo apt-get install git build-essential gcc pkg-config cmake python

使能了一些额外的特性

sudo apt-get install cmake-curses-gui # for the ccmake graphical interface sudo apt-get install libmbedtls-dev # for encryption support sudo apt-get install check libsubunit-dev # for unit tests sudo apt-get install python-sphinx graphviz # for documentation generation sudo apt-get install python-sphinx-rtd-theme # documentation style

cd open62541 mkdir build cd build cmake .. make

select additional features ccmake .. make

build documentation make doc # html documentation make doc_pdf # pdf documentation (requires LaTeX) 编译选项 主选项 RelWithDebInfo -O2 optimization with debug symbols Release -O2 optimization without debug symbols Debug -O0 optimization with debug symbols MinSizeRel -Os optimization without debug symbols SDK特性选项 UA_ENABLE_AMALGAMATION 单文件源码文件,开启此选项会编译出open62541.c,open62541.h这两个源文件,方便和自己应用程序整合。一般不会用open62541.c而是用编译出来的库文件进行链接。

UA_ENABLE_SUBSCRIPTIONS Enable 订阅

UA_ENABLE_SUBSCRIPTIONS_EVENTS (EXPERIMENTAL) Enable 订阅和事件. This is a new feature and currently marked as EXPERIMENTAL.

UA_ENABLE_METHODCALLS Enable 方法

UA_ENABLE_MULTITHREADING 多线程支持

UA_ENABLE_DISCOVERY

UA_ENABLE_DISCOVERY_MULTICAST 服务发现

UA_ENABLE_ENCRYPTION 使能加密,当前release版本v1.0仅支持基于mbedtls的加密,如果要换为openssl需要使用v1.1-rc1版本,不过这是个最新的rc版本,可能会有一些bug。

动态库 BUILD_SHARED_LIBS 默认编译的是静态库 整合到示例中 编译运行server 这里我们需要写一个demo,需要open62541.h和libopen62541.a,它们分别位于build目录和build/bin目录,整个目录结构:

. ├── CMakeLists.txt ├── open62541 │ ├── bin │ │ └── libopen62541.a │ └── open62541.h └── src └── server.c Server来自官方例子

#include "open62541.h"

#include <signal.h>
#include <stdlib.h>

UA_Boolean running = true;

static void stopHandler(int sign) 
{
    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_SERVER, "received ctrl-c");
    running = false;
}

int main(void) 
{
    signal(SIGINT, stopHandler);
    signal(SIGTERM, stopHandler);

	//创建一个server
    UA_Server *server = UA_Server_new();

	//使用默认配置参数
    UA_ServerConfig_setDefault(UA_Server_getConfig(server));

	//启动server
    UA_StatusCode retval = UA_Server_run(server, &running);
    
    UA_Server_delete(server);
    
    return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE;
}

运行server,使用UaExpert工具当做client来和server通信。

OPC UA客户端工具

使用UaExpert UaExpert有多种版本,windows,linux,Mac版本,安装打开,按如下方式添加server信息,并连接上server

UaExpert的地址空间视图

UaExpert把OPC UA抽象的信息模型以一种文件夹层次视图展现出来。如果以面向对象的思想来理解这个图就比较好理解(不完全正确)。先忽略Views,

在Types下定义了各种分类的对象类型(类)

例如/Root/Types/ObjectTypes/BaseObjectType/ServerType

在Object目录下就是对象类型的实例(实例) /Root/Objects/Server

每一实例又是可以由一种或多种不同的实例进行组合。 将Server展开,它下面又有很多其他的对象类型的实例。这里的理解有很大的问题,它很像是多重继承,但是呢它又不是在类的定义时说明的这种多重继承关系。

再回到OPC UA标准 OPC UA系统架构 OPC UA采用客户端/服务器架构,每个系统可以包含多个客户端和服务器。一个客户端可以同时与一个或多个服务器交互,每个服务器可以与一个或多个客户端交互。一个应用可以

同时组合客户端和服务器,用于与其他服务器和客户端交互。其系统架构如图:

OPC UA系统架构 OPCUA系统架构

OPC UA客户端架构

OPC UA服务器架构

OPC UA信息模型 OPC UA信息模型就是一种描述如何将具体事物转换为可以在网络上对该事物交换信息(例如访问,控制)的方法。在阅读下面介绍时,最好用UaExpert作为client连上用open62541实现的server结合来看。

地址空间 要点:

地址空间是用来给服务器提供标准方式,以向客户端表示对象。 地址空间的实现途径是使用对象模型,通过变量和方法的对象,以及表达关系的对象。 地址空间中模型的元素被称为节点,为节点分配节点类来代表对象模型的元素。 对象及其组件在地址空间中表示为节点的集合,节点由属性描述并由引用相连。 OPC UA建模的基本在于节点和节点间的引用。 对象模型

节点模型

要点:

节点根据用途分属于不同的节点类别(NodeClass),一些表示实例(/Root/Objects),一些表示类型(/Root/Types)。 节点类依据属性和引用来定义。OPC UA规范定义的节点类称为地址空间的元数据,地址空间中每个节点都是这些节点类的实例。 节点是节点类的实例,属性和引用是节点的基本组件。 属性(Attribute)用于描述节点,不同的节点类别有不同的属性(属性集)。节点类的定义中包括属性的定义,因此属性不包括在地址空间中。 引用(Reference)表示节点间的关系。引用被定义为引用类型节点的实例,存在于地址空间中。 节点通用属性

包含引用的节点为源节点,被引用的节点称目标节点。引用的目标节点可以与源节点在同一个地址空间,也可以在另一个OPC服务器的地址空间,甚至是目标节点可以不存在。

引用模型

类型定义节点 类型定义节点是服务器提供用于对象和变量的类型定义,HasTypeDefinition引用来连接一个实例,该实例的类型定义由类型定义节点定义。 下图以变量这种节点类别(NodeClass)来举例说明

OPC UA规范用来为不同厂商的设备和程序间提供接口标准化。其一大特点在于能够公开复杂的数据和复杂的系统。

OPC UA定义一个具体对象。具象的事物包含多种信息,而信息以不同的形式统一被定义在地址空间中。地址空间是OPC服务器用来表示具体事物对象的一个标准方式。一个具体事物,如一台空调,在地址空间中被定义为对象,该对象中所包括的是空调的各种信息,信息以不同形式,存在于该对象中。如果有多台空调,逐个定义为对象是不可取的。可以通过定义一个空调的对象类型来描述空调所具有的共性,然后通过把对象设定为该对象类型,来产生多个具有该空调对象类型的实际对象,即实例化。在实例化的过程中,如何定义一个对象属于特定的对象类型,或者一个对象归属于另一个对象,则可以通过引用来表示其关系。空调被映射成了对象,使用对象类型实例化来产生多个对象,对象和对象类型都存在于地址空间中,它们有着一个共同的名字,节点。所以,可以这样理解,地址空间其实就是节点和引用(节点间关系)所存在的一个虚拟的空间(其实它是用来表示对象的标准方式)。

空调有风扇,有温度传感器,在地址空间中可以将其定义为空调对象包含的对象; 空调还有温度、风速、温度设定点(非实物,一种数学概念),可以定义为空调对象下的变量; 空调还可以开、可以关,开和关的动作可以定义为空调对象的方法。 空调也许还具有报警功能,向外发送通知,则可以定义为事件。 由此,对象、变量和方法构成了OPC UA最重要的节点类别。对象拥有变量和方法,而且可以触发事件。 标准的节点类 节点类用于定义OPC UA地址空间中的节点 地址空间中模型的元素被称为节点,为节点分配节点类来代表对象模型的元素。 节点类源于通用的基本节点类。 首先定义基本节点类,然后定义用于组织地址空间的节点类,之后再定义用于代表对象的节点类。 代表对象的节点类分为三种:用于定义实例,定义实例的类型,以及定义数据类型。 标准的节点类有如下几种:

基本节点类:能够派生所有其他节点类。 对象节点类 对象类型节点类 变量节点类:定义数据变量 变量类型节点类:定义特性 方法节点类:定义方法,方法没有类型定义,可以绑定到对象上。 引用类型节点类:定义引用。 视图节点类:定义地址空间中节点子集。 基本节点类 基本节点类的属性:

名称 使用 数据类型 NodeId M NodeId NodeClass M NodeClass BrowseName M QualifiedName DisplayName M LocalizedText Description O LocalizedText WriteMask O UInt32 UserWriteMask O UInt32 注:M代表必备项,O代表可选项

NodeId:节点ID,在服务器中唯一标识一个节点。是定位和在服务器间交换信息的最重要概念。浏览地址空间时,服务器返回NodeId,客户端在服务调用时使用NodeId来定位节点。 BrowseName:浏览名称,仅用于浏览目的,不宜用来显示节点的名称,用作浏览地址空间浏览路径的一个非本地化人员可读的名称。 DisplayName:显示名称,包含了节点的本地化名称。如果客户端响应显示节点名称给用户,宜使用该属性。 Description:描述,本地化的文本中解释节点的含义。 WriteMask:写入掩码,公开了客户端写入节点属性的可能性。该属性不考虑任何用户访问权。 UserWriteMask:考虑用户访问权时,公开的客户端写入节点属性的可能性。指定哪个节点属性可被当前连接到服务器上的用户修改。 对象节点类 对象节点类用于定义对象。而对象被用于代表系统、系统组件、现实世界的对象和软件对象。对象节点类继承了基本节点类的基本属性。

注:0…* 表示没有限制,不使用或者可以无限次用;0…1 表示最多用一次;1 表示必须提供一次

必备的EventNotifier属性表示对象是否可以被用于订阅事件或者读和写事件的历史。 HasTypeDefinition引用指向被用作对象的类型定义的对象类型。 使用HasComponent引用来定义数据变量、对象和对象的方法。 使用HasProperty引用来定义对象的特性。 HasModellingRule规定了建模规则,对象最多只能指定一个该引用。 HasModelParent引用规定了对象的父模型。 对象类型节点类 为对象提供定义,用来定义对象类型。从基本节点类继承基本属性,附加IsAbstract属性表示对象类型是否是抽象的。

变量节点类 变量代表简单或复杂的值,总是被定义为地址空间里其他节点的特性或数据变量,变量由变量类型定义。

变量类型节点类 变量总是基于变量类型,指向其变量类型的HasTypeDefinition引用。

方法节点类 用来定义方法,从基本节点类继承基本属性,不定义附加属性。使用HasProperty引用可以为方法定义特性,InputArgument和OutputArgument特性。

引用类型节点类 引用被定义为引用类型节点的实例。引用类型节点类继承了基本节点类的基本属性,其BrowseName属性在服务器中必须唯一。IsAbstract属性指示引用类型是否抽象,抽象的引用类型不能被实例化,只能用于组织。

视图节点类 视图定义地址空间里的节点的子集(即地址空间的一个摘要),全部地址空间是缺省视图。针对庞大的下层系统(的地址空间),使用视图可以只关注感兴趣的数据。视图也是地址空间中的节点。浏览视图上下文时,开始于视图节点。视图中所有节点应该是可访问的,浏览可以进行跳转。视图节点可以作为进入地址空间的附加输入项,还可以作为组织地址空间的一种结构。视图的另一个重要作用是,跟踪地址空间的不同版本,其ViewVersion特性,只要视图内容(如属于视图的引用和节点)发生改变,特性就会被更新。视图节点类定义视图。

OPC UA地址空间中的节点是用节点类来定义的。OPC UA定义了基本的节点类,能够派生其他所有的节点类。而节点类在地址空间中也是使用节点来表示。为节点分配所属的节点类,则使用引用。

作为OPC中最重要的节点类别,对象、变量和方法(这三个概念基本可以表述一切具象事务),分别涉及到节点类中的对象/对象类型节点类、变量/变量类型节点类和方法节点类。

对象的类型定义是对象节点类,如一个基本对象其TypeDefinition可以是BaseObjectType,将对象和基本对象类型联系的纽带则是HasTypeDefinition引用。

如果是一个自定义的对象类型,则该对象的类型定义是对象类型节点类,即在基本对象类型的基础上进行重写,扩充其属性。通过实例化一个对象类型节点类,则得到属性重写的对象节点。

无论是何种类型的节点,在定义时首先需要关注该节点的引用,常用的引用如:

HasTypeDefinition,指向了节点的类型定义,绑定对象或变量到其对象类型或变量类型。 HasProperty,指定变量为特性,其源节点可以使任何节点类,目标节点应为变量。 HasModellingRule,绑定建模规则到一个对象、变量或方法,如果没有建模规则,则不能正确实例化节点。 HasModelParent,公开对象、变量或方法的父模型。 HasComponent,关联对象或对象类型与其包含的对象、数据变量和方法。通过该引用,将对象的属性节点指定到对应的对象中。 Organizes,用于组织地址空间中的节点,在地址空间中构造层次结构。它的源节点是对象或视图,如果它是对象,一般定义为FolderType或其子类型之一。 使用引用指定了节点间的关系,也就建立了地址空间的整体结构。将关注点定位到特定的节点,则需要关注节点的属性。任何类型的节点,都继承自基本节点类,拥有基本节点类所具有的属性,包括:NodeId,NodeClass,BrowseName,DisplayName,WriteMask,UserWriteMask。

基本节点类向外派生,产生了对象节点、变量节点、方法节点、视图节点以及事件节点。这些节点是对应节点类(类型节点)的实例。所以节点的重点在于节点类(定义节点类型的节点)

节点类有多种,但终究还是产生于元数据(UA规范定义的节点类)。更确切的说,节点类的基本就是BaseObjectType和BaseVariableType,以及描述数据(一般作为节点的Value属性)类型的BaseDataType。想要搞定节点,重点就是这三个。

对象,变量和方法 在OPC UA中,最重要的节点类别是对象,变量和方法。

  1. 节点类别为对象 节点类别为对象的节点用于(构成)地址空间结构。

对象不包含数据,使用变量为对象公开数值。 对象可用于分组管理对象、变量或方法(变量和方法总属于一个对象)。 对象也可以是一个事件通知器(设定EventNotifier属性),客户端可以订阅事件通知器来接收事件(事件在地址空间中是不可见的,被绑定到对象)。

  1. 节点类别为变量 节点类别为变量的节点代表一个值。

值的数据类型取决于变量,类型的种类在BaseDataType中。 客户端可以对值进行读取,写入和订阅其变化。 变量节点最重要的属性是Value,它由DataType,ValueRank和ArrayDimensions属性定义,通过这三个属性,可以定义各种类型数据。

  1. 节点类别为方法 节点类别为方法的节点,代表服务器中一个由客户端调用并返回结果的方法。

方法指定客户端使用的输入参数,并返回给客户端输出参数。 输入参数和输出参数作为方法的特性存在,是数据方法的变量。 客户端使用调用服务(Call)调用方法

  1. 一个简单的例子

如图,是一个对象包含对象、变量、方法和生成事件的概念。

电机对象Motor包含Status变量,而Status变量使用HasTypeDefinition引用继承自BaseDataVariableType。客户端可以订阅该变量,从而在电机状态变化时得到通知。 Motor对象有一些配置变量,在Configuration对象下管理着。客户端可以读取或订阅这些变量。其中Torque变量代表电机的转矩,其工程单位使用HasProperty引用,被定义为TorqueUnit的特性。 Motor对象下有Start和Stop两个方法,客户端可以调用方法来操作电机。 Motor对象的EventNotifier属性,定义了电机的事件,客户可以订阅事件来掌握电机的相关动态。 当不止存在一个电机时,则需要定义一个复杂的对象类型,通过实例化对象类型来产生具有共同属性的电机对象。

那么上图中的Motor对象,则可使用HasTypeDefinition引用,指向MotorType对象类型,通过实例化,产生多个电机。此时MotorType对象类型变成了一个自定义的类型节点,但MotorType下的对象、方法和变量,仍旧还是继承自基本节点类型。

小结

在地址空间中创建节点,实际就是操作基本节点类,从对象类型节点,变量类型节点继承,并修改属性,得到对象和变量节点。然后指定节点间的引用,来指定各节点间的关系,以及组织节点在地址空间中的结构。

对于复杂的对象,可以在基本对象类型的基础上创建复杂的对象类型。与创建对象类似,复杂基本类型下包含其他基本的或自定义的类型节点。再通过实例化,产生所需的复杂对象。

一个对象节点,是具有实际意义的,它可以映射到现实中的一个设备,而对象类型,并不具有与实物的映射关系,类似于一种概念模型,可以描述设备,但不能代表设备。对象类型中设定的数值,会被继承到对象中去,作为初始值。

  1. 实例声明 如第一张图(变量,类型和方法)中所示,Motor对象下的节点,其节点类别都是对象、变量或方法,这些节点都是实例而不是类型。而第二张图(复杂对象类型及其继承)中所示的MotorType对象下的节点,是不具有真正的实际值的实例,被称为实例声明。

实例声明是命名的实体,用来定义复杂的对象类型。通常实例声明被定义为对象类型下的变量,对象和方法。更专业的定义是:实例声明是被对象类型通过正向层次引用,直接引用的节点或者通过另一个实例声明间接地引用的节点。

实例声明的特点是,相对对象类型,实例声明需要被唯一的标识。NodeId不能用于这一目的,因为实例声明通常与其在实例上的对应部分是不同的节点,NodeId也就不同。可以使用浏览名称替代,对间接引用的实例声明,则使用浏览路径。 (客户从对象类型开始,顺着层次化引用前进,检测实例声明的浏览路径。达到目标实例声明之前,添加每一个节点的浏览名称)

简言之,实例是从类型定义节点实例化来的对象,变量和方法,具有实际意义(可认为是映射到具象事物)。实例声明是类型定义节点下的对象,变量和方法,是一种不具有实际值的实例。

  1. 建模规则 类型定义(对象类型或变量类型)引用的每一个实例,如果它有建模规则,它就成了实例声明。建模规则指定了关于对象类型的实例会怎么处理该实例声明。

简言之,建模规则就是实例声明到实例过程中的实例化规则。

建模规则有三种选择,也称为建模规则的命名规则:

第一种是使实例声明是强制的,这意味着每个实例必须有一个对应此实例声明的部分,具有相同浏览路径。 第二种是可选的,每个实例可以有这样一部分,但不强求。 第三种是约束,意味着该实例声明定义了一个该类型定义实例的约束。 建模规则使用ModellingRule类型的对象表示,每个ModellingRule有一个变量NamingRule(建模规则的命名规则)。

实例声明通过HasModellingRule引用类型引用一个ModellingRule对象来指定建模规则,如下图所示:

可选的和强制的建模规则并不指定当创建类型定义的新实例时,服务器如何处理实例声明。它可以为该实例创造新的节点,或只是引用现有的节点。类型定义的实例只需要引用一个具有相同浏览路径的相同类型的实例。在服务器运行时,节点可以改变,只要保证对该类型的每一个实例,始终有一个正确的浏览名称和类型的节点存在。

如下图,Address1中的创建了AddressType中全部实例声明的实例;Address2中只创建了引用Mandatory规则的实例声明的实例。在Address3和Address4中,共用了一个City,但是在两个对象中都存在与类型定义中相同的浏览路径,以及相同类型的实例声明的实例(即City),所有都是正确的。

Address1中的两个实例都有建模规则,只要它们不被其他类型定义引用(作为其他类型定义下的实例声明),它们就不是实例声明。Address3和Address4共用的City实例,当删除Address3时,Street必须被删除,但不能删除共用的City,它仍被Address4使用着。

一般建模规则可以改变,但命名规则必须保持不变。唯一例外的是,可选的可以被替换成强制,即允许建模规则被替换成约束更为严格的

一种复杂建模规则的例子

包含两种情况:

两个不同引用连接着相同的目标和源。Measurement引用了Temperature两次,如此实例中Measurement对应的部分也必须使用那两个引用来引用到同一个节点,而不能指向两个不同节点。 有两种不同的间接路径。EngineeringUnit通过两个不同路径被引用,如此允许一个实例从Configuration引用一个节点,从Temperature引用另一个不同节点。(两次引用的浏览路径不同,是合理的方法) 全继承层次结构如下图:

一般最好使用单一继承来简化地址空间

对于复杂建模,存在多个路径引用,要考虑两方面的问题:

覆盖实例声明。在实例声明进行实例化时,子类型要具有父类型的全貌,存在多个浏览路径时要区分父类型的建模规则。 定义父级模型。共享的节点(被多个节点引用)如果不定义父级就不能明确被写入的范围,即存在一个引用节点修改导致其他引用节点都变化(如作为特性的单位),所以需要使用HasModelParent引用指定父模型。 作为约束的建模规则

存在另一种实例声明,用来定义对规则的约束,在它们的建模规则里,称有命名规则约束(NameingRuleConstraint)。

OPC UA规范中唯一定义了约束的建模规则叫做暴露内部数组(ExposesItsArray),可以被包含数组数据类型的变量类型使用,语义是数组内的每一项也可以作为一个子变量来暴露。

7.复杂类型的子类型化 复杂类型被子类型化时,父类型的基本特性需要满足,因此强制的实例声明必须在每个子类型的实例上都可用,父类型的约束在子类型都旅行,并且只能进一步加以限制(即,可选的实例声明可以在子类型变成强制的,但强制的实例声明不能在子类型变成可选的)。

复杂类型的子类型化,一般有两种方式:

每个子类型复制所有父类型的实例声明或引用相同的节点(即定义实例节点是通过把类型定义节点的所有内容复制一份)。 不复制,但客户端需要请求父类型的实例声明来得到子类型的全貌(即父类型仍旧被子类型继承,但不是复制代码到子类型。子类型不用重复父类型的实例声明,称为完全继承实例声明层次)。如下图所示,AddressType由InternationalAddressType进行子类型化,继承了父类型的全部实例声明,并增加了实例声明Country,在右侧是其全继承的实例声明层次结构。

另外,实例完全继承的实例声明,所有实例声明必须有唯一的浏览路径(即子类型不能为不同实例声明使用同一浏览路径),不过子类型能够覆盖父类型现有的实例声明(如更严格的建模规则)

父级概念 ModelParent 一个节点可能被多个节点共享,例如一个静态类变量包含了所有实例相同的值。客户只是读取该节点数据,不关心节点是不是共享的。但是当客户准备变更节点时,客户端最好知道节点在什么范围内可以被改变。(否则其他所有引用了该节点的节点都会发生改变,而这些改变对其他节点来说是不应发生的)

OPC UA的HasModelParent引用从被包含的节点指向定义其范围的父节点,用于指示客户更改的范围,这样就不会影响其他实例。

上图左边,两个Device实例共享一个特性Icon(指向同一个节点),如果为其中一个实例对象如Device1更改图标,这会影响到类型定义以及其他实例对象如Device2.

为了避免这种问题,可以创建一个新的Icon,如在上图右边为Device2引用了新图标,这样就可以控制变化只发生在Device2中,当修改Device2下的Icon特性时,不会影响Device1.

OPC UA聚合服务

OPC服务器的激增,分布在制造工厂的各个点,并且可能具有地理分布。出于各种目的使用此数据的OPC客户端可能必须与每台服务器建立单独的连接,这通常会导致高昂的许可证成本和维护难题。顾名思义,聚合服务器从各种 OPC 服务器聚合 OPC 数据中心,并将数据作为单个端点公开给最终客户端。聚合服务器还可以承担其他功能来对其正在收集的数据进行计算和优化,从而提高最终客户端的性能。

数据聚合是将来自不同 OPC 服务器(和其他数据源)的数据汇集到单个数据源中,以便一个或多个 OPC 客户端(或其他客户端)可以通过单个通用接口访问此数据。越来越多的设备中都包含了用于外部访问的服务器,例如PLC ,边缘控制器,甚至是传感器中都可能包含一个OPCUA 的服务器。可以通过内嵌了OPC UA 的客户端访问系统中所有服务器。当系统中的设备很多时,这种访问是复杂的。OPCUA 客户端软件访问服务器的需要:

发现服务器,获取服务器的网络地址和端口

获取服务器的信息模型。

根据信息模型来读写数据

订阅,告警事件的处理

与此同时,多个客户端软件同时访问服务器时,将会占用网络带宽和前端处理器的算力。下图是增加了聚合服务器的前后变化。

使用聚合服务器的模式,如今,大多数项目涉及的系统比使用单个PLC进行HMI读写更复杂。因此,大多数项目都涉及配置与多个数据源和设备的单独客户端连接。数据聚合支持从多个源将数据汇集在一起,并将其作为单个全面的数据集提供给客户端应用程序。

使用聚合服务器的优点:

降低了OPCUA 客户端的负荷 使用单一的通信连接访问多个数据源 方便地访问和控制多个服务器 使用单一的地址空间。 数据聚合有助于确保将通用且一致的更新速率传递到其他 OPC 服务器和数据源,避免过程网络上不必要的流量。 如果客户端应用程序需要每个服务器连接的许可证,则通过单个客户端连接访问数据也可以节省资金。 从所有各种数据源收集数据,并将其作为共享的通用数据集呈现给用户。 客户端程序永远不需要知道哪个程序发起了数据才能读取和写入数据,因为有一个公共位置可以访问它。 聚合服务器被称为系统的系统,服务器的服务器。

系统架构 聚合服务器的模型

系统架构

OPC UA聚合服务器可能在Windows上运行,而OPC UA嵌入式服务器可能在VxWorks上运行。OPC UA提供独立于平台和操作系统的安全数据交换的能力对于将不同的系统融合到一个安全系统中至关重要。由此产生的系统链,从低级设备到SCADA系统再到企业应用程序,与OPC UA集成以形成系统系统。

聚合技术 聚合服务器的基本架构

被聚合的服务器(Aggregated server)它们是自动控制系统的实体,比如PLC ,现场设备中的服务器。可以是子系统中的一组实体。

聚合服务器(Aggregation server)聚合服务器是聚合架构的核心。它通过OPC 服务连接所以的服务器。聚合它们的类型,实例和结构信息。

信息模型

为了实现聚合服务器,需要一些扩展的OPCUA 信息模型。扩展模型包括两部分:

聚合服务器的信息模型

OpcUaServerType是OpcUa 的模型,它包含了一个变量ServerUrl ,也就是服务器的地址(Url)。

AggregatedServerType是OpcUaServerType的继承,包含了ServerType.

ServerType.包含了服务器的详细信息。比如诊断状态diagnostic status.

AvailableServerSetType 包含了所有聚合的服务器

被聚合服务器的扩展信息模型

OPCUA 聚合服务器的实现 服务器聚合

    服务器聚合是发现和收集所有被聚合服务器的信息,这样两者方式

文件描述方式

    将所有的服务器Url 放置在ServerUris.xml文件中

自动发现方式

    使用OPCUA 的discovery方式,一种是广播方式,一种是建立一个本地发现服务器Local Discovery Server。所有的服务器都需要在LDS中注册,Client 通过访问LDS 来获取服务器的Url

读取数据

    每当聚合服务器请求读取是,内部的节点管理器将会通过字典查询,将读请求转向被聚合的服务器。而被聚合服务器中读取的响应返回给外部的OPCUA 客户端。

写入数据

     与读操作类似,直接将写请求前向发送给相应的被聚合服务器。

订阅和解除订阅

    也同样是中继的方式实现。

现有的项目和产品

OPC Foundation 的UA -.NETStandard -samples 中提供了一个聚合服务的实例:

https://github.com/OPCFoundation/UA-.NETStandard-Samples

商业化产品

softwaretoolbox公司的Top Server

Softing 公司的安全集成服务器(Secure Integration Server )

Prosys 公司的OPC UA Historian

从国外的产品来看,聚合服务器能够结合历史数据库,Web 服务,MQTT 等功能和通信协议,实现功能强大的服务器。

每一台PLC 通过modbus TCP与与一个OPC UA 网关相连接。网关内置OPCUA 服务器,将PLC的modbus 数据转变成为OPC UA 信息模型。

所有的OPCUA Server 聚合到聚合服务器。在HMI的视角下,聚合服务器保存了一个大的OPC UA 模型。

聚合服务器中可以带有一个历史数据库。

MBSE

“MBSE”是“基于模型的系统工程”的英文“Model-Based Systems Engineering”的首字母缩写。从字面意思能看出MBSE这个概念有三个核心的概念“系统”、“系统工程”、“基于模型”。

“基于模型的系统工程”(MBSE):“支持以概念设计阶段开始,并持续贯穿于开发和后期的生命周期阶段的系统需求、设计、分析、验证和确认活动的正规化建模应用。”用通俗一点语言解释的话,MBSE就是开发一个产品、平台的时候,把产品、平台研发中涉及到的各个方面用“计算机数据模型”方式建立起来,形成一个统一的“系统模型”。

“系统”(System)

“系统”(System):系统是相互作用的多个部分组成的为完成特定目的的一个整体。从这个基本概念看,这个世界上很多东西都可以称为“系统”。但是工程技术人员的研究领域中,这个“系统”主要是指软、硬件组成的产品、平台等。这个“系统”也包括其中的流程、人员、信息、技术和设施等。至于纯“人”的社会系统则不是这个技术研究的范围。

SysML

SysML,全称Systems Modeling Language,即系统建模语言,它是一种表述(Specifying)、分析、设计以及验证复杂系统的通用图形化建模语言,复杂系统可能包括软件、硬件、信息、人员、过程和设备等其他系统元素。

SysML是一种图形化的系统建模语言。

SysML与UML的关系

UML,即“Unified Modeling Language”,又称为统一建模语言,是一种图形化的建模语言,主要用于对软件系统进行建模。同时,用户可以利用UML提供的扩展机制对UML进行扩展,以满足特定领域的建模需求。

系统工程比软件领域覆盖范围更广,除了可能包含的软件组件,可能还包括硬件、人员、设施、过程等更多的系统元素。系统工程师基于UML进行建模工作,并不能很好的描述系统。也就是说在系统工程领域,UML存在“盲点”,基于当前已有的UML元素不足以对复杂系统进行充分的、有效的表达。因此,系统工程领域在寻求一种更为广泛的建模语言。

“UML for Systems Engineering RFP”有OMG和INCOSE联合开发,并由OMG于2003年3月发布。该RFP文档中描述了扩展UML以支持系统工程的需求。SysML规范正是为了满足这些需求,由不同的工具供应商、终端用户、学术界及政府代表联合开发制定,2006年7月6日被OMG采纳,并于2007年发布了OMG SysML V1.0版。

SysML和UML间存在交集,即SysML语言中的部分图是和UML中的相应图是一致的,例如用例图。同时,SysML也有基于UML扩展而来的图,例如活动图。另外,还有一部分图是SysML所特有的,这些图与UML间没有关系,例如需求图。

SysML建模语言中的图模型如下图所示,可以概括为“3类9种”。SysML可以分为行为图、需求图和结构图。三类图又具体化为共计9种模型图。同时,SysML模型图与UML图存在交互。SysML和UML共有的图,包括序列图、用例图、状态机图、包图,SysML基于UML扩展而来的图,包括活动图、模块定义图、内部模块图。SysML语言所特有的图,包括需求图和参数图。

用例图

一种黑盒视图,是系统功能的高层描述,用于表达系统执行的用例以及引起系统执行行为的参与者。

模块定义图

一种结构图,与内部模块图及参数图互补,用于描述系统的层次以及系统/组件的分类。

内部模块图

一种结构图,与模块定义图及参数图互补,通过组件(Parts)、端口、连接器来用于描述系统模块的内部结构。

包图

一种结构图,以包的形式组织模型间的层级关系。

参数图

SysML特有的图,与模块定义图及参数图互补,用于说明系统的约束。

活动图

一种行为图,主要关注控制流程,以及输入转化为输出的过程。

序列图

一种行为图,主要关注并精确描述系统内部不同模块间的交互,

状态机图

一种行为图,主要关注系统内部模块的一系列状态以及在事件触发下的不同状态间的转换。

需求图

用于表述文字化的需求、需求间的关系,以及与之存在满足、验证等关系的其他模型元素。

SysML还包含了分配关系的表述,包括功能到组件的分配、软件到硬件的分配以及逻辑到物理的分配

SysML的通用图形化表述

SysML的通用图形表述如下图所示,每个SysML图都有图外框、头部以及内容区域三部分组成。图外框是指图的外部黑色实线,在SysML中外框不能省略。内容区域是存放SysML模型元素的地方。头部位于图的左上角,对模型图的类型、名称、模型元素类型及名称进行概要性描述。

图的头部是最为重要的图概念,一般包括四个信息:图类型、模型元素类型、模型元素名称、图名称。

图的类型

图类型的命名只能在SysML定义的图类型缩写集合中选择,用户不能随意命名。SysML中定义的图类型的缩写集合简称如下所示:

模型元素类型

SysML定义了模型元素类型集合,这些类型的模型元素在图中是不能任意出现的,每种SysML图中所能表达的模型元素是有规则限制的,参考如下的模型图和模型元素匹配表。关于元素类型所表达的含义在后续系列文章中详细说明。

模型元素名称

用户自定义模型元素的名称

图名称

用户自定义图的名称

SysML建模工具

我们说,SysML是一种图形化的建模语言,OMG组织发布了针对SysML的建模语言描述规范,其详细定义的SysML的语义。支持SysML的建模工具有很多,如Rhapsody,这是一款来自IBM Rational 的商业化工具。

总结

SysML是一种图形化建模语言,用于对复杂系统进行建模;

SysML基于UML 2,并对其进行了扩展;

SysML不是建模的方法论,也不是建模工具;

“系统工程”(SE,Systems Engineering)

“系统工程”(SE,Systems Engineering):系统工程是一种使系统能够成功实现的跨学科的方法和手段。“系统工程”工作包括:在“系统”开发周期的早期阶段定义客户需求及功能,并文档化。然后进行设计综合和系统确认。同时考虑整个系统各方面的问题,包括系统运行、成本、进度、性能、培训、支持、试验、制造和销毁等。这里的“系统工程”简单说指的是产品研发过程的技术方法。

MBSE有什么用?

(1)改善了开发系统的利益相关者(客户、项目管理人员、系统工程师、软硬件工程师、测试人员和各专业工程学科的人员)之间的沟通。

因为MBSE是基于标准的建模语言建立的规范化说明,相当于大家交流的语言是统一的。而基于自然语言的“文档”容易在不同专业的人员之间产生歧义。而且MBSE的这个“模型化说明”在各类专业人员之间传递时候是可以通过计算机软件转换为各自专业的语言、数据,而自然语言是很难实现这个转换的。但是,这要求大家要新学习一门通用的“系统建模语言”。如果大家都不懂这门语言的话,只会产生和上面的观点相反的结果。

(2)通过使系统模型能够被从多个侧面进行观察,以及提供变更影响分析的能力, 提高了管理复杂系统的能力。

这个是说系统的同一套数据模型,可以从不同的专业角度进行浏览和分析。而且由于系统模型数据之间有相互关联关系,如果那个地方更改,可以通过关系查询到所有影响到的地方。这个对于非结构化的文档来说,是做不到,或者很麻烦。即使文档也能提供从各个专业角度的说明,但是这些文档数据之间没有关联,可以说是基于各自多套数据来源的,而不是唯一的一套数据模型。这个观点也是在说“MBSE提高了开发复杂系统的能力”。

(3)通过提供可评估一致性、正确性和完善性的无歧义的且精确的系统模型,提升了产品质量。

产品的质量问题有很多是设计问题,而这些设计问题并不简简单单是设计人员的水平问题、责任心问题,而更多是复杂过程本身不可避免的会出现的质量问题。想让所有人不犯错是不可能的,而只能是通过技术手段使人少犯错。MBSE是一种使人少犯错的技术手段,因为MBSE建立的模型可以通过计算机软件自动的检查错误。相比之下传统的文档容易隐藏错误,一个笔误可能造成严重损失。

(4)通过以更加标准化的方式捕获信息并高效地利用模型驱动方法固有的内置抽象机制,增强知识捕获及信息的复用。这会导致缩短开发周期和更低的维护成本,以改进设计。

这个观点是说系统模型数据更容易复用,比文档手段的“复制、粘贴、替换”文本效率要高。模型数据的复用,可以采取“引用”方式。而且可以建立共用的模型库,提高知识的复用率。

(5)通过提供概念清晰且无歧义的表达,提升教授与学习系统工程基本原理的能力。学会了MBSE,就掌握了系统工程的方法。

建模

我们一生中都已经见到,使用或创建了模型,从代表汽车或飞机的玩具到描述和解释物理现象(例如热力学或重力)的数学公式。尽管这些模型本质上有所不同,但这些模型都将思想与现实联系起来,并为该目的提供了足够的抽象。在对系统进行建模时,系统工程师会决定生产系统中最重要的方面,例如结构,能量或物质流,内部通信或安全性。这些方面将成为模型的焦点。建建模活动的最高目标是对模型所关注的突出方面进行建模,尽可能接近真实系统。

建模使用四种工具:

语言

建模语言是一种通用术语,用于清晰地传达模型所捕获的抽象概念。建模语言可以是正式的,具有严格的语法和规则。现有的系统建模语言有几种,包括通用语言,例如系统建模语言(SysML)和统一建模语言(UML),以及专用语言,例如体系结构分析设计语言(AADL)。虽然SysML和UML不是数学形式的,但是有效的模型需要遵循实体和关系的建模语言的规则。SysML对于元素之间的关系和连接具有严格的语法和规则,这有助于避免歧义。如果模型构建良好,则可以动态模拟几种类型的标准SysML图,并且至少可以对一种SysML图进行数学模拟。UML是半正式的;SysML与UML类似,但更为正式。

结构体

模型必须具有结构,一个结构良好的模型可以使模型可以理解、可用和可维护,这对于复杂系统来说尤为重要。模型的目的是向利益相关者展示所提出的设计满足系统的需求。模型应该以一种易于理解的方式演示如何构建系统才能成功。可视化是保证理解性的关键途径,将抽象的想法形象化,可以使人们获得“看到”系统所需的想象力的飞跃。

论证

演示

建模领域

即使MBSE并没有规定任何特定的过程,但基本上任何选择的过程都应涵盖四个系统工程领域:

需求/能力

行为

架构/结构

验证与确认

Defense Acquisition University(DAU),NASA和Avi Sharma等人对这些领域的描述进行了详细记录和讨论。MBSE的不同之处在于,这些基本的系统工程领域不是作为一组文档定义的,而是在模型本身中定义的,即使用建模语言以正式的方式定义。该模型代表了有关如何设计系统才能使其成功的争论。

MBSE还促进了利益相关者,系统工程师和开发人员之间的沟通。由于系统设计是在集成建模环境中执行的,因此所有系统工程师,管理人员和其他利益相关者都可以在需要时尽快访问生成的信息,例如需求,行为流和体系结构。

最常见的建模活动是创建表示系统某些部分的图-视图。这种活动非常常见,以至于有些工程师错误地将创建视图等同于创建模型。这种错误非常普遍,甚至有一个新兴的术语:僵尸模型。这个术语指的是一个模型,它充满了图表,但是元素之间没有相互联系和依赖关系。

任何即将开始建模的人都必须意识到,一组视图不是模型。尽管一个视图甚至一组视图可以代表系统设计的一部分,并且对于记录和传达系统的某些方面很有用,但视图只是真实系统模型的各个方面或部分。真实的模型可以产生许多视图和矩阵,执行分析和运行仿真。

系统建模语言

虽然像SysML这样的系统建模语言是一种正式的语法语言,但它仍然基于人类语言的元素。MBSE语言的术语仅映射到词性:

名词:参与者,角色,组件,需求

动词:操作活动,功能,用例

形容词:属性

副词:关系,需求线,交换,接口

MBSE模型的四个象限

现在,我已经描述了模型语言和领域的基础知识,我将描述建模方法。模型必须描述设计的系统要解决的问题和设计的系统本身(解决方案)。模型必须具有这两个方面,即问题方面和解决方案方面。这些有时称为操作和系统角度。

操作的观点是用户,操作员和业务人员的观点。它应该代表业务流程,目标,组织结构,用例和信息流。模型的操作端可以包含“世界现状”和未来状态的描述。

系统的观点是解决方案,系统的体系结构解决了在模型的操作端提出的问题,描述了系统的行为、结构、组件之间的数据流以及功能的分配,描述了系统将如何在现实世界中部署。它可以包含解决方案的选择和分析。

这些观点中的每一个都有逻辑和物理两个部分。分离模型的逻辑和物理方面是管理系统复杂性的一种方法。模型的逻辑部分通常不会随时间变化,而物理变化通常是由技术进步引发的。

如果模型构建正确,则所有四个象限都应紧密连接,如下图1所示。问题的陈述应该追溯到解决方案的元素,以及分配给物理结构的逻辑元素。模型的用户应该能够清楚地看到高层概念和组件如何分解为较低层的功能。用户应该能够执行系统分析,创建依赖关系矩阵,运行模拟并为每个利益相关者提供系统视图。如果系统的物理部分必须更改,则模型的逻辑端将准确确定将影响哪些功能。如果必须更改需求或业务流程,则该模型将轻松发现对解决方案的影响。

方法

OOSEM方法

OOSEM是一种自顶向下、场景驱动建模过程,它使用SysML(系统建模语言,Systems Modeling Language)语言作为建模语言,支持系统的分析、定义、设计、和验证。该过程使用面向对象的概念和其它建模方法来构建灵活和可扩展的系统,使其能够适应技术的不断进化和需求的变更。

OOSEM过程的主要活动包括:

(1) 分析利益相关者的需求。这个工作简单说就是分析使用产品的用户的需求,就是用户最初始的想法是啥,想怎么用这个产品、需要产品有那些功能。了解用户当前情况是什么、有什么局限,未来可以有哪些提升。

(2) 分析系统需求。简单说就是产品本身应该提供那些功能,用户是如何使用产品的。在这个过程中要推导出产品的功能需求、接口需求、数据需求和性能需求。

(3) 定义逻辑架构。先将系统分解为多个逻辑组件,这些逻辑组件是暂且虚拟的一个部件,它能够满足产品的各项需求。但是具体用什么硬件或软件的方案来实现它,在下一步的物理架构设计中实现。将系统方案分为逻辑架构和物理架构两个层级,有利于减少需求和技术变化对设计的影响。

(4) 综合候选的物理架构。可能建立几个和逻辑元素相对应的物理架构,以进行对比分析,确定哪一个最合适。物理架构的元素是具体产品部件,包括软件和硬件。前面逻辑架构中的功能,有些是可以用软件来实现,也可以用硬件来实现,或者用不同型号规格的硬件来实现。

(5) 优化并评价备选方案。对上述备选的物理架构方案进行优选,利用模型的数据,进行性能、可靠性、生命周期成本、人员和其它专业工程相关的模型参数的分析,对备选方案进行优化,确定一个最终的方案。

(6) 管理需求的可追踪性。为保证需求、架构、设计、分析与验证元素之间的可追踪性,系统模型应该始终保持需求和其它元素的关系。设计过程就是一个不断填补空白需求的实现过程。当需求变动时,利用建立的需求实现关系,追踪和评估需求变更对系统设计、分析和验证元素的影响,并及时更改系统方案,使其和需求保持一致。

(7) 确认和验证系统。该活动验证系统设计满足其需求,并确认哪些需求满足利益相关者的需求。开发验证计划、程序和方法。

Harmony-SE

Harmony-SE本来是开发嵌入式软件的系统工程方法,逐渐成为通用的MBSE方法。这个方法的详细说明,可以参考《基于模型的系统工程最佳实践》这本书,是经典的Harmony-SE方法论说明。这里简单给出这种方法的流程图如下:

3.3 MagicGrid方法

MagicGid方法将MBSE过程各阶段工作流程放在一个表格中,这个表格典型内容如下图所示:

在这个表格中,采取从左到右、从上到下的顺序逐步开展MBSE的工作。通过建立各阶段的模型之间的关系,可以统计需求覆盖情况,以及追踪模型变动的影响。有关此方法的详细说明,笔者将会在“智睿思维MBSE”公众号发布一篇详细的介绍文章,敬请关注。此方法已在”智睿思维MBSES”1.5版本中的实现,可以试用。

MES

MES定义

MESA International(生产执行系统国际协会) 将MES定义为:”处理传递信息,使得从定单到成品这一系列生产活动得以优化的系统。生产过程中,MES通过使用当前正确的实时数据,对这些生产活动进行管理,给予响应,并提供报告。对于变化的条件做出迅速反应,并致力于减少无增值生产活动,这一切都推动着有效的生产操作和工艺加工。”

智能制造四大阶段

标准化

标准化是智能制造的前提,基础是对业务流程进行量化,每个环节的数据都可以采集,然后通过数据分析,发现生产中存在的问题、分析问题、解决问题,标准化为行业自动化奠定了基础。

自动化

自动化,这里单指生产制造自动化。生产制造自动化又分为单机自动化、单线生产自动化、工厂自动化。

信息化

信息化和互联化具有必然的因果关系,没有互联化就没有信息化,智能制造的每个阶段,都是要实现特定的目标。比如通过精益生产实现标准化,通过系统集成实现自动化,通过互联网技术实现信息化,通过大数据、云平台、人工智能实现智能化。

智能化

智能化就是更高一级的自动化,从人类体力劳动上升到脑力劳动的自动化。这一切实现的基础就是通过互联网实现全面信息化后,产生海量大数据,然后通过云计算等手段,模拟人类行动过程,将其应用到产业中去。智能制造可以拆分为智能感知、智能检测、智能管理等业务模块。

目标

系统目标

整合可用资源:联接企业的计划层和操作层,整合信息孤岛

优化生产流程:通过项目实施来梳理、优化现行生产业务流程

完善管理手段:将制造过程中的生产计划、进度安排、物料流动、物料跟踪、过程控制、过程监视、质量管理、设备维护等活动全面集成起来,有机协调这些活动的执行,使制造过程朝着高效方向发展;

掌握生产现状:让生产现场透明化;

提供评价依据:收集、整理生产过程中的各类数据,为管理人员提供评价依据;

指出改进方向:提供科学、灵活的分析评价工具,以指出改进生产过程的方向

管理目标

生产执行系统项目实施,是实现生产过程中的组织、管理和决策的最优化,最终达到企业整体水平的最优化,使从计划、生产、调度、资源分配等管理更加科学、准确。

实现生产过程的快速反应与敏捷、精确制造,最终与业务系统、生产自动化系统集成,实现全厂供应链的快速反应。

实现工厂自动化连续化均衡生产。

实现生产过程中的产品生产交货期的准确预估,最终与业务系统、生产自动化系统集成,实现对客户的产品交货期的准确预估。

实现产品质量以及生产过程的可追溯性。

实现生产过程产量、消耗、质量、设备状况、产品跟踪和技术性分析等的全面动态可视和可控。

实现生产过程中的实时事务处理功能以及统计分析功能。

建立预警指标,提供预警功能(包括设备、质量、物流等);提供调度方案供调度人员决策

技术目标

清晰划分企业运营管理与企业生产执行作业两个不同层次的功能模块,二者相互独立而又有机集成。

紧密集成原本独立的系统,消除信息孤岛,保证数据的一致性,提高数据的可复用性,实现各职能部门之间的数据共享与流通

应用目标

生产实时指挥调度:使生产过程数字化、透明化;提高异常事件的快速处理能力;保障生产的连续性、可控性;快速响应和处理紧急插单。

全程设备管理:实现设备基础管理程序化;提高设备的保障能力;加强对人的行为的管理,提高工作质量,提高员工管理考评的科学性、客观性;减少维修时间,提高维保技能;不断提高设备的生产效率。

全面质量管理:为生产过程严格执行质量标准和工艺标准提供保障;加快质量异常事件的处理速度;加强在线质量控制;实现产品质量的持续改进。

全程生产追踪:实现产品质量、物料、人员等信息的可回溯性。

全面信息集成:彻底消除制造各环节间的信息孤岛,实现计划层、执行层及控制层之间无缝的衔接。

生产数据管理:提高生产管理效率;为决策提供全面准确的数据依据

业务模型

以设备为基础

以计划为导向

撑控生产过程

敏捷指挥调度

强化质量控制

制造成本透明

提升管控能力

管理效益增值

MES主要模块

资源分配和状态管理(Resource Allocation and Status)

这个模块管理机床、工具、人员、物料、其它设备以及其它生产实体(例如进行加工必须准备的工艺文件、数控加工程序等文档资料),用以保证生产的正常进行。它还要提供资源使用情况的历史记录,确保设备能够正确安装和运转,同时提供资源的实时状态信息。对这些资源的管理,还包括为满足生产计划的要求对其所作的预定和调度。

工序详细调度(Operations/Detail Scheduling)

这种调度,是基于有限能力的调度并通过考虑生产中的交错、重叠和并行操作来准确计算出设备上下料和调整时间。

在编制生产作业计划中,该模块提供与指定生产单元相关的优先级(Priorities)、属性(Attributes)、特征(Characteristics)以及处方(Recipes,此为可选项)的作业排序功能。其目标是通过良好的作业顺序最大限度减少生产过程中的准备时间。

生产单元分配(Dispatching Production Units)

这一模块以作业、订单、批量、成批和工作单等形式管理生产单元间的工作流。当车间有事件发生时,要提供一定顺序的调度信息并按此进行相关的实时操作。生产单元分配模块,能够调整车间已制订的生产进度,对返修品和废品进行处理,用缓冲管理的方法控制任意位置的在制品数量。

文档控制(Document Control)

此模块控制、管理并传递与生产单元有关的信息文档,包括工作指令、配方、工程图纸、标准工艺规程、零件的数控加工程序、批量加工记录、工程更改通知以及各种转换操作间的通讯记录,并提供了信息编辑功能。

文档控制模块将各种指令下达给操作层,包括向操作者提供操作数据或向设备控制层提供生产配方。此外,它还包括对其它重要数据(例如与环境、健康和安全制度有关的数据以及ISO信息)的控制与完整性维护。当然,还有存储历史数据功能。

数据采集(Data Collection/Acquisition)

该功能通过数据采集接口来获取并更新与生产管理功能相关的各种数据和参数,包括产品跟踪、维护产品历史记录以及其它参数。这些现场数据,可以从车间手工方式录入或由各种自动方式获取。数据采集的时间间隔差别很大,有时可达到分钟一级的精度。

过程管理(Process Management)

该模块监控生产过程、自动纠正生产中的错误并向用户提供决策支持以提高生产效率。这些活动,可能是针对一些比较底层的操作,它们主要集中在被监视和被控制的机器上,需要连续跟踪生产操作流程。

过程管理模块还应包括报警功能,使车间人员能够及时察觉到出现了超出允许误差的加工过程。通过数据采集接口,过程管理可以实现智能设备与制造执行系统之间的数据交换。

MES的边界定义

根据ISA-95标准,MES重点关注以下四类业务:

生产作业管理

维护作业管理

质量作业管理

库存作业管理

MES系统功能划分和边界定义应遵循以下原则:

安全性原则:利用完善的安全策略保证信息的安全可靠。

先进性原则:既要着眼于目前系统的需求,还要面向未来的发展。

可靠性原则:保证系统的高可用性。

实用性及可扩展性原则:在下面的条件发生变化时,系统可以平滑升级,达到好的可扩展性。

可维护性、界面及易用性原则:用户操作界面要求友好透明。

可建设性原则:建设资金和建设周期的合理性。

系统集成性:系统设计应与现有的信息化系统及外部系统有良好的集成

ERP

阶段

MIS(Management Information System) 系统阶段:企业的信息管理系统主要是记录大量原始数据、支持查询、汇总等方面的工作。 MRP(Material Require Planning)阶段:企业的信息管理系统对产品构成进行管理,借助计算机的运算能力及系统对客户订单,在库物料,产品构成的管理能力,实现依据客户订单,按照产品结构清单展开并计算物料需求计划。实现减少库存,优化库存的管理目标。 MRP II(Manufacture Resource Planning)阶段:在MRP管理系统的基础上,系统增加了对企业生产中心、加工工时、生产能力等方面的管理,以实现计算机进行生产和排产的功能,同时也将财务的功能囊括进来,在企业中形成以计算机为核心的闭环管理系统,这种管理系统已能动态监察到产、供、销的全部生产过程。 ERP(Enterprise Resource Planning)阶段:进入ERP阶段后,以计算机为核心的企业级的管理系统更为成熟,系统增加了包括财务预测、生产能力、调整资源调度等方面的功能。配合企业实现JIT管理全面、质量管理和生产资源调度管理及辅助决策的功能。成为企业进行生产管理及决策的平台工具。

架构

ERP(ERP (Enterprise Resource Planning))

WMS(仓储管理系统(Warehouse Management System简称WMS))

SCM( Software configuration management SCM)

BOM(Bill of Materials,简称BOM)

PLM(产品生命周期管理(Product Lifecycle Management,PLM)),其他主要就是ERP一类。

ERP:销售,采购,人力,质量,物料,库存,物流,财务 数据仓库,决策支持,客户关系管理,供应链管理

I/O接口

I/O接口是一电子电路(以IC芯片或接口板形式出现 ),其内有若干专用寄存器和相应的控制逻辑电路构成。它是CPU和I/O设备之间交换信息的媒介和桥梁。CPU与外部设备、存储器的连接和数据交换都需要通过接口设备来实现,前者被称为I/O接口,而后者则被称为存储器接口。存储器通常在CPU的同步控制下工作,接口电路比较简单;而I/O设备品种繁多,其相应的接口电路也各不相同,因此,习惯上说到接口只是指I/O接口。

基本功能

(1)进行端口地址译码设备选择。

(2)向CPU提供I/O设备的状态信息和进行命令译码。

(3)进行定时和相应时序控制。

(4)对传送数据提供缓冲,以消除计算机与外设在“定时”或数据处理速度上的差异。

(5)提供计算机与外设间有关信息格式的相容性变换。提供有关电气的适配

(6)还可以中断方式实现CPU与外设之间信息的交换。

控制方式

(1)程序查询方式

这种方式下,CPU通过I/O指令询问指定外设当前的状态,如果外设准备就绪,则进行数据的输入或输出,否则CPU等待,循环查询。

这种方式的优点是结构简单,只需要少量的硬件电路即可,缺点是由于CPU的速度远远高于外设,因此通常处于等待状态,工作效率很低

(2)中断处理方式

在这种方式下,CPU不再被动等待,而是可以执行其他程序,一旦外设为数据交换准备就绪,可以向CPU提出服务请求,CPU如果响应该请求,便暂时停止当前程序的执行,转去执行与该请求对应的服务程序,完成后,再继续执行原来被中断的程序。

中断处理方式的优点是显而易见的,它不但为CPU省去了查询外设状态和等待外设就绪所花费的时间,提高了CPU的工作效率,还满足了外设的实时要求。但需要为每个I/O设备分配一个中断请求号和相应的中断服务程序,此外还需要一个中断控制器(I/O接口芯片)管理I/O设备提出的中断请求,例如设置中断屏蔽、中断请求优先级等。

此外,中断处理方式的缺点是每传送一个字符都要进行中断,启动中断控制器,还要保留和恢复现场以便能继续原程序的执行,花费的工作量很大,这样如果需要大量数据交换,系统的性能会很低。

(3)DMA(直接存储器存取)传送方式

DMA最明显的一个特点是它不是用软件而是采用一个专门的控制器来控制内存与外设之间的数据交流,无须CPU介入,大大提高CPU的工作效率。

在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制 权,CPU如果允许,则将控制权交出,因此,在数据交换时,总线控制权由DMA控制器掌握,在传输结束后,DMA控制器将总线控制权交还给CPU。

(4)无条件传送方式

(5)I/O通道方式

(6)I/O处理机方式

现场接口分类

基于控制网络的这些特点,其中的各种接口必须保证满足控制网络的要求。目前工业现场的接口种类有以下四类

(1)平台相关性通用协议:OPC/ DDE

OPC 是为了不同供应厂商的设备和应用程序之间的软件接口标准化,使其间的数据交换更加简单化的目的而提出的。作为结果,从而可以向用户提供不依靠于特定开发语言和开发环境的可以自由组合使用的过程控制软件组件产品。

(2)平台无关性通讯协议:ModBus、ProfiBus

Modbus 协议是应用于电子控制器上的一种通用语言。 通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。Profibus,是一种国际化、开放式、不依赖于设备生产商的现场总线标准。 Profibus 传送速度可在 9.6kbaud~12Mbaud 范围内选择且当总线系统启动时, 所有连接到总线上的装置应该被设成相同的速度。广泛适用于制造业自动化、流程工业自动化和楼宇、交通电力等其他领域自动化。Profibus是一种用于工厂自动化车间级监控和现场设备层数据通信与控制的现场总线技术。

(3)平台无关专有协议:大部分DCS协议、工业以太网协议

(4)特殊协议:编程口、打印口等特殊方式取得的协议

工业传输通讯的协议种类较多主要有历史遗留和人为垄断两方面的原因。虽然目前还有大量的现场总线标准,但没有任何一种标准比工业以太网更具生命力[2]。

什么叫数字孪生

数字孪生是一种技术概念,它通过集成物理模型、传感器数据、运行历史等信息,在虚拟空间中创建物理实体或系统的数字化副本。12345678 这个数字化副本可以模拟、验证、预测和控制原物理系统的行为,覆盖其全生命周期。数字孪体技术的应用范围广泛,包括产品设计、制造、医学分析、工程建设等多个领域。它们通过实时数据传输和高级分析技术,实现物理世界和数字世界之间的紧密结合和相互优化。

数字孪生是一种超越现实的概念,利用物理模型、传感器更新、运行历史等数据,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程。这可以被视为一个或多个重要的、彼此依赖的装备系统的数字映射系统。 数字孪生集成了建模与仿真、虚拟现实、物联网、云边协同以及人工智能等技术,通过实测、仿真和数据分析来实时感知、诊断、预测物理实体对象的状态,通过指令来调控物理实体对象的行为,通过相关数字模型间的相互学习来进化自身,合理有效地调度资源或对相关设备进行维护。 在产业链上,数字孪生可以划分为“基础支撑”、“数据互动”、“模型构建”、“仿真分析”、“共性应用”和“行业应用”六大核心模块,覆盖了从设备、数据到行业应用的全生命周期。 数字孪生的应用场景非常广泛,包括工业制造、智能城市、交通物流、医疗健康、农业科技等众多领域。在工业制造中,数字孪生技术可以帮助企业实现生产过程的数字化和智能化,提高生产效率和产品质量。在智能城市领域,数字孪生模型可以用于更加精细化的城市管理和规划,提升城市运行效率和管理水平。在交通物流方面,数字孪生技术可以实时监控和预测车辆运行状态,提高运输效率和安全性。在医疗健康领域,数字孪生技术可以建立人体的数字模型,用于实时监测和预测健康状况,为医疗保健提供精准服务。 总体来说,数字孪生是一个普遍适应的理论技术体系,具有巨大的应用潜力和发展空间。随着技术的不断进步和应用场景的不断拓展,数字孪生将在未来发挥更加重要的作用,推动各行各业的创新发展。


以前的某个安装需要重新引导计算机以便使更改生效

1.进入注册表路径 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations。 2.找到名为 PendingFileRenameOperations 的文件。 3.删除 PendingFileRenameOperations 文件。 4.重启计算机。 PendingFileRenameOperations powershell registry remove –key-path \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations –recurse

reg delete “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations” /f

OK

reg delete “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations” /f


oracle pivot unpivot ——————————————————————————————————————————————————————————————————————————————————————–

with temp as( select ‘四川省’ nation ,’成都市’ city,’第一’ ranking from dual union all select ‘四川省’ nation ,’绵阳市’ city,’第二’ ranking from dual union all select ‘四川省’ nation ,’德阳市’ city,’第三’ ranking from dual union all select ‘四川省’ nation ,’宜宾市’ city,’第四’ ranking from dual union all select ‘湖北省’ nation ,’武汉市’ city,’第一’ ranking from dual union all select ‘湖北省’ nation ,’宜昌市’ city,’第二’ ranking from dual union all select ‘湖北省’ nation ,’襄阳市’ city,’第三’ ranking from dual ) select * from (select nation,city,ranking from temp)pivot (max(city) for ranking in (‘第一’ as 第一,’第二’ AS 第二,’第三’ AS 第三,’第四’ AS 第四)); ——————————————————————————————————————————————————————————————————————————————————————–

with temp as( select ‘四川省’ nation ,’成都市’ 第一 ,’绵阳市’ 第二,’德阳市’ 第三,’宜宾市’ 第四 from dual union all select ‘四川省’ nation ,’武汉市’ 第一 ,’宜昌市’ 第二,’襄阳市’ 第三,null 第四 from dual ) SELECT nation,ranking,city FROM ( SELECT * FROM temp ) UNPIVOT EXClUDE NULLS ( city FOR ranking IN (第一 ,第二,第三,第四) );

with temp as( select ‘四川省’ nation ,’成都市’ 第一 ,’绵阳市’ 第二,’德阳市’ 第三,’宜宾市’ 第四 from dual union all select ‘四川省’ nation ,’武汉市’ 第一 ,’宜昌市’ 第二,’襄阳市’ 第三,null 第四 from dual ) SELECT nation,ranking,city FROM ( SELECT * FROM temp ) UNPIVOT INClUDE NULLS ( city FOR ranking IN (第一 ,第二,第三,第四) );


Oracle 的表类型 外部表 索引组织表IOT 对象表 临时表 Oracle 物化视图(旧版本为快照,数据真实刷新到物理表中,当然也可以阻止刷新) 分区表 Oracle簇表介绍 (clustered table)簇表概述簇表(cluster) 是一种可以选的存储数据方式。簇表由1组拥有相同的列而且经常被一起使用的数据表构成,这组表在存储时会共享一部分Data Blocks, 例如,employees 和 departments表都包含department_id 这个列。 当用户将这两个表组合成1个簇表时,Oracle在物理上将employees 和 departments 两张表各行的department_id 字段存储在1个Data block里。下图显示了由employees 和 departments 两张表构成的簇表是怎样存储的。

如上图,在1个簇表内,不同表的相关(related)数据行会被存储到1个Data Block中,因此有如下优点: * 连接(join) 簇表所需的磁盘I/O减少。 * 连接簇表时间减少 * 在1个簇表内,簇键(cluster key) 是指各簇键列(cluster key column)的值。1个簇内的 有多个簇表的各个数据行所使用的相同的簇键值,在簇表及簇索引(cluster index)中只会被 存储1次(参考上图)。因此与非簇表相比(nonclustered table)相比,簇表这存储相关的 表和表数据所需的空间会减少。 如上图所示, 每个簇键(department_id)的值只会存储1次 ,而两张表employees和 departments 中包含的相同簇键值的数据共享同1个簇键. 簇表的一些属性 簇键 cluster key 簇键是列或多列的组合,为簇表所共有 在创建簇表时指定簇键的列,以后在创建增加簇表中的每个表示,指定相同的列则可。 每个簇键值在簇和簇索引中只存储1次,与不同表中有多少这样的行无关。使用簇键的好处 减少磁盘I/O, 减少了因使用连接表所带来系统开销 节省了磁盘存储空间,因为原来要单独存放多张表,现在可以将连接的部分作为共享列存储。什么情况下创建簇表 对于经常查询,DML操作比较少的表 表中的记录经常被连接到其他表查询

创建簇表的步骤 创建簇表 创建簇索引 创建簇表的子表创建簇表时应考虑的问题 哪些表适用于创建簇表 对于创建簇的表那些列用作簇列 创建簇时Data Blocks的空间如何使用(pctfree, pctused) 平均簇键及所需相关行所需的空间大小 簇索引的位置(比如存放到不同表空间) 预估簇的大小 创建簇和簇表在创建簇表时,如果未指定索引列,则默认的创建1个索引簇。如果指定了散列参数, 如haskeys,hashis 或single table hashkeys,则可以创建哈希簇. 先检查当前环境

可以看出当前用户是HR, 用户的默认表空间是TS_EXAMPLE

创建簇

CREATE CLUSTER EMP_DEPT_CLUSTER(DEPTNO NUMBER(2)) PCTUSED 80

PCTFREE 15

SIZE 1024

TABLESPACE USERS

上面语句就创建了1个簇,其中1个最重要的参数就是 SIZE,需要为 SIZE指定1个合适的值,如果太大,则每个块仅存放少量的簇,造成空间浪费,太小又会形成很多数据链。 注意TABLESPACE 字句,这里我们会将这个簇放入USER 这个表空间中,而不是用户HR默认的表空间TS_EXAMPLE.

注意:本地管理类型的表空间中, PCTUSED的设置是无效的. 关于 PCTUSED PCTFREE 的参数可以参考我的另1篇blog http://nvd11.blog.163.com/blog/static/200018312201282354948602/ 如下图,利用上面语句创建了1个簇

创建后可以通过查看user_clusters 来检索这个簇.

创建簇索引 创建簇索引的条件: * 模式中必须包含簇 * 必须具有create any index 的权限.

簇索引的作用 用于1个簇键值并返回该簇键值的地址块. (注意簇中,每1个簇键值只存储1次啊)

语法: Create index emp_dept_cluster_idx on cluster emp_dept_cluster

 创建后可以查看user_indexse来检索这个簇索引

创建簇表 创建簇表 cl_dept: CREATE TABLE CL_DEPT( DEPTNO NUMBER(2) PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13) ) cluster emp_dept_cluster(deptno) –cluster关键字后面跟簇名、簇列 –作用就是分配该表给指定簇,同时指定簇键.

 CREATE TABLE CL_EMP(                      EMPNO NUMBER PRIMARY KEY,                      ENAME VARCHAR2(10),                      JOB1  VARCHAR(9),                      MGR   NUMBER,                      HIREDATE DATE,                      SAL   NUMBER,                      COMM  NUMBER,                      DEPTNO NUMBER(2) REFERENCES CL_DEPT(DEPTNO)  --外键                      )                CLUSTER EMP_DEPT_CLUSTER(DEPTNO) ----cluster关键字后面跟簇名、簇列

创建后可以查看user_tables来检索这两张簇表

也可以从user_objects视图里查看:

上图两个SYS开头的index是建立主键时系统自动建立的indexes.

下面对CL_DEPT 和 CL_EMP 插入数据. 从scott帐号的表导入

记得commit;..

更改簇属性
类似table 可以用如下语句更改簇属性

Alter Cluster EMP_DEPT_CLUSTER pctree 20;


游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。 游标有两种类型:显式游标和隐式游标。我们常用到的SELECT…INTO…查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。 游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。 隐式游标 如前所述,DML操作和单行SELECT语句会使用隐式游标,它们是:

  • 插入操作:INSERT。
  • 更新操作:UPDATE。
  • 删除操作:DELETE。
  • 单行查询操作:SELECT … INTO …。 当系统使用一个隐式游标时,可以通过隐式游标的属性来了解操作的状态和结果,进而控制程序的流程。隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。游标的属性有四种,如下所示: sql%found (布尔类型,默认值为null) sql%notfound(布尔类型,默认值为null) sql%rowcount(数值类型默认值为0) sql%isopen(布尔类型) 当执行一条DML语句后,DML语句的结果保存在四个游标属性中,这些属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。隐式游标只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性.SQL%FOUND,SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。 SQL%FOUND和SQL%NOTFOUND 在执行任何DML语句前SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是: . TRUE :INSERT   . TRUE :DELETE和UPDATE,至少有一行被DELETE或UPDATE.   . TRUE :SELECT INTO至少返回一行  当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。 SQL%ROWCOUNT   在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功或者没有操作(如update、insert、delete为0条),SQL%ROWCOUNT的值为0,而对于update和delete来说表示游标所检索数据库行的个数即更新或者删除的行数。 SQL%ISOPEN   SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。 最后我们来说一下隐式游标中SELECT..INTO 语句,当执行的时候会有三种可能: (1).结果集只含有一行,且select是成功的 (2).没有查询到任何结果集,引发NO_DATA_FOUND异常 (3).结果集中含有两行或者更多行,引发TOO_MANY_ROWS异常。 例子:

BEGIN UPDATE exchangerate SET rate=7 where quarter=’2011Q1’;

 DBMS_output.put_line('游标所影响的行数:'||SQL%rowcount);
  if SQL%NotFound then

     DBMS_output.put_line('NotFound为真');

     DBMS_output.put_line('NofFound为假');   
  end if;
  if SQL%Found then
       DBMS_output.put_line('Found为真');
  else
       DBMS_output.put_line('Found为假');
  end if;
  if SQL%isopen then
       DBMS_output.put_line('isOpen为真');
  else
       DBMS_output.put_line('isOpen为假');
  end if; END;

显式游标: 游标的定义和操作 游标的使用分成以下4个步骤。 1.声明游标 在DECLEAR部分按以下格式声明游标: CURSOR 游标名[(参数1 数据类型[,参数2 数据类型…])] IS SELECT语句; 参数是可选部分,所定义的参数可以出现在SELECT语句的WHERE子句中。如果定义了参数,则必须在打开游标时传递相应的实际参数。 SELECT语句是对表或视图的查询语句,甚至也可以是联合查询。可以带WHERE条件、ORDER BY或GROUP BY等子句,但不能使用INTO子句。在SELECT语句中可以使用在定义游标之前定义的变量。

2.打开游标 在可执行部分,按以下格式打开游标: OPEN 游标名[(实际参数1[,实际参数2…])]; 打开游标时,SELECT语句的查询结果就被传送到了游标工作区。 3.提取数据 在可执行部分,按以下格式将游标工作区中的数据取到变量中。提取操作必须在打开游标之后进行。 FETCH 游标名 INTO 变量名1[,变量名2…]; 或 FETCH 游标名 INTO 记录变量; 游标打开后有一个指针指向数据区,FETCH语句一次返回指针所指的一行数据,要返回多行需重复执行,可以使用循环语句来实现。控制循环可以通过判断游标的属性来进行。 下面对这两种格式进行说明: 第一种格式中的变量名是用来从游标中接收数据的变量,需要事先定义。变量的个数和类型应与SELECT语句中的字段变量的个数和类型一致。 第二种格式一次将一行数据取到记录变量中,需要使用%ROWTYPE事先定义记录变量,这种形式使用起来比较方便,不必分别定义和使用多个变量。 定义记录变量的方法如下: 变量名 表名|游标名%ROWTYPE; 其中的表必须存在,游标名也必须先定义。 4.关闭游标 CLOSE 游标名; 显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。 现在通过一个例子来学习一下显示游标的使用方法: 有一个表原来结构是如下的

create table EXCHANGERATE ( QUARTER VARCHAR2(20), RATE NUMBER(10,4), DESCRIPTION VARCHAR2(900), ID VARCHAR2(10) not null, CURRENCY VARCHAR2(100) )

这是一个汇率表里面维护着的是季度 币种和汇率的关系,现在有一个新的需求是在原来表的基础上增加一列名字为currentmonth,变为季度、季度中月份、 币种和汇率的关系, 并且使原来每个季度对应的币种和汇率变成每个季度 对应该季度月份 币种和汇率,每个月的默认值为原来季度对应的值。 例如 原来 2013Q2 CNY 6.2 现在我们要变为2013Q2 2013-04 CNY 6.2 2013Q2 2013-05 CNY 6.2 2013Q2 2013-06 CNY 6.2 三条记录。 通过分析以上需求,我们首先要增加一列: alter table exchangerate add currentmonth varchar2(20); 然后我们通过在匿名块中通过显示游标来实现以上需求:

declare

v_year varchar2(20); v_month number; p_rate exchangerate%rowtype;

cursor c_rate is select * from exchangerate t where t.currentmonth is null;

begin open c_rate; loop

fetch c_rate into p_rate;
v_year:=substr(p_rate.quarter, 0, 4);
v_month:=(to_number(substr(p_rate.quarter,6,1)) - 1) * 3;

for i in 1 .. 3 loop

insert into exchangerate(id,quarter,currentmonth,rate,currency,Description)
values(SEQUENCE_EXCHANGERATE.nextval,p_rate.quarter,
       to_char(to_date(v_year||(v_month+i),'yyyyMM'),'yyyy-MM'),p_rate.rate,p_rate.currency,p_rate.description);
 
end loop; 

exit when c_rate%notfound;

end loop;

close c_rate;

end; /

我们把上面的例子有游标的for循环来改写一下。

显式游标的for循环

declare

v_year varchar2(20); v_month number;

cursor c_rate is select * from exchangerate t where t.currentmonth is null;

begin

for p_rate in c_rate loop

v_year:=substr(p_rate.quarter, 0, 4);

v_month:=(to_number(substr(p_rate.quarter,6,1)) - 1) * 3;

for i in 1 .. 3 loop

insert into exchangerate(id,quarter,currentmonth,rate,currency,Description)
values(SEQUENCE_EXCHANGERATE.nextval,p_rate.quarter,
       to_char(to_date(v_year||(v_month+i),'yyyyMM'),'yyyy-MM'),p_rate.rate,p_rate.currency,p_rate.description);

end loop; 

end loop;

end;

/

我们可以看到游标FOR循环确实很好的简化了游标的开发,我们不在需要open、fetch和close语句,不在需要用%FOUND属性检测是否到最后一条记录,这一切Oracle隐式的帮我们完成了。

隐式游标的for循环

declare

v_year varchar2(20); v_month number;

begin

for p_rate in (select * from exchangerate t where t.currentmonth is null) loop

v_year:=substr(p_rate.quarter, 0, 4); v_month:=(to_number(substr(p_rate.quarter,6,1)) - 1) * 3;

for i in 1 .. 3 loop

  insert into exchangerate(id,quarter,currentmonth,rate,currency,Description) 
    values(SEQUENCE_EXCHANGERATE.nextval,p_rate.quarter,
           to_char(to_date(v_year||(v_month+i),'yyyyMM'),'yyyy-MM'),p_rate.rate,p_rate.currency,p_rate.description);

end loop; 

end loop;

end; /

显示游标中游标参数的传递 例子:就以上面的表来说 加入我们在定义游标时不确定查询条件中的值,这时我们可以通过游标参数来解决

declare

v_year varchar2(20); v_month number; p_rate exchangerate%rowtype;

cursor c_rate(p_quarter varchar2) –声明游标带参数 is
select * from exchangerate t where t.quarter<=p_quarter;

begin open c_rate(p_quarter=>’2011Q3’);–打开游标,传递参数值 loop

fetch c_rate into p_rate;

update exchangerate set rate=p_rate.rate+1 where id=p_rate.id;


exit when c_rate%notfound;

end loop;

close c_rate;

end;

游标变量 游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的.它永远指向一个相同的查询工作区. 游标变量是动态的可以在运行时刻与不同的SQL语句关联,在运行时可以取不同的SQL语句.它可以引用不同的工作区. 如何定义游标类型

TYPE ref_type_name IS REF CURSOR

[RETURN return_type]; 声明游标变量 cursor_name ref_type_name;

ref_type_name 是后面声明游标变量时要用到的我们的游标类型(自定义游标类型,即CURSOR是系统默认的,ref_type_name是我们定义的 ); return_type代表数据库表中的一行,或一个记录类型 TYPE ref_type_name IS REF CURSOR RETURN EMP%TYPE RETURN 是可选的,如果有是强类型,可以减少错误,如果没有return是弱引用,有较好的灵活性. 游标变量的操作 例子:

declare

v_year varchar2(20); v_month number; p_rate exchangerate%rowtype;

type rate is ref cursor;–定义游标变量 c_rate rate; –声明游标变量

begin

open c_rate for select * from exchangerate t where t.quarter=’2011Q3’;–打开游标变量 loop

fetch c_rate into p_rate;--提取游标变量

update exchangerate set rate=p_rate.rate+1 where id=p_rate.id;

exit when c_rate%notfound;

end loop;

–将同一个游标变量对应到另一个SELECT语句

open c_rate for select * from exchangerate t where t.quarter=’2011Q2’;–打开游标变量 loop

fetch c_rate into p_rate;--提取游标变量

update exchangerate set rate=p_rate.rate-1 where id=p_rate.id;

exit when c_rate%notfound;

end loop; close c_rate;–关闭游标变量

end;

游标表达式 Oracle在SQL语言中提供了一个强有力的工具:游标表达式。一个游标表达式从一个查询中返回一个内嵌的游标。在这个内嵌游标的结果集中,每一行数据包含了在SQL查询中的可允许的数值范围;它也能包含被其他子查询所产生的游标。 因此,你能够使用游标表达式来返回一个大的和复杂的,从一张或多张表获取的数据集合。游标表达式的复杂程度,取决于查询和结果集。然而,了解所有从Oracle RDBMS提取数据的可能途径,还有大有好处的。 你能够在以下任何一种情况使用游标表达式: (1)、 显式游标声明 (2)、动态SQL查询。 (3)、REF CURSOR 声明和变量。 你不能在一个隐式查询中使用游标表达式。 游标表达式的语法是相当简单的: CURSOR (查询语句) 当Oracle从父游标或外围游标那里检取包含游标表达式的数据行时,Oracle就会隐式地打开一个内嵌的游标,这个游标就是被上述的游标表达式所定义。在以下情况发生时,这个内迁游标将会被关闭: (1)、你显式地关闭这个游标。 (2)、外围或父游标被重新执行,关闭或撤销。 (3)、当从父游标检取数据时,发生异常。内嵌游标就会与父游标一起被关闭。 使用游标表达式 你可以通过两种不同的,但是非常有用的方法来使用游标表达式:

  1. 在一个外围查询中把字查询作为一列来检取数据。
  2. 把一个查询转换成一个结果集,而这个结果集就可以被当成一个参数传递给一个流型或变换函数。 例子:

CREATE OR REPLACE PROCEDURE emp_report(p_locid NUMBER) IS TYPE refcursor IS REF CURSOR; CURSOR all_in_one IS SELECT l.city, CURSOR( SELECT d.department_name, CURSOR ( SELECT e.last_name FROM employees e WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID ) as ename FROM departments d WHERE d.LOCATION_ID = l.LOCATION_ID ) as dname FROM locations l WHERE l.location_id = p_locid; departments_cur refcursor; employees_cur refcursor; v_city locations.city%type; v_dname departments.department_name%type; v_ename employees.last_name%type; i integer :=1; j integer :=1; k integer :=1; BEGIN OPEN all_in_one; LOOP
FETCH all_in_one INTO v_city, departments_cur; EXIT WHEN all_in_one%NOTFOUND; LOOP FETCH departments_cur INTO v_dname, employees_cur; EXIT WHEN departments_cur%NOTFOUND; LOOP FETCH employees_cur INTO v_ename; EXIT WHEN employees_cur%NOTFOUND; dbms_output.put_line(i || ‘ , ‘ || j || ‘ , ‘ || k || ‘—-‘ || v_city || ‘ ,’ || v_dname || ‘ ,’ || v_ename ); k := k + 1; END LOOP; j := j + 1; END LOOP; i := i + 1; END LOOP; END; /