DCS数据采集技术_第1页
DCS数据采集技术_第2页
DCS数据采集技术_第3页
DCS数据采集技术_第4页
DCS数据采集技术_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 DCS数据采集技术10页1、6万字目前各种I/O设备提供得对外数据接口可分为以下几类:L 数字通讯接口,包括串口类,以太网(TCP/IP协议)类,现场总线类,仪器总线类通讯接口(如GP IB等)、加 模拟量通道输岀,设备直接提供4 一 20mA, 1-5 V或继电 器接点信号等、力控 具有世界上大部分主流设备得I/O接口程序,对GPI B总线以及Hon eywell, Yokogawa,Fox bor o ,Fis h er-Rosemount等厂家得DCS也能够支持、介除通常意义上得数 拯采集外,力控可以利用采集到得实时数据对装置进行实时建模,插入力控自己得先进控制控件,实施先进控制

2、、5、1对一个设备上得数拯泄义不同得采集周期a如果一台设备上有1 000个实时数据需要 采集,而在这1 0 0 0个数据中只有10个就是经常亠刷新且需要密切监视得,其余9 90个 全部就是辅助数据,但就是也需要时常査瞧、如果把这10 0 0a个数据同等地对待,采用统一 得扫描周期进行采集,就会严重影响1 0个重要数据得刷新速度、怎样既保证100 0个数据都能够采集,又确保这1 0个重要数据得采 集速度呢有两 种办法:办法1:为一个设备左义两个逻辑设备,使其具有不同得采集周期,如图5 1所示、 但就是这种方法左义得最长扫描周期为10分钟、亠办法2:不用上而得办法,一台设备只泄 义一个设备划称也可

3、以达到要求、因为力控 得I/Oa驱动对画而中不显示而且没有组态历 史趋势与报警得数据就是不采集得,仅当画面中显示这个数据时才进行采集、因此将不常用得数据单独组态在一个或几个画面中,使用完毕马上关闭 上就不会影响整个采集速度、这种方法适用于存在有大量不需要快速更新得数据得情况、必 图5 15、2合理设置扫描周期,避免引起设备死机a有些I/O设备内部只有一个CPU,同时负 责数据通讯与计算,如果在力控上设置得数据扫描周期太快容易使设备死机,因此在设置这一参数时应该慎重,最好通过多次试验确宦 丄一个合适得扫描周期、一般得串口设备得扫描周期可设在1 0-100亳秒之间、4、3通 过拨号方式与I/O设备

4、通讯亠力控 得所有串口 I/O驱动程序都支持通过MODEM以拨号方 式与设备通讯、只要正确设置电话号码即可,如图52所示、1弘、4通讯状态监视,设备状态数据得读取亠力控 为每一个I/O设备自动泄义了一个系统 变a量,假如系统中有一个设备PLC1,则每当PLC 1不能上与力控正常通讯时,系统变量$10 PLC1得值就会被置为1、I/O设备故障属于系统报警、计算机通讯口故障,电缆,PLC端通讯口得故障,PLC通讯口与计算机通讯口得参数设置不一致都会造成这种结果、还上有一种可能,就就是数据连接项错误, 如果il算机得命令发给PLC得只读参数,PLC就是不会予以理睬得、亠5、5怎样用I/O 驱动程序调

5、试I/O设备介力控 得I/O驱动程序有数百个,针对每一种设备都有一个独立得程序、当力控 实时数据库DB没有启动时,单独启动I /0驱动可以作为本地I /O设备调试工具使用、此 时可以测试计算机与I/O设备得通讯情况,摸索最佳得扫描周期、介菜单“设垃S /参数用来规従I/O通讯亠过程中就是否显示计算机发出与 设备响应得通讯信息、如图5 3所示、亠菜单工具T/工具”用来在不启动实时亠数据库 及其数据连接项得情况下执行与I / 6设备得通讯、弹出对话框如图5-5部所示、此时 可以按”参数设宜”按钮设程通讯参数,如必图5-6与5-7所示,主要就是设程串口得DCB 参4数,1P地址等、亠图52 a图53

6、图5-4正确设置参数后,按”连接设备”按钮,如果成功得话,连接设备按钮得标题变成断开连接”,表示可以收发亠数据了、如果在”参数设巻中设肖周期性发送周期“ 不为0,则在”连接设备后会岀现周期发送按钮,4否则出现手动发送”按钮、使用周期发送“或”手动发送按钮,可以4周期性或一次性地发送编借框中得数据了、介编辑框中数据得格式缺省就是混合方式得,如果您想发送编辑框中得数据,这也就是唯一得数据类型,它得形成规则如下:任何ASCII码(除)可以直接输入,T可以使用“ ”来输入;内就是由(空格)分隔得转意字符,它们得意义为:丄图5-5:用来输入;在发送数据就是表示延时1毫秒图5-6#:在发送数据就是表示延时

