7
西门子6ES7322-1HF10-0AA0千万库存
在PLC被开发出来的三十年里,一直存在80-20 法则, 即工程师们只能利用PLC开发出80%的工业应用,另外20%应用则出了传统PLC所能提供的功能,这些20%的应用需要有高的循环速率,控制算法,多模拟功能以及强的网络集成功能,这些20%应用正是计算机(PC)的所长,而计算机(PC)却有三大问题:稳定性不高,性差,编程复杂。
由于PC和PLC都有其各自的优缺点,因此,人们开发出了新的控制器来解决20%的应用,并把PLC和PC的特性地结合在一起;市场ARC咨询机构的工业分析家把这种设备称为可编程自动化控制器(Programmable Automation Controller),即PAC。
分析国内PAC的市场及发展现状,我们发现以下2个问题:
1.国内没有厂家推出PAC产品。
2.PAC的价格与PLC比偏高。
分析以上2个问题原因如下:
1个问题的原因:
国内PLC生产厂家很多,但大多PLC模或利用现成的三菱或西门子PLC编程软件,由此可以看出 这些国内PLC生产厂家开发能力有限,规模都比较小,没有能力将其PLC升级为PAC。
国内DCS厂家大多走的是工程公司的路,以工程为主,一般DCS IO模块自己生产,控制器、控制软件采用国外成熟的产品(控制软件用KW、一方梯队、ISAGRAF、3S等,MMI软件用Citect,Ifix等), 由于没有自主的软件以及工程项目的,他们没有能力及意识将自己的DCS小型化、廉价化,并将之降格为PAC。
2个问题的原因:
PAC的价格偏高, 主要原因是PAC的市场处于扩展期;
三菱、西门子等PLC传统厂家没有进入这个市场;
拥有自主的上、下位软件PAC厂商对PAC市场的划分,他们只做市场;
没有国内厂家 产品的竞争;
PAC硬件设计思路不合理,主要表现为沿用了计算机板卡及DCS模块的设计思路。
闽台PAC厂家也没有自主的上、下位软件。
国产PAC主要市场
设备自动化配套,并可根据用户需要定制板卡级PAC,开发有市场的设备控制器,如现在很热门的风力发电一体化控制器,楼控用的DDC。
成为设备生产厂家的自动化设计部门,为设备生产厂家提供全方面的自动化服务。
为系统工程公司提供控制产品及服务。
承接小型自动化项目,承接对性价比要求高的自动化系统项目,注意一定要与国产DCS形成错位竞争。
PAC既可以满足工业控制系统对于开放性和柔性的要求,又可以满足用户对稳定性和性的要求。利用PAC控制技术,可以有效地为客户降低生产成本、提高生产效率,实现收益的增长。尽管PLC的价格在逐渐下降,但是其整体销售额在未来的几年内仍趋于上升。而作为结合了PC和PLC优势的PAC,我们有理由相信随着PAC技术的不断完善、发展和价位逐步的逼近于PLC,PAC技术必将在未来的工业自动化领域中成为控制系统的主流。
我公司在01年就投入大量精力开发 集散控制系统(DCS)上、下位软件,并成功, 软件型号:EasyMC 3.2管(理)控(制)一体化的软件,软件主要基于bbbbbbS XP/2000运行;05年投入精力开发出高性价比的IO模块,经过近几年工程项目的应用考验,软硬件的性、稳定性不错。
在拥有自主的软、硬件技术的基础上,将我公司的DCS 控制器简化,增加与IO卡件的直接接口,采用WIN CE操作系统,将我公司的DCS 产品转型变为PAC产品,我们开发的PAC有以下的特点:
(1)有PLC的性(金属模块化封装);实时性(开关量处理周期<10mS);价格低廉;紧凑设计,安装接线方便。
(2)有DCS开放的网络结构(支持以太网、RS485、CAN总线);冗余设计(可实现通讯、控制器的冗余功能);上下位机软件一体化设计,可视化图形在线组态;控制功能强大:回路调节、逻辑控制、顺序控制;可任意规模(开关点≤64000,模拟点≤64000),可应用于小的设备控制及大型控制系统。
(3)YXPAC内装工业级一体式主板(名片大小,供电电压:+5V±5%,工作电流240mA,工作温度-40℃~80℃),WinCE5.0系统,32位CPU 200MHz主频,64MB内存,256MB NAND FLASH, 有100M以太网、USB接口、RS232/485串口、CAN 接口,支持各种LCD,一般计算机中的控制软件经简单调整就可运行在YXPAC中,而性及成本却大不一样。
我们竞争力
PAC 关键在于解决(常规PLC不能解决)20%的工业应用,并能在性、价格及功能上比PLC有优势(至少不比PLC差),PAC 在硬件配置上不需和DCS/FCS(控制器冗余、通信网络冗余、IO卡件冗余)看齐,否则PAC就是DCS/FCS,PAC在硬件配置上应追求高性价比。
PAC硬件的高性价比得益于我们在设计IO时,没有沿用了计算机板卡及DCS模块的设计思路,在这几年的工程应用中已验证了此设计的性。
PAC自主软件是公司主创人十几年心血的结晶,已在众多的项目工程中应用。
、价格低廉的硬件,实用、自主开发软件是我们竞争力。
高性价比的硬件,自主开发的软件是我们的亮点,由于拥有自主的软硬件技术,我们能继续开发PAC的新的功能应用软件
1、HOLLiAS-LEC G3系列PLC有多少种CPU类型?它们之间有什么样区别?
有6种类型,它们之间的区别主要有四点:1是自带IO点数不同;2是可扩展模块数量不同;3是供电电源不同;4是输出点类型不同。
2、如何选择小型一体化PLC的CPU?
要分两步考虑:要计算系统所需的IO点数并且而且考虑系统的扩展要求;二根据电源类型和负载不同选择相应的CPU就可以了。
3、系统中程序容量是多少?有停电保持区吗?
系统中程序容量是52K字节,停电保持区为8K。
4、需要换电池吗?多长时间,怎么换?
不需要换电池,因为PLC的程序区和停电保持区采用的是不需要后备电源的FLASH硬件,保证10年以上数据不丢失。
5、什么是WAGO接线技术?
WAGO接线技术是德国WAGO公司的一项技术,它采用特的弹簧压力技术,卡接方式接线,具有接线方便,牢固的特点,采用WAGO的接线技术不仅节省了大量的接线时间,为用户提供了一种放心的接线。
6、能不能用PLC来监控以前的单片机设备?如何能与这些旧设备通讯或者是联网?
您说的是自由协议通讯问题,现在用HOLLiAS-LECPLC可以非常方便地来实现。并且还有两种方式呢:一是利用CPU自带的RS232接口;再一种就是增加自由协议通讯模块LM3400。通过正确地参数配置就能够完成通讯功能了,想从这些旧设备中得到的东西只要合理地通过软件编程就可以实现了。
7、我的客户要求我的设备能嵌入到他们的楼宇系统(LONWORKS)中,有办法吗?
有,有一个专门与LonWorks接口的模块,就是LM3405。
8、有一个客户用得是和利时的DCS系统,现在要求plc设备能与dcs连上,没问题吧?
当S是通过Profibus-DP相互通讯的,PLC有一个的Profibus-DP从站扩展模块LM3401。只要是符合Profibus-DP协议标准的都可以连上。
9、能不能与现场总线联接?
可以。不过先要考虑是哪一种现场总线了。比如是横河的1000或是2000系统,在它的接口中运行的是Modbus协议,你就可以用CPU自带的 Modbus协议口,如果是FF现场总线呢,就需要增加FF接口模块了LM3407;若是CANopen总线系统呢,就要选择LM3406;还有 LM3402DeviceNet接口模块必要时与设备网络相连。
10、我想当我的机组出现故障后,我的维修人员能够时间赶到事故现场,有办法吗?
有,只要是你的人员有手机或者呼机。因为有GPRS/GSM通讯功能模块,它能够保证让你的维修人员时间赶到事故现场。
11、我想通过互联网或者公司内部网络远程调试设备,能做到吗?
能,在你的PLC上加一个以太网接口模块LM3403就行了。
12、我的设备卖到了边远山区,没有网络。怎么办?
有电话吗?只要有电话就可以解决了,连上LM3404这个Modem接口模块,可以调试,甚至定期循视都没问题,不仅能自动拨号,还具有故障上传功能。
1 引言
开发新能源和可再生资源是全世界面临的共同课题,在新能源中,太阳能发电已成为发展快的技术。太阳能作为一种清洁的能源,开发前景十分广阔。然而由于太阳存在着间隙性,光照强度随着时间不断变化等问题,这对太阳能的收集和利用装置提出了高的要求。目前很多太阳能电池板阵列基本都是固定的,不能充分利用太阳能资源,发电效率低下。据测试,在太阳能电池板阵列中,相同条件下采用自动跟踪系统发电设备要比固定发电设备的发电量提高35%左右。
所谓太阳能跟踪系统是能让太阳能电池板随时正对太阳,让太阳光的光线随时垂直照射太阳能电池板的动力装置,能显著提高太阳能光伏组件的发电效率。目前市场上所使用的跟踪系统按照驱动装置分为单轴太阳能自动跟踪系统和双轴太阳能自动跟踪系统。所谓单轴是指仅可以水平方向跟踪太阳,在高度上根据地理和季节的变化人为的进行调节固定,这样不仅增加了工作量,而且跟踪精度也不够高。双轴跟踪可以在水平方位和高度两个方向跟踪太阳轨迹,显然双轴跟踪单轴跟踪。
从控制手段上系统可分为传感器跟踪和视日运动轨迹跟踪(程序跟踪)。传感器跟踪是利用光电传感器检测太阳光线是否偏离电池板法线,当太阳光线偏离电池板法线时,传感器发出偏差信号,经放大运算后控制执行机构,使跟踪装置从新对准太阳。这种跟踪装置,灵敏度高,但是遇到长时间乌云遮日则会影响运行。视日运动轨迹跟踪,是根据太阳的实际运行轨迹,按照预定的程序调整跟踪装置。这种跟踪方式能够全天候实时跟踪,其精度不是很高,但是符合运行情况,应用较广泛。
从主控单元类型上可以分为PLC控制和单片机控制。单片机控制程序在出厂时由人员编写开发,一般设备厂家不易再次进行开发和参数设定。而学习使用PLC比较,通过PLC厂家技术人员的培训,设备使用厂家的技术人员可以很方便的学会简单的调试和编写,并且PLC能够提供多种通讯接口,通讯组网也比较方便简单。
一、 S7-200PLC内部RS485接口电路图:电路图见附件1 引言
PLC作为一种成熟稳定的控制器,目前已经在工业控制中得到了越来越广泛的应用。PLC系统的设计直接影响着工业控制系统的运行。一个完善的PLC系统除了能够正常运行,满足工业控制的要求,还能在系统出现故障时及时进行故障诊断和故障处理。故障自诊断功能是工业控制系统的智能化的一个重要标志,对于工业控制具有较高的意义和实用。
故障诊断一般有两种途径:故障树方法和系统方法。故障树方法利用系统的故障逻辑结构进行逻辑推理,由错误的输出找到可能的输入错误。这种方法比较适用于系统结构相对简单,各部分耦合少的情况。系统方法通过建立系统故障的知识库与推理机,计算机借助现场的数据利用知识库和推理机进行深入的逻辑推理,找出故障原因。这种方法适用于系统结构复杂,各部分耦合强的大型工业系统。
本文根据故障树推理与经验规则推理相结合的方法,以某火电厂输煤控制系统的设计为例,介绍了一种利用PLC和上位计算机进行故障诊断的PLC系统设计。
2 系统设计
故障诊断系统建立在基于PLC和上位计算机组成的控制系统上。PLC在故障诊断系统中的功能主要是完成输煤系统设备故障信号、预处理,转化存储并传输给上位计算机。上位计算机由于具有强大的科学计算功能,利用知识和库,完成从故障特征到故障原因的识别工作。并通过人机界面,给出故障定位,和解释故障诊断结果,并为操作员给出相应的排除故障的建议。
3 PLC程序设计
在进行故障诊断设计时,对整个系统可能会发生的故障进行分析,得到系统的故障层次结构,利用这种层次结构进行故障诊断部分的设计。以火电厂输煤控制系统的故障结构为例。为了描述简单,这里作了一定的简化。图1为系统的故障层次结构。
图1 系统故障层次结构
系统故障结构的层次性为故障诊断提供了一个合理的层次模型。在进行系统的PLC梯形图程序设计时,应充分考虑到故障结构的层次,合理安排逻辑流程。在引入故障输入点时应注意:将系统所有可能引起故障的检测点引入PLC,以便系统能及时进行故障处理;应在系统允许的条件下尽可能多的将底层的故障输入信息引入PLC的程序中,以便得到多的故障检测信息为系统的故障自诊断提供服务。
(1) 故障点的记录
为了得到系统的故障情况实现系统的故障自诊断,PLC将所有故障检测点的状态反映给内部寄存器,图2是用来记录故障点的部分程序。
IR4.02是输入的IO节点,表示A侧皮带信号,当输煤系统使用A侧皮带正常运行时4.02的值为1,当4.02变为0时,说明A侧皮带信号出了故障,此时利用上升沿微分指令记录这次的信号跳变。这样这次事故就记录在IR31.00中。程序设计中将IR31作为记录底层故障信息的寄存器,由于内部寄存器IR有16位,所以能够记录16种不同的故障原因。如果有多的故障需要记录,可以设置多个寄存器字。需要说明的是,有时引起故障的原因可能不止一个,往往一个故障会引起另一些故障的发生,因此还有关键的一点是程序要能记录发生的故障。这也需要通过PLC编程实现,程序只对开始发生的故障敏感。
图2 记录故障的部分PLC程序
(2) 多次故障事件的记录
由于系统实际长时间的运行中,可能会出现多次故障,为了检修和维护方便,还需要PLC能够将多次故障事件记录下来。OMRON C200H型PLC的数据存储区(DM区)可以间接寻址,利用这一点,可以在DM区划出一定的区域,用来记录每次故障事件,包括故障类型和事件发生的时间(日期,小时,分钟,秒)。这一段DM区域可以循环记录,实际使用中记录了后50次故障的情况,这些记录是系统运行的重要资料,方便了运行人员了解设备情况,对其进行检修和维护。
(3) 模拟量故障的诊断
对于模拟量信号例如犁煤车,给煤车电机电流的故障诊断,利用模拟量模块,接收来自电流变送器的模拟信号,将其转换为数字信号,然后与整定值或系统允许的限值比较,若在允许范围之内则表明对应的设备处于正常运行状态,如果实际值接近或达到限值,则为不正常状态。判断故障发生与否的限值根据实际系统相应的参数变化范围确定。
(4) 各种故障信息的串行通信
上位机通过串行通讯及时读取PLC的内部寄存器区的各种故障信息。利用PLC的RS232通信接口,可与上位计算机进行Host bbbb方式串行通信。通信时,上位计算机向PLC发出一帧命令帧,包括操作命令、寄存器类型、起始地址与要读取的寄存区数目等。PLC收到命令帧后会做出响应,如果没有错误则向上位计算机发出响应帧,响应帧中包含了上位机需要查询的寄存器值。
上位计算机通过读取数据寄存区的值来当前PLC的工作状况,同时上位计算机对PLC的控制也可通过对该区的写操作来完成。具体的通信实现可以参考相关资料,这里不作详细论述。
4 借鉴系统故障诊断方法的实现
系统故障结构的层次性为故障诊断提供了一个清晰的层次模型,可以利用基于模型的故障树法。但是在进行比较详尽的故障诊断以及系统故障存在耦合时,仅仅使用故障树法是不够的,借鉴系统的方法。
(1) 面向对象的“知识对象”, 大大提高了故障诊断的推理效率
在传统的系统中,知识被组织成知识库的形式,推理机进行推理时,要从知识库表示的所有空间中搜索所需的知识。这种方法有搜索空间大,推理效率低的缺点。“知识对象”的概念可以解决这一问题。“知识对象”是一个逻辑概念,它利用面向对象的方法,将知识源和黑板都表达为对象,在知识对象的内部封装了系统和推理机、解释器。当相应的知识对象被后,就在对象内部进行推理,大大提高了推理效率。根据系统的实际情况和故障推理的过程,在这里知识对象被具体化为故障节点。故障节点是进行诊断推理的基本单位,诊断信息在故障节点间层层传递,故障节点内部利用这些信息进行推理并终确定故障原因。
图3为系统部分故障节点的层次结构。图3可以看出,故障节点在结构上以虚线为分界线分为两个部分。上一部分层次清晰,在这一部分可以采用基于故障模型的故障树方法;下一部分由于结构复杂,耦合性较强,构造模型困难,可采用系统的推导方法。
图3 故障节点层次图
故障节点呈网状分布,1个节点可能有1个或多个父节点,也可能有1个或多个子节点。子节点和父节点之间的关系由故障层次和子节点故障层次来表示。如节点1的子节点故障层次为1,而节点2和节点3的故障层次为1,则节点2和节点3是节点1的子节点。故障层次和子节点故障层次不仅指明了故障节点结构上的层次,而且也隐含了推理规则。
(2) 对象类型与推理节点
对象类型表示该故障节点在故障推理中的作用,它可分为3类:根节点,叶节点,推理节点。根节点的故障由它的子节点产生,应到其子节点中去继续推理。叶节点是底层故障。叶节点没有子节点。推理节点是故障诊断规则为集中的节点,检测节点可以视为推理节点的子节点,它为推理节点的推理过程提供相关的信息。我们在推理节点并不是判断该节点是否存在故障,而是利用推理节点封装的规则库与推理机,结合节点提供的信息进行故障推理,找出故障原因。
(3) 故障节点的检测方式
地址段是节点的位置(本系统中是PLC中的寄存器)。数据段根据用户的需要可以为一个或几个,数据段中数据的定义与节点的性质有关。检测方式表明在该节点系统进行何种操作。主程序根据故障节点的检测方式选取相应的处理函数。该函数是检测手段与推理规则的结合,故可称之为检测/推理函数。一方面它可以检测故障节点本身的状态,另一方面使用推理机制进一步推断故障原因。性质类似的节点使用相同的检测/推理函数,利用地址段和数据段中的值加以区别。
(4) 各节点的注释段要有相应帮助信息
各节点的注释段不仅能记录故障的原因和维修方法,还可以记录其他的帮助信息。有时因系统的检测手段不完备,或规则不,推导过程要进行人机对话。这时候如果节点的注释段中有相应帮助信息,可以给用户以提示或指导用户进行操作,使推理能顺利进行。
本系统的故障诊断通过在上位计算机上用VC6.0开发的应用程序实现,集成在上位机监控系统中。在运行中给操作人员提示,指导用户进行操作,了解设备状态,判断故障发生原因,并可给出相应的维修建议。用户也可以对故障诊断进行指导和修正。
5 结束语
按以上故障诊断原理构造的故障诊断系统在火电厂输煤PLC控制系统中得到了应用。从实际运行来看,故障诊断系统能准确而地判断出故障的原因,方便运行人员维护和检修,大大地提高了控制系统的稳定性和智能化水平。这种设计对类似的工业控制系统提供了一定的参考。
141:应用软件冗余当一个长度错误出现导致CPU处于STOP模式应该作些什么?
当在OB100中设置软件冗余功能块FC100时,注意下列情况:参数IEC_NO 的背景数据块至少有两个字的长度,同样应用于冗余用户程序的参数 DB_NO的数据块也时这样。
142:在S7程序中,有许多FC、FB块, 我怎样对其中的一些块进行保护, 而其它的块可以是开放的呢?
1) Step7中, 可以先开一块如OB1, 在"file"中选择"Generate Source"或快捷方式"Ctrl+T",弹出一个画面,填写"bbbbbb name"如"tt",然后按OK确认,就会再弹出另一个画面,左边是你的程序中所有的块,如果你需要保护哪些块, 就把这些块移到右边,如FB1、FB2等等, 然后退出所有的程序块,再进入SIMATIC Manager中。
2) 在S7 Program Sources找到文件tt,双击tt打开,在四行中加入"Know_How_Protect", 然后编译, 无错后存盘。这样FB1、FB2就被保护住,如想去掉保护,在tt中去掉"Know_How_Protect"编译存盘即可。
注意: 千万不要丢失或删除源文件(如tt), 否则程序被保护, 用户可以另存到其它目录中,或Export Source到硬盘中,再删除源文件,这样别人只能看到未保护的块。
143:SFB41,SFB42,SFB43和FB41,FB42,FB43的区别?
SFB41(CONT_C),SFB42(CONT_S),SFB43(PULSEGEN)块和FB41(CONT_C),FB42(CONT_S),FB43(PULSEGEN)的区别: SFB41,42,43与FB41,42,43的参数设置是一样的。SFB41,42,43只能用于CPU314IFM;FB41,42,43可用于CPU313以上的CPU(除CPU314IFM),因为SFB41,42,43集成于CPU314IFM中,而在普通CPU中没有这些块。
144:如何在多例兼容功能块中找到变量地址?
在多例兼容功能块中,为块参数和静态本地数据加载与地址寄存器AR2有关的地址。如果要在情景数据块中找到变量的地址,则把域内指针(只是AR2的地址)加载到变量地址。
样例:
TAR2 //将地址寄存器加载到累加器AC1(偏移量)
UD DW#16#00FF_FFFF // 关闭区域ID
L P##variable //加载变量地址
+D // 增加偏移量和变量地址
LAR1 // 保存地址寄存器AR1中的结果
这样可在AR1中获得地址以进行进一步处理。
当功能块作为本地实例调用时,总要使用该方法。比如,在一个功能块中创建可做为类型“FB”的静态变量的功能块。这样所调用的情景数据块的数据偏移量就存储到情景数据块中。单个实例的偏移量在AR2中。如果不调用作为本地实例的功能块,则可以结束计算。值‘ 0’就在地址寄存器中。
注意事项:如果改变程序中的地址寄存器AR2,那么也改变了变量的偏移量地址。因此就不能保证再对变量进行正确访问。在这种情况下,预先保存AR2,并 在对程序动作完之后将其 复位为初始状态。
样例:
TAR2 // 在累加器中加载偏移量地址
T #save // 比如,静态本地数据域 0中的变量
L DID 0 // 地址是由DI加载的beds L AR2 // 核对
145:怎样才能访问上一函数的本地数据?
如要访问以前的本地数据(“V-e > L”数据),可以传送一自创建ANY指针或地址到被调用的FC。如果传送的是自创建ANY指针,区域指针会指向其本地数据,而这是无意义的。> 因此“V”区域码置于ANY指针中。此码准确传送。当地址时可由编译器完成此工作。
常规程序结构:
以ANY指针或(地址)方式传送:
LAR1 P##target //本地定义的ANY变量初始地址
L W#16#87 //为“V”区域载入码
T LB[AR1,P#6.0] //传送到ANY变量
CALL FCxy
source1: = #target //传送自创建的ANY指针
source2: = P#L 0.0 BYTE 8 //传送L数据区
寻址与通过ANY指针寻址的区别:
下图显示了寻址与通过自创建ANY指针寻址间的区别。在这种情况下“ 87”码不传送,因此ANY指针指向其本地区域。请参照:
在DB内进行间接寻址例子
147:下面是一个在STEP7软件中实现简单指针寻址的例子程序,您可以参考它的结构实现您的指针寻址功能?
siemens指针寻址例子_cpu315
148:地址和符号寻址的定义和区别是什么?
在STEP 7程序中要用到I/O信号、位寄存器、计数器、定时器、数据块及功能块。在程序中可以采用直接地址,或者便于读程序的符号寻址,例如Motor_A_On, 或采用你的公司或行业常用的代码。这样在你的用户程序中就可以通过符号来寻址。
地址:地址由地址标识符和存储器的位置组成,例如 Q1.0,I1.1, M2.0, FB21等。
符号地址 :如果为地址一个符号名,程序会便于阅读和查错。
STEP 7 可以自动将符号名翻译成所需的地址。如果要用符号名存取ARRAY、STRUCT、数据块、局部数据、逻辑块、以及用户自定义数据类型, 为地址一个符号名。
例如,可以为Q0.0 一个符号名MOTOR_ON,然后在程序中将MOTOR_ON作为一个地址使用。使用符号地址将您的过程控制项目中的元件与程序中的元件相对应。
注意:在符号名中不允许使用两个连续的下划线,例如MOTOR__ON。
编程支持 :LAD、FBD、STL中地址、参数、块名可用地址或符号表示。
用菜单命令View > Display > Symbolic Representation,可以切换地址和符号地址
为了使用符号地址编程加容易,可以同时显示地址和符号名。使用菜单命令 View > Display > Symbol Inbbbbation来。这就意味着STL语句的注释包含了多的信息。不能在该界面下进行修改,只能在符号表(symbol table)或变量声明表(variable declaration table)中进行修改。
149:S7-300/400系统存储区域共有多少种?
S7 CPU的系统存储区域分为下表中列出的区域。在程序中可以根据相应的地址直接读取数据。