企业技术开发2012年11月摘 要:文章通过研究ControlNet 网络传输信号的特点,根据发生故障时,接收方信号保持不变的特征,开发一段故障检 测程序,用于判断ControlNet 网络运行是否正常,并在发生故障时能及时报警提示、自动停机,确保加香加料精度在工艺 标准允许的范围内,把故障影响程度降到最低,避免发生质量事故。关键词:ControlNet ;PLC ;网络故障中图分类号:TQ172文献标识码:A 文章编号:1006-8937(2012)31-0006-02 The development and application of ControlNet network fault detection program WANGJian-sheng,HUANGFu-jian,WUYong (ChinaTobaccoGuangxiIndustrialCO.,Ltd.,LiuzhouCigaretteFactory,Liuzhou,Guangxi545006,China )Abstract:ThroughthestudyofControlNetnetworktransmissionsignalcharacteristic,thispaperdevelopsonefaultdetectionprogramac-cordingtothefeaturethatthesignalremainsthesameduringfailure,usedtojudgetheControlNetNetworkrunningwhethernormallorfault,afaultoccurscanbetimelyalarm,automaticstop,ensureaccuracyintheprocessofflavoringstandardsallowedrange,thefaultin-fluencedegreedroptoaminimum,avoidtheoccurrenceofqualityaccidents.Keywords :ControlNet;PLC;networkfault ControlNet 网络故障检测程序开发及应用 王建生,黄富建,巫勇 (广西中烟工业有限责任公司柳州卷烟厂,广西柳州545006) 收稿日期:2012-09-22 作者简介:王建生(1971—),男,广西柳州人,大学本科,工程师,主要 从事制丝设备电气维修、设备管理、设备技改相关工作。 企业技术开发TECHNOLOGICAL DEVELOPMENT OF ENTERPRISE 第31卷第31期Vol.31No.31 2012年11月 Nov.2012 制丝线各控制段采用A-B 公司ControlLogix5555处理器为主控制器,各控制段PLC 与香料厨房PLC 的信息交换,各控制段PLC 间的运行连锁关系全部是通过ControlNet 进行传输,生产过程中一旦出现ControlNet 网络故障(如某一电柜意外停电造成网络不通),PLC 间的连锁信号将失去有效控制,接收方收到的信号会保持网络故障前一时刻的状态,造成香料厨房PLC 按固定流量继续施加料液(因接收到电子秤流量信号保持不变),因系统本身无网络状态检测、 无故障报警、无自动停机功能,若操作人员发现不及时或者采取措施不果断、有效,很容易导致加香、加料精度超标,甚至出现整批烟质量事故的严重后果。为此,有必要编制一段故障检测程序来表征ControlNet 网络运行状态,时刻侦测网络运行状态,一旦发生故障时,能准确判断、及时停机,保证加香加料精度在工艺标准允许的范围内,把故障影响程度降到最低,避免发生质量事故。 1 ControlNet 网络概述 1.1 ControlNet 网络的通信模式 ControlNet 是一种高速确定性网络, 用于对时间有苛刻要求的应用场合的信息传输,网络总线速率为5Mbps ,同一链路上允许有多个控制器同时存在,网络上节点居于对等地位,可以从任意节点实现网络存取。采用生产 者/消费者通信模式,允许网络上的所有节点同时从同一个数据源存取相同的数据,数据一旦产生,便与客户的数量无关,从而使网络通信效率更高。生产者/消费者模式还采用广播式信息发送方式,各个节点客户可以在同一时间接收到生产者所发送的数据,节点之间接收信息精确同步。总线拓扑结构可以是星型、树型、总线型或是它们之间的任意组合,使用中继器可延长网络的传输距离,中继器数量只受到系统延迟时间的限制,整个网络支持冗余结构。1.2 制丝线网络结构 系统中PLC 采用美国A-B 公司的ControlLogix 系列产品,主要配置有:1756-L55M24、1756-PA75、1756-A13、1756-CNBR 、1756-DNB 、1756-IB32、1756-OB32等。 为了保证系统的可靠性,ControlNet 网络采用了双冗余模式,网络总长度超过1000m ,采用了中继器进行扩展。上位监控机一方面通过1784-PCIC 卡直接与底层PLC 通讯,另一方面通过以太网卡与管理系统进行数据交换。制丝线网络结构图,如图1所示。1.3 故障检测原理 为保证传输时间准确,采用生产者/消费者模式进行信号传输,根据ControlNet 网发生故障时,接收端收到信号保持不变的特性(保持网络中断前接收的信号),我们在发送端定时发送变化有规律且一个周期内不会有重复的特定信号,在接收端对本次收到的信号和上次收到的信号进行比较,若两者不一致,则网络正常;反之,网络故障。网络故障检测原理图,如图2所示。
编写Windows https://www.doczj.com/doc/2016741076.html,的usb驱动程序教程 Windows https://www.doczj.com/doc/2016741076.html, 是微软推出的功能强大的嵌入式操作系统,国内采用此操作系统的厂商已经很多了,本文就以windows https://www.doczj.com/doc/2016741076.html,为例,简单介绍一下如何开发windows https://www.doczj.com/doc/2016741076.html, 下的USB驱动程序。 Windows https://www.doczj.com/doc/2016741076.html, 的USB系统软件分为两层: USB Client设备驱动程序和底层的Windows CE实现的函数层。USB设备驱动程序主要负责利用系统提供的底层接口配置设备,和设备进行通讯。底层的函数提本身又由两部分组成,通用串行总线驱动程序(USBD)模块和较低的主控制器驱动程序(HCD)模块。HCD负责最最底层的处理,USBD模块实现较高的USBD函数接口。USB设备驱动主要利用 USBD接口函数和他们的外围设备打交道。 USB设备驱动程序主要和USBD打交道,所以我们必须详细的了解USBD提供的函数。 主要的传输函数有: abourttransfer issuecontroltransfer closetransfer issuein te rruptransfer getisochresult issueisochtransfer gettransferstatus istransfercomplete issuebulktransfer issuevendortransfer 主要的用于打开和关闭usbd和usb设备之间的通信通道的函数有: abortpipetransfers closepipe isdefaultpipehalted ispipehalted openpipe resetdefaultpipe resetpipe 相应的打包函数接口有: getframelength getframenumber releaseframelengthcontrol setframelength takeframelengthcontrol 取得设置设备配置函数: clearfeature setdescriptor getdescriptor setfeature
实验二ControlNet网络上ControlLogix与 PanelView的通信 在完成了1771 I/O到打包机的集成之后,你被告知需要升级操作员面板。操作员面板是一块带有大量按钮和指示灯的面板。指示灯总是烧坏,面板也难于保持清洁。而且,面板与经理办公室离得很近,它看起来又旧又破。你觉得这是采用新型PanelView终端的理想场合。触摸屏式的PanelView易于保持清洁,也可以免去指示灯烧坏的问题。并且,比起现有的操作员面板来说,PanelView能够组态,可以方便地连接到ControlNet网络。 维护经理表达了对于网络性能的一些担心。他说,ControlNet网络上有很多信息传送活动,而他需要在点动一个特定电动机的时候有更好的精度。你说没问题,我们可以将电动机点动信息放在预定带宽(Scheduled Bandwidth)中。 在本实验中,我们将使用PanelBuilder32软件为PanelView创建一个项目,将它能够与ControlNet网络上的ControlLogix系统进行通信。 本实验的主题: ●使用PanelBuilder32软件创建PanelView应用程序 ●组态PanelView在ControlNet网络上使用非预定信息(Unscheduled Messages) ●组态PanelView在ControlNet网络上使用预定信息(Scheduled Messages) 我们将利用以下实验设备进行工作:
组态PanelView的第一步是直接在PanelView上设置通信组态(Communication Configuration)。 1.在PanelView上,选择Communication Setup,按回车。 2.设定节点地址为12,Interscan Delay为100ms(触摸当前节点地址,调出一个按键窗 口,改变地址)。 3.按触摸屏的“Restart Terminal”区域。 4.在终端重新启动之后,通过RSLinx的RSWho窗口,检查你是否正在通过ControlNet 网络与PanelView进行通信。 5.通过选择Start → Programs → PanelBuilder32 → PanelBuilder32启动PanelBuilder32软 件。 6.选中“Create New Application”,并按OK,创建一个新的应用程序。 7.将应用程序的名字设为“Boxing Machine”。 8.按照下图,设定PanelView终端类型为PV1000 Color、Touch,通信协议为ControlNet 1.5。 9.点击“Catalog & Revision Numbers”按钮,选择FRN 3.30-3.xx。 10.按OK,接受组态情况,出现PanelView屏幕与相匹配的空白屏幕。 11.从主菜单选择“Application”,打开Terminal Setup对话框,然后从下拉菜单选择 “Settings”。 12.点击“Comms Setup”按钮,打开通信设置画面。 13.设定PanelView的节点地址为12,Interscan Delay为100ms。 14.在Node Name这一列选择“End of Node List”,然后右击鼠标,选择“Insert Node”, 按如下画面设置参数。
USB驱动程序编写 linux下usb驱动编写(内核2.4)——2.6与此接口有区别2006-09-15 14:57我们知道了在Linux 下如何去使用一些最常见的USB设备。但对于做系统设计的程序员来说,这是远远不够的,我们还需要具有驱动程序的阅读、修改和开发能力。在此下篇中,就是要通过简单的USB驱动的例子,随您一起进入USB驱动开发的世界。 USB骨架程序(usb-skeleton),是USB驱动程序的基础,通过对它源码的学习和理解,可以使我们迅速地了解USB驱动架构,迅速地开发我们自己的USB硬件的驱动。 USB驱动开发 在掌握了USB设备的配置后,对于程序员,我们就可以尝试进行一些简单的USB驱动的修改和开发了。这一段落,我们会讲解一个最基础USB框架的基础上,做两个小的USB驱动的例子。 USB骨架 在Linux kernel源码目录中driver/usb/usb-skeleton.c为我们提供了一个最基础的USB驱动程序。我们称为USB骨架。通过它我们仅需要修改极少的部分,就可以完成一个USB设备的驱动。我们的USB驱动开发也是从她开始的。 那些linux下不支持的USB设备几乎都是生产厂商特定的产品。如果生产厂商在他们的产品中使用自己定义的协议,他们就需要为此设备创建特定的驱动程序。当然我们知道,有些生产厂商公开他们的USB协议,并帮助Linux驱动程序的开发,然而有些生产厂商却根本不公开他们的USB协议。因为每一个不同的协议都会产生一个新的驱动程序,所以就有了这个通用的USB驱动骨架程序,它是以pci 骨架为模板的。 如果你准备写一个linux驱动程序,首先要熟悉USB协议规范。USB主页上有它的帮助。一些比较典型的驱动可以在上面发现,同时还介绍了USB urbs的概念,而这个是usb驱动程序中最基本的。 Linux USB 驱动程序需要做的第一件事情就是在Linux USB 子系统里注册,并提供一些相关信息,例如这个驱动程序支持那种设备,当被支持的设备从系统插入或拔出时,会有哪些动作。所有这些信息都传送到USB 子系统中,在usb骨架驱动程序中是这样来表示的: static struct usb_driver skel_driver = { name: skeleton, probe: skel_probe, disconnect: skel_disconnect, fops: &skel_fops, minor: USB_SKEL_MINOR_BASE, id_table: skel_table,
家装用尺寸一览表 Revised by Hanlin on 10 January 2021
家装用尺寸一览表 ▌标准入户门洞0.9m*2m, ▌房间门洞0.9m*2m, ▌厨房门洞0.8m*2m, ▌卫生间门洞0.7m*2m ▌客厅:长沙发:240*90*75cm长方形茶几:130*70*45cm电视柜:200*50*180cm电视离沙发:3m电视高度与电视柜高差:40到120cm走道宽度:100至120cm ▌厨房:橱柜操作台:台面高80cm左右面积90*46(最小20最大60)cm吊柜:离台面60cm左右高度在145cm到150cm餐桌:餐桌高:750—790mm。餐椅高;450—500mm。圆桌直径:二人500mm.二人800mm,四人900mm,五人1100mm,六人1100-1250mm,八人1300mm,十人l500mm,十二人1800mm。方餐桌尺寸:二人700×850(mm),四人1350×850(mm),八人2250×850(mm) ▌卫生间:浴缸长度:一般有三种1220、1520、1680mm;宽:720mm,高:450mm。坐便:750×350(mm)。冲洗器:690×350(mm)。盟洗盆:550×410(mm)。淋浴器高:2100mm。化妆台:长:1350mm;宽450mm。 ▌卧室:标准双人床尺寸:150*190、150*200厘米,被套的尺寸应配180*215和200*230之间的。加大双人床尺寸:180*200厘米,被套一般为200*230或220*240。床头柜宽:400毫米-600毫米,深:350毫米-450毫米高:500毫米-700毫米。衣柜:柜门尺寸,单
网络系统结构 在一个开放式自动化系统结构中,通常包含有三个网络层:即设备层、控制层以及信息层。 设备层:将低层的设备直接联接到车间控制器上这种联接无需通过I/O模块。即用方便而快速的链路采集各种各样的、来自不同厂家、距离远近不同的现场设备(如传感器、驱动器)的数据,对其进行配置和监视 控制网:各个PLC之间及其与各智能化控制设备之间,进行控制数据的交换、控制的协调、网上编程和程序维护、远程设备配置和查、排错误,也可以联接各种人机界面产品进行监控。 信息网:提供上层计算机系统,以便通过以太网访问车间级的数据,主要为了全厂范围控制系统的数据汇集和监视。数据量大而实用性要求不高,它的开放性协议使各种主计算机和不同厂家的PLC可以互连。在必要时也可以进行一些控制和协调。这一层采用符合公共标准TCP/IP协议的以太网。 DEVICENET与 CONTROLNET区别 DeviceNet是由Allen-Bradley公司(Rockwell自动化)发的一种基于CAN的开放的现场总线标准。DeviceNet作为一种高性能的协议,DeviceNet协议设计简单,实现成本较为低廉,但对于采用最底层的现场总线的系统(例如,由传感器、制动器以及相应的控制器构成的网络)来说,却是性能极高的。
DeviceNet设备涉及的范围从简单的光电开关一直到复杂的半导体制造业中的用到的 真空泵。就像其他的协议一样,DeviceNet协议最基本的功能是在设备及其 相应的控制器之间进行数据交换。因此,这种通信是基于 面向连接的(点对点或多点传送)通讯模型建 立的。这样,DeviceNet既可以工作在主从模式,也可以工作在多主模式。一 个DeviceNet网络工作在125k、250k和500k的波特率下最多可以支持64个节点。设备可以使用自身的电源,也可以通过DeviceNet总线供电。和CANopen协议相比较后可以看出,两种协议可以实现相类似的功能,但DeviceNet更强调不同的优先权。例如,在DeviceNet 网络中,网络管理功能存在于每一个独立的节点之中,这样,个节点都可以监控其他节点。而在CANopen网络中,则采用了中心授权机制,通过一个NMT-Master对网络进行管理。CANopen的通信机制更加简单,从而可以降低设备的复杂程度。使用DeviceNet可以提供更高的安全性,。 ControlNet是于生产者/消费者模式(Producer/Consumer Model)的网络。ControlNet 允许在同一链路上有多个控制器共存,支持输入数据或端到端的多路发送,这就大大的减少了网络上的交通量,提高了网络效率和网络性能。ControlNet是高度确定性、可重复性的网络。ControlNet能预见数据何时能够可靠传输到目标的能力,同时数据的传输时间不受网络节点添加/删除情况或网络繁忙状况而保持恒定的能力。在实际应用中,通过网络组态时选择性设定有计划I/O分组或互锁时间,这些要求能得到更进一步的保证。生产者/消费者模式允许网络中所有的节点同时获取来自同一数据源的数 据。最终,该模式提高了效率,因 为数据只发送一次,而与数据使用 者(Consumer)的数量无关,并且具有精确的同步性。因为数据将同时到达每一个节点。生产者-消费者模式的优点在于:多个节点可以同时消费(Consume,即读取)来自同一个生产省(Producer,即数据源)所提供的数据。节点间易于同步,可以获得更为精确的系统性能,设备可以实现自主通信,无需系统主站。ControlNet提供了简单、高度确定而且灵活的传输数据方式。ControlNet在执行操作、数据实时监控时不会影响到I/O控制的性能。因此,ControlNet非常适用于一些控制关系有复杂关联、要求控制控制信息同步、协调实时控制、数据传输速度要求较高的应用场合。 ControlNet的明显优点是:同一链路上满足I/O数据、实时互锁、端到端报文传输和 编程/组态等信息应用的多样要求;是确定性、可重复性的控制网络,适合离散控制和过程控制;同一链路上允许有多个控制器同时共存;输入数据和端到端信息的多路发送支持;可选的介质冗余和本征安全;安装和维护的简单性;网络上节点居于对等地位,可以从任意节点实现网络存取;灵活的拓扑结构(总线型、树型、星型等)和介质选择(同轴电缆、光纤和其它)。 区别 1.Controlnet 和Devicenet 组网方式不同,需要rsnetworx for contronet & rsnetworx for devicenet,C网比较好组,D网有些难度。
USB设备驱动程序设计 引言 USB 总线是1995 年微软、IBM 等公司推出的一种新型通信标准总线, 特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1 已经发展到目前的2.0 版本,2.0 版本的最高数据传输速度达到480Mbit/s,能 满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB 总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB 接口芯片供设计者使用,为了开发出功能强大的USB 设备,设计者往往 需要自己开发USB 设备驱动程序,驱动程序开发一直是Windows 开发中较难 的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工 作效率,本文使用Compuware Numega 公司的DriverStudio3.2 开发包,开发了基于NXP 公司USB2.0 控制芯片ISP1581 的USB 设备驱动程序。 USB 设备驱动程序的模型 USB 设备驱动程序是一种典型的WDM(Windows Driver Model)驱动程序,其程序模型如图1 所示。用户应用程序工作在Windows 操作系统的用户模式层,它不能直接访问USB 设备,当需要访问时,通过调用操作系统的 API(Application programming interface)函数生成I/O 请求信息包(IRP),IRP 被传输到工作于内核模式层的设备驱动程序,并通过驱动程序完成与UBS 外设通 信。设备驱动程序包括两层:函数驱动程序层和总线驱动程序层,函数驱动程 序一方面通过IRP 及API 函数与应用程序通信,另一方面调用相应的总线驱动 程序,总线驱动程序完成和外设硬件通信。USB 总线驱动程序已经由操作系统 提供,驱动程序开发的重点是函数驱动程序。 USB 设备驱动程序的设计
家具设计的基本尺寸(单位:cm) 衣橱:深度:一般60~65;推拉门:70,衣橱门宽度:40~65 推拉门:75~150,高度:190~240 矮柜:深度:35~45,柜门宽度:30-60 电视柜:深度:45-60,高度:60-70 单人床:宽度:90,105,120;长度:180,186,200,210 双人床:宽度:135,150,180;长度180,186,200,210 圆床:直径:186,212.5,242.4(常用) 室内门:宽度:80-95,医院120;高度:190,200,210,220,240 厕所、厨房门:宽度:80,90;高度:190,200,210 窗帘盒:高度:12-18;深度:单层布12;双层布16-18(实际尺寸) 沙发:单人式:长度:80-95,深度:85-90;坐垫高:35-42;背高:70-90 双人式:长度:126-150;深度:80-90 三人式:长度:175-196;深度:80-90 四人式:长度:232-252;深度80-90 茶几:小型,长方形:长度60-75,宽度45-60,高度38-50(38最佳) 中型,长方形:长度120-135;宽度38-50或者60-75 正方形:长度75-90,高度43-50 大型,长方形:长度150-180,宽度60-80,高度33-42(33最佳) 圆形:直径75,90,105,120;高度:33-42 方形:宽度90,105,120,135,150;高度33-42 书桌:固定式:深度45-70(60最佳),高度75 活动式:深度65-80,高度75-78 书桌下缘离地至少58;长度:最少90(150-180最佳) 餐桌:高度75-78(一般),西式高度68-72,一般方桌宽度120,90,75;长方桌宽度80,90,105,120;长度150,165,180,210,240 圆桌:直径90,120,135,150,180 书架:深度25-40(每一格),长度:60-120;下大上小型下方深度35-45,高度80-90活动未及顶高柜:深度45,高度180-200 木隔间墙厚:6-10;内角材排距:长度(45-60)*90
4.2 ControlNet 网络组态 1.作为当今最先进的网络,ControlNet具备诸多特点。实时I/O、控制器互锁、对等报文传输(Peer-to-Peer Messsaging)以及编程操作都可以在同一条ControlNet链路上实现。ControlNet本质的确定性可以确保数据何时发送,其可重复的性能确保网络传输时间不会随网络设备的添加或删除而改变。 2.Controlnet的主要技术特点: 网络功能:统一链路支持控制信息、I/O数据、编程数据 网络拓补:线形、星形、树形、以及以上的任何拓扑结构的混合 网络速度:5Mbits/s(最大) 单段网长度:(同轴电缆)1000m带个2节点,250m带48个节点。(光纤)3000m 中继器数目:(串行)最大支持5个中继器,连接6个网段。(并行)最大支持48个中继器,连接48个网段。 中继器类型:AC&DC高压型和DC低压型 设备供电:设备采用外部供电 网络模型:生产者/客户模式 连接器:标准同轴电缆BNC 物理层介质:RG6同轴电缆、光纤 网络节点数:99个最大可变址节点,不带中继器的网段最多48个节点 带中继器最大拓扑结构:(同轴电缆)5000m,(光纤)30Km 应用层界面:面向对象层设计,包括设备对象模型,类/实例/属性,设备规范(Profile) 网络刷新时间:可组态2-100ms 数据分组大小:可变长0~510个字节 网络和系统属性:可带电插拔,确定性和可重复性,可选本质安全,网络重复节点检测,报文分段传送(块传送) 4.2.1 ControlNet用于I/O实时控制 本实验中,Logix5555控制器通过ControlNet网络控制由1794-ACNR15适配器连接的远程I/O模块。 实验步骤: 1. 打开RSLinx软件,添加Ethernet驱动,通过ControlLogix背板网关功能,访问ControlNet网络,如图4-18所示;也可以直接添加1784-PCICS ControlNet网卡的驱动。 图4-18 访问ControlNet网络
最新开发usb驱动程序的方法连载一 开发usb驱动程序的方法(连载二) NT还有更多其他的对象,例如中断对象、Controller对象、定时器对象等等,但在我们开发的驱动程序中并没有用到,因此在这里不做介绍。 I/O缓冲策略 很明显的,驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。这就就设计到设备的I/O缓冲策略。 读写请求的I/O缓冲策略 前面说到通过设置Device对象的Flag可以选择控制处理读写请求的I/O缓冲策略。下面对这些缓冲策略分别做一介绍。 1、缓冲I/O(DO_BUFFERED_IO) 在读写请求的一开始,I/O管理器检查用户缓冲区的可访问性,然后分配与调用者的缓冲区一样大的非分页池,并把它的地址放在IRP的AssociatedIrp.SystemBuffer域中。驱动程序就利用这个域来进行实际数据的传输。 对于IRP_MJ_READ读请求,I/O管理器还把IRP的UserBuffer域设置成调用者缓冲区的用户空间地址。当请求完成时,I/O管理器利用这个地址将数据从驱动程序的系统空间拷贝回调用者的缓冲区。对于IRP_MJ_WRITE写请求,UserBuffer被设置为NULL,并把用户缓冲区的数据拷贝到系统缓冲区中。 2、直接I/O(DO_DIRECT_IO) I/O管理器首先检查用户缓冲区的可访问性,并在物理内存中锁定它。然后它为该缓冲区创建一个内存描述表(MDL),并把MDL的地址存放在IRP的MdlAddress域中。AssociatedIrp.SystemBuffer和 UserBuffer 都被设置为NULL。驱动程序可以调用函数 MmGetSystemAddressForMdl得到用户缓冲区的系统空间地址,从而进行数据操作。这个函数将调用者的缓冲区映射到非份页的地址空间。驱动程序完成I/O请求后,系统自动从系统空间解除缓冲区的映射。 3、这两种方法都不是 这种情况比较少用,因为这需要驱动程序自己来处理缓冲问题。 I/O管理器仅把调用者缓冲区的用户空间地址放到IRP的UserBuffer 域中。我们并不推荐这种方式。 IOCTL缓冲区的缓冲策略 IOCTL请求涉及来自调用者的输入缓冲区和返回到调用者的输出缓冲区。为了理解IOCTL请求,我们先来看看WIN32 API DeviceIoControl函数的原型。 BOOL DeviceIoControl ( HANDLE hDevice, // 设备句柄 DWORD dwIoControlCode, // IOCTL请求操作代码 LPVOID lpInBuffer, // 输入缓冲区地址 DWORD nInBufferSize, // 输入缓冲区大小 LPVOID lpOutBuffer, // 输出缓冲区地址 DWORD nOutBufferSize, // 输出缓冲区大小 LPDWORD lpBytesReturned, // 存放返回字节数的指针
家具设计的基本尺寸(单位:厘米) 衣橱:深度:一般60~65;推拉门:70,衣橱门宽度:40~65 推拉门:75~150,高度:190~240 矮柜:?深度:35~45,柜门宽度:30-60 电视柜:深度:45-60,高度:60-70 单人床:宽度:90,105,120;长度:180,186,200,210 双人床:宽度:135,150,180;长度180,186,200,210 圆床:?直径:186,,(常用) 室内门:宽度:80-95,医院120;高度:190,200,210,220,240 厕所、厨房门:宽度:80,90;高度:190,200,210 窗帘盒:高度:12-18;深度:单层布12;双层布16-18(实际尺寸) 沙发:单人式:长度:80-95,深度:85-90;坐垫高:35-42;背高:70-90双人式:长度:126-150;深度:80-90 三人式:长度:175-196;深度:80-90 四人式:长度:232-252;深度80-90 茶几:小型,长方形:长度60-75,宽度45-60,高度38-50(38最佳) 中型,长方形:长度120-135;宽度38-50或者60-75 正方形:?长度75-90,高度43-50 大型,长方形:长度150-180,宽度60-80,高度33-42(33最佳)
圆形:直径75,90,105,120;高度:33-42 方形:宽度90,105,120,135,150;高度33-42 书桌:固定式:深度45-70(60最佳),高度75 活动式:深度65-80,高度75-78 书桌下缘离地至少58;长度:最少90(150-180最佳) 餐桌:高度75-78(一般),西式高度68-72,一般方桌宽度120,90,75; 长方桌宽度80,90,105,120;长度150,165,180,210,240 圆桌:直径90,120,135,150,180 书架:深度25-40(每一格),长度:60-120;下大上小型下方深度35-45,高度80-90 活动未及顶高柜:深度45,高度180-200 木隔间墙厚:6-10;内角材排距:长度(45-60)*90 桌类家具高度尺寸:700mm、720mm、740mm、760mm四个规格; 椅凳类家具的座面高度:400mm、420mm、440mm三个规格。 桌椅高度差应控制在280至320mm范围内。
DEVICENET与CONTROLNET的区别 DeviceNet是由Allen-Bradley公司(Rockwell自动化)开发的一种基于CAN的开放的现场总线标准。DeviceNet作为一种高性能的协议,目前在美国和亚洲的市场上处于领导地位,其系统解决方案在欧洲也取得了显著的业绩增长。ODVA( DeviceNet用户组织)负责发布DeviceNet规范以及对DeviceNet标准进行维护,另外,ODVA也负责DeviceNet在世界范围内的推广。现在,最新版本的DeviceNet 2.0标准提供了更多的功能并修正了旧版本中的一些错误。 DeviceNet是一个开放性的协议,每个 ODVA成员都有资格发行基于 DeviceNet标准开发的后续产品。除了加入ODVA组织须交纳的会员费以及实际购买规范的费用外,使用DeviceNet是免版税的。现在已经有超过300家的公司注册成为ODVA的成员。全世界共有超过500家的公司提供DeviceNet产品。 DeviceNet协议设计简单,实现成本较为低廉,但对于采用最底层的现场总线的系统(例如,由传感器、制动器以及相应的控制器构成的网络)来说,却是性能极高的。DeviceNet 设备涉及的范围从简单的光电开关一直到复杂的半导体制造业中的用到的真空泵。就像其他的协议一样,DeviceNet 协议最基本的功能是在设备及其相应的控制器之间进行数据交换。因此,这种通信是基于面向连接的(点对点或多点传送)通讯模型建立的。这样,DeviceNet 既可以工作在主从模式,也可以工作在多主模式。 DeviceNet的报文主要分为高优先级的进程报文(I/O报文)和低优先级的管理报文(直接报文)。两种类型的报文都可以通过分段模式来传输不限长度的数据。 所谓的"预定义主/从连接集"适用于简单的DeviceNet从站设备。作为DeviceNet协议的子集,它支持从主站到从站传送的直接报文,轮询I/O报文,位选通I/O报文以及由从站向主站传送的状态变化/循环I/O报文。 "非连接报文管理端口(UCMM)"以及动态生成"直接及I/O连接"则适用于从站比较复杂的情况,这些从站可支持多个主站并能与其他设备维持点到点互联。设备启动报文和设备关闭报文是特别为安全相关系统设计的"离线连接设置"则简化了对非常规组件的配置工作。 DeviceNet的通信和应用都是基于对象模型的。预先定义好的对象简化了不同厂商的不同设备间的数据交换。通过建立不同设备的子集,用户可以从进一步的规范化中获益。
开发usb驱动程序的方法(连载一) 开始驱动程序设计 下面的文字是从Microsoft的DDK帮助中节选出来的,它让我们明白在开始设计驱动程序应该注意些什么问题,这些都是具有普遍意义的开发准则。应该支持哪些I/O请求在开始写任何代码之前,应该首先确定我们的驱动程序应该处理哪些IRP例程。 如果你在设计一个设备驱动程序,你应该支持和其他相同类型设备的NT驱动程序相同的IRP_MJ_XXX 和IOCTL请求代码。 如果你是在设计一个中间层NT驱动程序,应该首先确认你下层驱动程序所管理的设备,因为一个高层的驱动程序必须具有低层驱动程序绝大多数IRP_MJ_XXX例程入口。高层驱动程序在接到I/O 请求时,在确定自身IRP当前堆栈单元参数有效的前提下,设置好IRP中下一个低层驱动程序的堆栈单元,然后再调用IoCallDriver 将请求传递给下层驱动程序处理。 一旦决定好了你的驱动程序应该处理哪些IRP_MJ_XXX,就可以开始确定驱动程序应该有多少个Dispatch例程。当然也可以考虑把某些 RP_MJ_XXX处理的例程合并为同一例程处理。例如在ChangerDisk 和 VDisk里,对IRP_MJ_CREATE和IRP_MJ_CLOSE处理的例程就是同一函数。对IRP_MJ_READ和IRP_MJ_WRITE处理的例程也是同一个函数。 应该有多少个Device对象? 一个驱动程序必须为它所管理的每个可能成为I/O请求的目标的物理和逻辑设备创建一个命名Device对象。一些低层的驱动程序还可能要创建一些不确定数目的Device对象。例如一个硬盘驱动程序必须为每一个物理硬盘创建一个Device对象,同时还必须为每个物理磁盘上的每个逻辑分区创建一个Device对象。一个高层驱动驱动程序必须为它所代表的虚拟设备创建一个Device 对象,这样更高层的驱动程序才能连接它们的Device对象到这个驱动程序的Device对象。另外,一个高层驱动程序通常为它低层驱动程序所创建的Device对象创建一系列的虚拟或逻辑Device对象。 尽管你可以分阶段来设计你的驱动程序,因此一个处在开发阶段的驱动程序不必一开始就创建出所有它将要处理的所有Device对象。但从一开始就确定好你最终要创建的所有Device对象将有助于设计者所要解决的任何同步问题。另外,确定所要创建的Device对象还有助于你定义Device对象的Device Extension 的内容和数据结构。 开始驱动程序开发 驱动程序的开发是一个从粗到细逐步求精的过程。NT DDK的src\ 目录下有一个庞大的样板代码,几乎覆盖了所有类型的设备驱动程序、高层驱动程序和过滤器驱动程序。在开始开发你的驱动程序之前,你应该在这个样板库下面寻找是否有和你所要开发的类似类型的例程。例如我们所开发的驱动程序,虽然DDK 对USB描述得不是很详细,我们还是可以在src\storage\class目录发现很多和USB设备有关的驱动程序。下面我们来看开发驱动程序的基本步骤。 最简的驱动程序框架 1、写一个DriverEntry例程,在里面调用IoCreateDevice创建一个Device对象。 2、写一个处理IRP_MJ_CREA TE请求的Dispatch例程的基本框架 (参见DDK Kernel-Mode Drivers 4.4.3描述的一个DispatchCreate 例程所要完成的最基本工作。当然写了DispatchCreate例程后,要在DriverEntry 例程为IRP_MJ_CREA TE初始化例程入口)。如果驱动程序创建了多于一个Device对象,则必须为IRP_MJ_CLOSE 请求写一个例程,该例程通常情况下可以和DispatchCreate共用一个例程,参见参见DDK Kernel-Mode Drivers 4.4.3。 3、编译连接你的驱动程序。
提供全方位装修指南,装修设计知识、丰富设计案例! 家装各种最佳尺寸标准大全! 家装最实际的规格尺寸 标准红砖24*11.5*53; 标准入户门洞0.9米*2米, 房间门洞0.9米*2米, 厨房门洞0.8米*2米, 卫生间门洞0.7米*2米, 标准水泥50kg/袋。 厨房 1.吊柜和操作台之间的距离应该是多少? 60厘米。 从操作台到吊柜的底部,您应该确保这个距离。这样,在您可以方便烹饪的同时,还可以在吊柜里放一些小型家用电器。 2.在厨房两面相对的墙边都摆放各种家具和电器的情况下,中间应该留多大的距离才不会影响在厨房里做家务? 120厘米。 为了能方便地打开两边家具的柜门,就一定要保证至少留出这样的距离。 150厘米。 这样的距离就可以保证在两边柜门都打开的情况下,中间再站一个人。 3.要想舒服地坐在早餐桌的周围,凳子的合适高度应该是多少? 80厘米。 对于一张高110厘米的早餐桌来说,这是摆在它周围凳子的理想高度。因为在桌面和凳子之间还需要30厘米的空间来容下双腿。 4.吊柜应该装在多高的地方? 145至150厘米。
提供全方位装修指南,装修设计知识、丰富设计案例! 餐厅 1. 一个供六个人使用的餐桌有多大? 2. 120厘米。 这是对圆形餐桌的直径要求。 140*70厘米。 这是对长方形和椭圆形捉制的尺寸要求。 2.餐桌离墙应该有多远? 80厘米。 这个距离是包括把椅子拉出来,以及能使就餐的人方便活动的最小距离。 3.一张以对角线对墙的正方形桌子所占的面积要有多大? 180*180平方厘米。 这是一张边长90厘米,桌角离墙面最近距离为40厘米的正方形桌子所占的最小面积。 4.桌子的标准高度应是多少? 72厘米。 这是桌子的中等高度,而椅子是通常高度为45厘米。 5.一张供六个人使用的桌子摆起居室里要占多少面积? 300*300厘米。 需要为直径120厘米的桌子留出空地,同时还要为在桌子四周就餐的人留出活动空间。这个方案适合于那种大客厅,面积至少达到600*350厘米。 6.吊灯和桌面之间最合适的距离应该是多少? 70厘米。 这是能使桌面得到完整的、均匀照射的理想距离。 卫生间 1.卫生间里的用具要占多大地方? 马桶所占的一般面积: 37厘米×60厘米。
PLC知识 一、概述 ControlNet是近年来推出的面向控制层的实时性现场总线络,在同一物理层介质链路上提供时间关键性I/O数据和报文数据,包括程序的上载/下载,组态数据和端到端的报文传递等通讯支持,是具有高度确定性、可重复的高速控制和数据采集络,I/O性能和端到端通讯性能都较传统络有较大的提高。 二、ControlNet系统原理 ControlNet是基于生产者/消费者模式(Producer/Consumer Model)的络。ControlNet允许在同一链路上有多个控制器共存,支持输入数据或端到端的多路发送,这就大大的减少了络上的交通量,提高了络效率和络性能。 ControlNet是高度确定性、可重复性的络。ControlNet能预见数据何时能够可靠传输到目标的能力,同时数据的传输时间不受络节点添加/删除情况或络繁忙状况而保持恒定的能力。在实际应用中,通过络组态时选择性设定有计划I/O分组或互锁时间,这些要求能得到更进一步的保证。 生产者/消费者模式允许络中所有的节点同时获取来自同一数据源的数据。最终,该模式提高了效率,因为数据只发送一次,而与数据使用者(Consumer)的数量无关,并且具有精确的同步性。因为数据将同时到达每一个节点。生产者-消费者模式的优点在于:多个节点可以同时消费(Consume,即读取)来自同一个生产省(Producer,即数据源)所提供的数据。节点间易于同步,可以获得更为精确的系统性能,设备可以实现自主通信,无需系统主站。ControlNet提供了简单、高度确定而且灵活的传输数据方式。ControlNet在执行操作、数据实时监控时不会影响到I/O控制的性能。因此,ControlNet非常适用于一些控制关
U S B驱动程序的编写采用W D M驱动程序 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】
USB驱动程序的编写采用WDM 驱动程序。WDM 驱动程序是一些例程的集合,它们被动地存在,等待主机系 统软件(PnP 管理器、I/O 管理器、电源管理器等)来调用或激活它们。具体驱动程序不同,其所包含 的例程也不同。一个WDM 驱动程序的基本组成包括以下5个例程:(1)驱动程序入口例程:处理驱动程序的初始化。 (2)即插即用例程:处理PnP 设备的添加、删除和停止。 (3)分发例程:处理用户应用程序发出的各种 I/O 请求。 (4)电源管理例程:处理电源管理请求。 (5)卸载例程:处理驱动程序的卸载。 包含文件: , , , , , makefile,sources) 在文件中,包含了上述五个例程: 中定义了各种数据结构还有各种IOCTL控制码,用于不同数据的读写。
中实现了各种驱动例程。包含了上述五个所说例程外还包含了其他例程,课程从下面的驱动 程序入口例程得出一些信息。 驱动程序入口例程: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { NTSTATUS ntStatus = STATUS_SUCCESS; PDEVICE_OBJECT deviceObject = NULL; DriverObject->MajorFunction[IRP_MJ_CREATE] = Ezusb_Create; DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ezusb_Close; ources. If you want to add a new source # file to this