7、1 0亳秒$:在发送数据就是表示延时10 0亳秒!:在发送数据就是表示延时10 0 0亳秒J:表示它后而得数据就是十进制得(缺省就 是1 6进制)4(空格):作为分隔符,任何未泄义得字符都可以a作为分隔符,最好使用空格、 丄09:可以用来输入10进制或1 6进制数据、必F/af:可以用来输入16进制 数据、例子:abcv 3 0 *#$ 345对应得16进制数据串为:631I,62H, 63H, 7 6H, 5BH, 3 OH.33H,3 4 II, 3 5H:而亠且在 3 0H 之后有 1 1 11 亳秒得延时、亠当用在其它情况(不就是用来发送数据)时,唯一得差别就是没有了延时得概念、“其它

8、工具:校验使用混合格式得数据,计算常用得校验码,ASC 1 I码表显示使用1 6进制与10进制显示得ASCII码表,各种数据转换把混合格式,16/32位整数,32位浮点数等转 换位十上几种常用数据格式,除混合格式外淇它数拯格式为直接用空格分隔得数据串图575、6如何开发I/O设备驱动程序在力控 中有一个S DK工具包,叫做Fl OS SDK,可以开发硬件设备与计算机得通讯接口 程序、最简单得只需要编写几个函数就可以可以做自己得I/O驱动,现在支持得硬件类型上有 串口(RS4 85 /23 2/42 2 ),网络,板卡,硬件厂家提供DLL等多种方式得通讯类型、在该 SDK中开发自己得通讯接口,不

9、需要关心硬件与计算机通讯得细节,只需要了解通讯协议就可以金 了、如果通讯协议很复杂,该SDK中提供了足够灵活得手段满足不同层次得需要、例如: 在设备初始化时发什么命令或做其她处理,动态改变硬件通讯参数等等、5.6*. 1 FIOS开 发包简介FIOS负责完成与各种I / O设备进行数据交换、一方面,它把从I /O设备采集到得实时a过 程数据发送给数据库DB,另一方面,从D B发岀得下置数拯也通过FIOS发送给I/O设备、 根据监控PC与I/O设备之间通信机制得不同,FIOS主要支持两种工作方式:同步方式 与异步方式、异步方式适用以下一类I/O设备:这类I/O设备一般可以独立运行,与监控计算机之

10、间 通过串口,网络或N4ODEM连接、与监控计算机之间通过明确得消息传送(文本或二进制亠消 息)完成数据交换、数据交换过程为异步方式、丄同步方式适用以下一类I/O设备:这类I/O 设备或者依赖PC运行(如:插在PC插槽$内),或者独立运行、但与监控计算机之间主要通过 直接访问方式进行数据交换,具体形式包括:寄存器直接访问(如:板卡),API函数调用.ActiveX控件访问等、数据交换过程为a 同步方式、亠下而列举了 F I OS可实现得一些基本功能:底层通信功能:1),串口通信,包括:R S 232/42 2 / 4 8 5、2),TCP/ IP网络通信、3), M O DEM%通信,通过模拟

11、MODEM在电话网上通信、4),寄存器访问,如:各种DAS板卡、5),如它、 丄链路控制功能:用M代表Maste r,即上位机(监控PC工作站):S代表SI a ver,即下 位机(各种I/O设备)、对于异步方式,FIOS支持多种链路控制方式、链路控制方式支持以 下几种方式:1), M请求,S应答方式、2) ,M请求,S无应答方式、3), S主动发送,何亠彼 动等待、另外,对一次完整数据处理(读或写)过程,支持以下方式:1),1次请求.5次应答 方式、2 ) ,1次请求.1次应答方式、3), 1次请求,多次应答方式、4) ,0次请求,1亠次应答 方式、5),多次请求,多次应答方式、冗余功能:F

12、IOS支持得冗余方式包括:1),单监控站,双I/O冗余、2),双监控站,单M/O冗 余、3),双监控站,双I/O冗余、4),对于总线型设备(如RS485),提供总线监测功上能, 可实现对冗余通信网络得保护与监测、前端机功能:DB与IO Ser v er不在同一工作站上,I O Server运行在前端机上,前端机 与操作站之间通过串口,T CP/IP网络或MO D EM进行通信、硬件测试与远程调试功能:使用FIOS可完成对I/O设备得简单测试功能、另外可实现 远程调试、亠故障诊断与恢复功能:FIOS提供诊断机制,在较短得采集周期内报告故障得发 生,5断岀下位机故障情况、当下位机更换或恢复后,不需

13、要对FIOS及相关程序进行任 何人工干a预,而在较短时间自动恢复通信、当某一台,几台或部分通道发生故障,FIOS要 自动优化通信链,使其与英她下位机或通道之间得通信不受影响,保证通信效率、介界面显示 功能:为测试,调试,运行维护方便,FIOS提供显示界而,可显示包括:发 送,应答,状态信息,启动时间,分包数,分包信息,成功通信次数(发送次数,成功应答a次), 故障次数等信息、历史数据处理功能:对于某些能保存历史数据得设备(如:无纸记录仪等),FIOS能将 采集到得历史数据恢复到数据库D B中、5、6、2 FIOS SDK编程方式HOS SDK提供了一种简洁得,而向对象得编程方式以缩短开发时间,

14、降低开发难度、 FIOS SDK提供标准得开发接口与程序模板,程序员仅需要根据I/O设备得具体通信协 议或驱动接口说明,填写几个扫描函数得实现代码,进行必要得调试与测试,即可完成一种*FI OS得开发、FIOS提供得开发工具封装了大部分程序员不必关心得技术环巧,如:底层通信功能(串 口通信,网络通信等),设备超时处理,设备故障诊断等、同时FIOS提供各种调试工具, 方便程序员进行系统测试、HOS开发环境完全基于3 2位Wi n d o ws平台、它使用动态链接库(DLL)技术将程序 员开发得代码整合到力控系统中、FIOS提供给程序员得开发接口为API函数与C+类库、 5、6、3 HOS SDK

15、组件及示例程序FIOSSDK主要由4部分组成:设备组态接口 (I o d e v u i ),数据连接组态接口( I oitcmui)A编程接口 Ioapi与描扫程序Ioscan、Io d evui: 负责管理设备组态过程、loitemui:负责管理数据连接组态过程、Ioapi:负责完成与I/O设备间得数据交换,包括:对通信协议得解析,数 据a格式得转换等、lose an:主要完成对Ioapi部分得d 1 1代码进行周期性地扫描、同 时完成与1 /O设备得底层通信(串口通信,网络通信等),以及设备超时处理,设备故障诊断等、Io s can还负责与数据库DB之间得通信与协作、它把从I/O设备采集

16、到得数据经I oapi解析转换后 a提交给DB,或将DB下置给I/O设备得数据经Ioapi解析转换后写入1/ 0设备、Ios c an 就是FIO SSDK提供得一个标准软件工具、程序员仅需要开发Iod evu i , Io itemui.Ioapi三部分得代 码、示例程序4a FI OS S DK 提供 了两个示例:Dem o Con t roller 与 D e moM o dbus、*D e moContro I ler 就是一个初级编程示例,它能引导初学者快速掌握开发HOS得基本概念与方法.DemoModbus就是一个实用编程示例,它采用标准MODBUS通信协议,通过该示例, 丄可以掌

17、握在力控 平台上开发标准MODBU S设备1 /O驱动程序得方法、aFIOS SDK得全部内容都就是在安装在力控自动安装得,在力控目录下得子目录Fiossdk 中、FIOS SDK主要包含以下几部分内容:Examples,程序示例,仿真程序、Include, 头文件、Manual,文档说明、Uti 1 ity.调试工具、亠这2个示例具有一上得代表性,它们体现了 HOS SDK得主要功能、FIOSSDK提供了这2个示例得全部源代码,在它们得基础上,稍做改动,就可以开发出新得FIOS、我们把a 象这2个示例源程序一样具有模板作用得程序称为I / 0模板程序、为了提髙开发效率,我们 建议尽疑使用I/

18、O模板程序,这在一泄程度上,也减少,降低了编程错误得发生、常用术语a我们把F IOSDK中经常涉及得一些槪念给出迫义,有些术语虽然就是通用名词, 但在a FIO SDK中有特左含义、这些术语有一些在前文给出了解释,有一些会在后文中陆续 给出舲释、F I OS ForceCo n trol I/O Se r v e r,即力控 I/O 驱动程序FIOSSDKFIOS软件开发工具包FCI NSTDIR力控 软件系统得安装目录aFCAPPINST DIR用力控 创建得工程应 用得目录IOID 唯一区别各个I/O驱动程序得I / O标志Iod e v ui设备组态接口Ioitem u i数据连接组态接

19、口Ioa p i编程接口 Mo s c a n扫描程序I/O模板程序FIOS I SDK附带示例得源程序aI/O配置文件 设备组态时得缺省参数设巻 保存文件介连接项结构保存数据连接信息得数据结构IOITEMD E FI/O描述文件定义设备得类别,厂商,型号,通信方式等参数得文本文件Iodcsc、ixl程 序员在本文档范围内专指用FIOSSDK进行开发得技术人员扫描函数 包含在Ioapi中得API函数,它们由扫描程序周期扫描、扫描函数完成 对设备数据解析及格式转换IOC Input Output Cl a ss (输入输出类库)得缩写、4、6、4设备组态接口 IODEVUL DLLI/O描述文件

20、亠在使用力控 进行组态时,一般均涉及定义I/O设备得过程、在左义设备时, 要选择设a备得类别(PLC,智能仪表等),厂商,设备型号或通信协议,然后根据设备通信方 式(串a口方式,网络方式,其它方式等)设置参数、以上关于一种设备得信息(类别,厂商,型号,通信方式等)完全就是由I/O描述文件决泄得、I/O描述文件就是一个标准文本文件,根据 其规4左得填写格式,由程序员根据具体设备自行填写、下面介绍0描述文件得填写格式、 I/O描述文件得文件名为IODESC. TXT,安装目录为fTCINSTD I RIO ServersMO I I) ”、MO文件说明格式为:类别;厂商或1 0程序描述;执行文件名

21、称5子类型1;类型号:资源标志;提供设备地址4子类型2;类型号;资源标志;提供设备地址注意,子类型号不能重复、表示回车换行、最上而一行就是驱动程序得总体描述,亠包括三项、 各项之间必须以分号分隔、各项内容不能含有分号:、各项含义如下:类别,驱动程序所属类别,现分为以下几类:PLC,智能仪表,智能模块,变频器、程序员也可以自行扩展、厂商或10程序描述,1/0设备生产厂商名称,协议 统称,如四门子、执行文件名称,1/0驱动程序(运行程序)得名称,如opto_drv、exe 接下来几行为驱动程序所包含得设备类型得描述,如西门子包括S5.S7等,每一子类别一上行, 每行包括三项,各项之间必须以分号”;

22、分隔、各项内容不能含有分号”;”、各项含义金如下: 子类型,设备类型描述、如S5、类型号,设备类型编号,类型号不能重复、合法箒值为0, 1 , 2,3等、使用计算机资源,使用计算机何种通信资源通信,合法得值为0,1, 2等、含义如下:0,同步通信方式;1,串口通信方式;2.TCP/IP网络通信方式;3, MODEM通信方式;4,板卡方式;5,并口通信方式、提供设备地址:1表示需要指泄设备地址,否 则表示不需要设备地址、上管理程序会自动将相同厂商或IO程序描述相同得驱动程序归为同 一树下、开发I od evui*力控组态环境DRAW中得设备管理功能提供了一个根据I /O描述 文件可灵活配宜得标准

23、设备组态接口、这个组态接口提供了一些对常用设备参数进行设垃得方法、如:设备名称, 设备地址,通信端口,端口参数等、如下图所示:对于很多设备,如果标准设备组态接口能够满足要求,就不再需要自己编写Iodcvui接a口程 序了、比如示例DemoC o ntrol 1 e r采用得就就是标准设备组态接口、而示例D em o M o db 因为涉及一些特殊得参数设垃,就需要自己编写I o dev u i接口程序了、因此,I odevui接口程序实际上就就是对标准设备组态接口得一个补充与扩展,并可由程4序 员灵活控制、Iodev ui要以DLL形式提供、该DLL必须就是MFC扩展DLL、该DLL得 缺省文

24、件爼称为1 ODEVUI、DLL.该文件必须安装在目录FCINSTDI R IO Ser ver s IO 1 D“下、亠在进行设备组态时,力控得I/O设备管理程序会自动检查在目录” FCINSTDI RIOServersIOIDVT就是否存在10 DEVUL DLL文件、如果存在,则首先根据I/O描述文件 得格式,调出标准设备组态接口界面,当用户确认后,再调出I odevui组态接口界面;若不 存在该文件,则只调出标准设备组态接口界面、示例Dem oMo d bus得Iodev u i接口程序可以做为开发Io devui得模板程序、我们结合示 例DcmoModbu s得I ode v ui模

25、板程序具体解释实现过程、査11头文件1 odevui. h可以发 现,Iodevui. dll主要实现3个输出函数:dexter n * CH AFX_EXT_A P I long Ad d I o De v (c o nst c h ar* szDe v i ceName, ini n Type) ; cx t ern H Cu AFX_EXT_API Ion g Mod I oDe v ( c onst c h ar* szDeviceName);ex t em C AFX_EXT_API 1 o ng DelloDev ( c on s t ch a r* szDe v i c eNam

26、e); 在进行设备组态时,当增加一个设备时,力控 设备管理程序会自动调用AddloDev ()函 a数;当修改一个已创建设备时会调用Modlo D e v ()函数;当删除一个设备时会调用Dell o D e v ()函数、a英中,参数szDevi c eN a me为1/0设备名称(输入值,组态时由用户指左)、nTy P e为设亠备子类型号,由程序员在I /O描述文件中指泄、返回值为0表示操作成功:苴 它表示操作失4败、为了较好地实现程序结构化,本模板程序提供了一个CDevNda n类对设 备及组态操作过程进行管理、1 od e vui、dll 得 3 个输出函数 AddloDev (),

27、Mo d Io D ev () Del Io I) ev ()得具体实现过程就是在CDevMan得三个成员函数Add (), Mod ()与Del ()中实现得、首先瞧一下Add ()得实现代码:/* * * * * * * * * * * * * * * * * 亠添加 I/O 设备 A szDe viceName,设备名称(输入 值)/nType,设备子类型(用于一个驱动程序驱动多种类型设备)(输入值)/返回值说明:0,操作成功:其它,操作失败/* * * * 次*#* * * * * * * * * * * “ong CDevMan:: Add ( const char * s zD e

28、 v i ceNam e , int nTy p e)必i f (F i n d (szDevi c e Nam e ) a 必a f xMess a g eBox( 11 该数拯源名已经存在! ”); r e t u r n -1: a CDe vice* pDev = n e w C De v ic e (szDev i ceNam e jiType);i f(CaI 1 Dialog ( p Dev) _1 i s t、AddT a il(pDev): Stor e ():return 0; J elsedelete pDev:必 ret urn 1:)程序得一开始,调用Find ()函

29、数来查找就是否已有相同得设备名存在,如果有给出提示并 亠返回一1表示操作失败,否则生成一个CDevice对象并调用C a llDi a 1 og函数来显示一 个对话框,亠让用户做进一步得选择,如果用户进行确认,操作成功,它把此cDevi c e对象 加入设备链表中,并调用Stor e函数来保存设备信息、另外两个函数与它类似、Sto r e ()函数如下:Avoid C D e vMan:S tore () a C:7i f( (co n st char*) (” d d e acc、dat) ,C)CAr c hive ar(&fil e , C A rchi ve: : st o re);S

30、 erializ e ( a r);ar、Close():)该函数它先打开ddcacc、dat文件,如果不存在,就建立此文件、然后调用序列化函数对 它进行保存,最后关闭此文件、再瞧一临序列化函数:avoid C DevMan::Seri a li z e(CArchive &a r ) a a TRYC0bje c t : :Seriali z e (ar);mi s t、Se r i a li z e (ar); aCATCH(C) A*AfxMessagcBox(文件版本不匹配! ”);END_ CATCH该函数对m_list (由CDe vice类实例组成)进行序列化、在调用各个CDev

31、 i ce类实例 得序列化函数时,如果就是读取操作,会依次创建CD evice实例,并调用C Dev ice得序列 化函数,a随后把C Devi c e实例加入m_list链表、具体保存与读取得变量数据在CD e vic e类中控制.也a就就是说程序员针对不同得设备可以改写CDevi c e类,定义不同得成员变 屋,记录设备得不同得属性,对C De v ice类重载Scr i al ize即可实现设备得保存,加载,增加,删除与修改等功 能、4我们再瞧一下CDevi c e类序列化得实现过程:小o id CDe v ice: :Se ri a 1 i z e (C Arch i vc& a r)

32、亠i f (ar、I sStoring () a r ) m_dwData;2 a如果就是保存操作,序列化函数会将参数自动存盘;如果就是读取操作,序列化函数会 从磁a盘上读取参数值、亠8亠察瞧Cal I Dia 1 o g函数可以发现,它生成了一个对话框,让用 户做相应得选择,然后把用$户选择得信息保存在CD evic e类得成员函数中,以便于储存、 整个程序框架使用CDevice类来保存设备得信息、在CallDi a log函数中使用一个对话框, 来让用户进行选择设备得属性,并且在C allDialog函数中把它保存在CDevice类中、所 以对亠于一个新得设备,程序员所要做得工作就就是,分

33、析设备得协议査瞧就是否仅使用描 述文件就可以完成设备得左义,如果不能,那么应该编制loDevU i、dll、这时应分析应该增加哪一些 属性,泄义哪一些CDevice类得成员变量,以及显示什么样得对话框,让用户做什么样得选择、 所以程序员得工作重点在于修改C Device类,增加成选变量,并重载它得Se r i alize函数, 然后修改对话框,让用户做不同得选择,并把选择保存在C D e vice类得成员变量中即可、亠 在该示例中,我们泄义了 2个设备参数:acStrin g m_c sName; /设备得划称 DWORD m_dwD a ta; 用于保存数据这样只需在对话框中对m_csNam

34、 e与m_dwD ata赋值即可、/* * * * / /调用对话框立义数据源亠/pDev数据源指针返回值true成功/ / * * * * 次*次* * * * * * *和次* * * * * * * */ Abo o 1 CDe v M a n: : Cal I D i alog (CDe v i ce* pDev) 4 ASSERT ( p Dev);CDev D ef d 1 g;dig、m_nam e = pDev m_cs N ame;d lg、m_ n P r o to c ol = (pDev) m_dw D ata&0x01);必d 1 g、m_inP a c k L on

35、 g =(pDev m_d wData) ) 8) &Oxf f ;i f (IDOK = dig、DoModalO)p Devm_c s Name = dig、m_ n ame ; 叩 Dc v m_dwDa t a = (dl g、m_nP r o to col&0x01):必m_d wDa t a得第0位为1表示就是RTU方式 0表示ASCII方 式p D evm_d w Data = (pDev-m_dwDat a ) I (dl g、mn P ac k L ongcsPath+=nddeacc x d at; /数据保存在了工程目录得ddeacc. da t中D WORD data;

36、 cstring s trtemp;9s h ort t e mp:c;if( ( c o n s t c h ar*) c sPath,C)打开该文件 亠 CArch i v e ar ( & f ilc, CArch i ve:load ):读取得第一个数据就是泄义得设备得个数,/但就是因为可以通过GctDcviceCoun t函数得到设备得个数,/所以这里把读到得数据简单得丢掉、ar) t emp;i n t n D ev C nt = p M anag e rGe t Dev i ceC 0 unt();血 for (in t i = 0: i Ge t D e v ic e (i)

37、; Aar s trtcmp;/读取设备得名字 ar) d a ta; /读取数据/这两句在讲到Ioapi、d 11时再进行介绍pD e v i ce- SetPri v a t eDat a (l,long(d a t a &1) ; a p De v iceSetPr i vateD a t a (2Jong( (data8) & Oxff) ; DCB deb;pDevic e e tDC B (de b );d cb、fB i n a ry = TRUE;d cb、fOutxCtsF 1 o w = FALSE;deb、fOu t xD s rFlow = FALSE;deb、fDtr

38、Con t rol = DTR_CONTRO L.DISABLE: dcb、fNull = FALSE;d cb、fRtsCo n t r ol = RT S .CONTROL. D IS A B L E ; aP I) e vice- S etDC B (deb):a r、Clo s e():0; /关闭文件 a e Ises trtempT对不起,没有找到”;st r tern p += c s Pat h :strtemp+=程序不能运行! !;Afx Messa g eBox(st r temp);Po s t QuitM e s sage(O) 没有找到文件,给岀提示,并终止程序得运

39、行、)-注意序列化得内容与顺序必须与IoDevU i、dll致,否则会导致程序运行时产生错误、4、6、5 Ioitemu i介绍及编程示例在用力控进行组态时,把数据库DB中得点参数与某种设备得具体通道建立连接得过程被为数据连接过程、在进行数据连接时,一般还要指左数据转换格式,数拯长度等参 数、数据连接过程对于不同得I/O设备,其形式与内容可能完全不同、因此必须针对不同那I/O设备,设计相应得数据连接形式,保存各种参数信息、Ioitemui接口主要完成得两部 分功能,一就是为用户进行数据连接组态时提供一个界面亠另外就就是将用户组态得设备参 数信息用某种格式保存起来,以便在开发编程接口 Io a

40、pi时使用、我们左义了一个数据结构来保存设备参数信息,这就就是数据连接项结构(下面简称连 接项结构)I OITEMDEF、IOITEMDEF 定义在 Ioitemui. h 中:typcdef st r u ct IoItemD e fSt r uchar st r 64 ;long n 8 ; a I 0 I TEMDEF:这个结构就是一个通用结构,由程序员自己赋值,自己解释、Io i temui要以DLL形式提 供、该DLL必须就是MFC扩展DLL、该DLL得缺省文件名称为1 O ITEMUI、DLL. 该文件必须安装在目录FCINSTDIR I 0 S erversX I 0 I D下、

41、Ioitemu i得工作过程如下:在进行数据连接组态时,力控 得DBMAN管理程序会自动检查在目录” FCINSTDIR I 0 Sc rversIOID下就是否存在IOITEMUI、DLL文件、如果存在,则调出数据连 接组态接口界而、a下面介绍如何编写io itemui接口程序、Ioi t emu i . d 1 1 主要实现 1 个输岀函数:extern ”C AFX_EXT_A PI 1 o ng Do I temDlg( c on st c h ar a szDeviceName, i n t nTyp e , I OIT E MDEF &itcm, char * sz Desc, i

42、n t nF 1 ag);其参数说明如下:as z D e viceName,设备名称(输入值)、如果在力控中泄义了一个设 备Device 1,那么在给a该设备组点时,传给Doltem D1 g得sz I) evi c e Name值就就是字符 串”Dzicel、 “Type,设备子类型(用于一个驱动程序驱动多种类型设备)(输入值)、它 得值在IODESC、TXT中指定(参见上一章对I/O描述文件得介绍)、i t cm.数据连接项结构(返回值)、需要注意得就是,it e m除了就是输出值外,也就是输入值, DBMAN管理程序每次调用DoItemD 1 g ()时,将上一次操作赋给item得值传

43、递过来、 rzDcsc,数据连接项描述,用于DBMAN程序显示得提示信息、“Flag, 1表示增加 数据连接项,2表示修改,0表示删除(输入值)、其返回值0表示操作成功、其它,操作失败、Moi temui、dll得工作过程如下:亠当用户打开数据组点连接对 话框时,选中了一个点,并按下增加,修改或删除键,这时上就会调用Ioite mu i、dll得 DoItemDl g函数、程序员应该在此函数中,弹出一个对话框让用户a进行选择,在用户按下了 OK键之后,把用户得选择保存在item中,以后编制Ioapi、d 11时 可以利用这些信息、编程示例我们先结合示例DemoCon t r o Iler介绍如

44、何开发Ioitemu i、仿真器S i mControl 1 er得内部有数字区(DIO)与模拟区(AIO)、DIO与A I O区通道范 園为:2O5 5、每个DIO通道得数据得数值范帀为:0或1、每个A I O通道数据得数值 范帀为:040 9 5、亠所以我们应该在Do 1 temDlg函数中弹岀一个对话框,用户可以在此对话 框中选择输入通道与内存地址、输入通道有两个选项DIO通逍与AIO通道供用户选择,内存地址可以让用户亠输 入02 5 5之间得数据、13我们介绍一下如果不使用I/O模板,如何自己生成一个新得Ioit e mui工程:在VC卄环境下,选择菜单命令ne v,选择新建工程,工程

45、名为Ioitcmu i ,选择”MFC aAppwiz a rd (d I 1)M选项,在下一步DLL类型中选择MFC E x t ension DL L ”型,然后按下, F inis h N键.即可创建一个新得Ioit e mu i工程、金打开Io i tem u i、cp p文件,在文件得 开头加入#i nc 1 ude Io i temuix h M ,把Ioitemui、h拷入本工a程,然后在文件得最后键 入:Mong Do I t emDI g (con s t char * s t rD a t aSou r , i n t nTy p eJOITEM DEF &itenicha

46、 r * szD e sc, int n Flag)亠亠这就加入了 dll得输出函数、打开示例Demo C ontrol 1 ci得I o itemu i模板程序,它得Dolt emDlg ()函数实现过程如 下:1 on g Do 1 t e mDl g (cons t char * szD e vic e Name, 必 i nt nTy pe.IO I T E MD EF & i tem cha r * s zDescjn t nFl a g)血 CL i nkDl g d lg: d 1 g、item_n0 = item n 0; dig、it e m_n 1 = i t cm、n 1

47、 :s witch( nFl a g)亠 Mas e 0: / /删除操作retu r n 0 ;必增加或修改操作case 1: c ase 2 :if(dlg. DoModalO = I DOK) Ait e rrix n 0 =d I g. it e m_n0: i t e m、n(l =dlg、item_nl:s p rintf ( s z D e sc,% s M, ( L PCSTR)d lg. m_d e s c);sprintf(i t enu s tr/1% s , (LPCSTR)dlg、m_desc);return 0:)br e a k: a Are t u r n 1;

48、必金在这个模板程序里,还涉及一个对话框类CLin k D 1 g、 这个对话框为用户进行数据连接 组态时提供一个界而,英形式如下:1 2CL i nkD 1 g类有2个成员变量:CSt ring m_desc;/保存连接项描述Mn t i tem_ n 2: /it e m_ n 0保存数据区类型,0表示D I O , 1表示A IO:/ / item_n 1 保存地址在 CLinkDI g 得 W M_INITDIALOG 消息函数中进行如下处理:BOOL CLi n kDlg:: O n Init D ialo g () aCDia I og: Onl n itDialogO; Z /在此

49、处设苣值使对话框得显示与就是一次选择相同, 以利于执行与上一次相近得操作m_CtrlC h a nne I SetC u rSel ( i tem_n 0 ) ; / / 设置操作选项为上一次得操作 am_n A d dr = it e m_n 1 : 设置地址为上一次得值 UpdateData (FALSE);r e turn TRUE; 4这些处理为了使对话框得显示与上一次选择相同,以利于执行与上一次相近得操作、在 ONOK消息函数进行如下处理:voidCLinkD 1 g:: On 0K() AUpdateDat a (TRUE); / / 得到各个选项得值 aC Strings tri

50、 ng: a i tem_n0 =m_Ct r IChann e 1. GetCurSe I (): / 保存操作选项 刚“_Ctr 1 C h an n el、GetWind o w T e x t (m_ d esc); M e m_n 1 = m_n Ad dr:/ 保存输入得地址 m_dcsc + = 起始地址:;st r ing、Form a t( %d , m_ n A d dr);m_d e s c+=s t ri n g;CDia 1 og:: OnOK(); *在这个函数里,耙用户组态得内容(数据区得选择,地址得指泄)保存在iwm_n,并根上据 这些内容生成连接项描述、5、6

51、、6扫描程序IOSCAN a 1OSCAN就是FIOS得一个主要程序模块、它负责完成对 IOAPI部分得DLL代码进行周期性地扫描、同时完成与I/O设备得底层通信(串口通信,网络通信等),以及设备超时处 理,设备故障诊断等、1OSCAN还负责与数据库DB之间得通信与协作、它耙从O设备采 a集到得数据经I OAP I解析转换后提交给DB,或将D B下苣给I/O设备得数据经IO API 解析4转换后写入I/O设备、MOSCAN就是HOS SDK提供得一个标准软件工具供程序 员在调试与运行时直接使用、1 3FIOS开发工具包里提供了 debug与rcl ease版本得IOSCAN程序,在目录FCIN

52、STDIRFio s sd kUti 1 i t y 11下可以找到它们、Deb ug版本得IOSCAN程序主要 供程序员在a调试时使用,它能提供更为丰富得调试信息、在使用时,需要把IO SCAN、EXE 以及配套紐几个DL L文件(即目录FCINS TDIR Fiossdk UtilityDebug 下得D LL 文件)拷贝到生成得ebug版本得I OAPI、DLL文件得同一目录下(注意:de b ug版本 得IOAP I、DLL文件必须配合de b ug版本得IOSCAN程序,rc 1 ca s c版本得IO API、 DLL文件必须配合re 1 e a s e版本得IOSCAN程序)、同

53、时不要忘记将IOS CAN、EXE得文件名更改为要开发得I/O驱动得1 O 1名称、debug版本得IOSC AN需要程序员手工启动或用VC+调试启动、5、6、 7 编程接口 IOAP I、DLLIOAPI就是FIOS提供得最主要得一个编程接口、程序员得主要工作就就是开发IOAPI 部分A得程序代码、A I 0 API提供了一组API函数与一些C+类库、这组API函数规左 了名称,参数及返回值,函数内容由程序员根据具备得I/O设备编程实现、C+类库则为程序员提供各种获取 力控1/ 0组态信息,参数设豊信息,与数据库DB进行数据交换等数据处理得方法、我们把这 a组A PI函数称为扫描函数,把这些

54、C+类库称为1 OCJOC就是Inpu t Ou t pu t Class(输入输出类库)得缩写、亠程序员编写得Io a pi最后要形成MFC得扩展动态链接库(MFC Ext e nsion DLL),扫扌帝函数就是这个DLL得输岀函数、当力控 系统运行时,力控FIOS得扫描程序Io scan对 Ioapi中扫描函数部分得d 1 1代码进行周期性地扫描,它把从I/O设备采集到得数据经扫描函数解 亠析转换后提交给D B,或将DB下置给1/0设备得数据经扫描函数解析转换后写入I/O设备、 归结起来,开发Ioapi得主要内容就就是用IOC编写扫描函数、HOC中得所有类库全部以 纯虚类得形式提供,并且

55、只有成员函数,没有成员变呈:、目4前IOC中主要包括4个类:C 1 tem CP a c kct.CDcv i c e,CM a nager Clt e 数据项类、 MPackc t,数据包类、 CDe v i c Ci设备类、CMana g er管理器类、a个FIOS实例创建一个CM a n ager 实例、用户在组态时每定义一个设备,则创建一个CDevi c e实例、CMan a ger对所有得CDevice进行管理、一个CDevice实例,由一个或多 个M2Pac k et实例组成,而每个C Packet实例又由一个或多个CIt e m实例组成、每个Cltem 实例A对应数据库DB中得一

56、个点参数,也就就是对应I/O设备得一个点“(如:设备得一 个通道,一个参数等)、MOC提供得这4个类库,实际上就就是对以上所述得这几种数据对象提供 了一组操作方法,以供程序员更加灵活得控制程序、Ci t em 类C I tem类提供了对数据项对象得一组操作方法、一个数据项对象包含得就是数据库D B中 得一个点参数与I/O设备中一个物理通道得映射关系、Cltem使用得基本数据结构就是MOI TEM DEF. 一个C I tem实例保存一个I OITEMDEF实例、101T EMDEF得定义如下: t y pedef s tni c t I o Item DefS t r u a char str64; long n 8: I OITEMDEF: AlbCItc m 类得定义如下:class C I t em : pub 1 icCO bjectpu b 1 ic: A virtu a 110 IT E MD E F* Ge t It e mStr u (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论