基于CAN总线和组态王的粮库监控系统的研究_图文





基于 CAN 总线和组态王的粮库监控系统的研究 粮食问题是一个关系到国计民生的重大问题, 在粮食的存储过程中粮库起着极为重要 的作用。特别对于我国这样一个世界第—粮食大国,粮食安全的特殊性,仓容严重不足的现 实, 决定了我国粮库建设是一项长期任务。 本文在分析当前粮库监控系统的发展状况和发展 趋势的基础上,提出了基于 CAN 总线和组态王的粮库监控系统。来实现粮库内外温度,湿 度,虫害情况等参数进行采集和控制。从而提高粮情监测系统的可靠性,扩大粮情监测的功 能。 该系统采用分布式网络结构, 主要分为上位机和下位机两部分组成。 而整个系统主要完 成了三部分的设计:下位机 CAN 节点和参数采集控制设计,EPP 并口协议的 CAN 通讯适配器 的设计以及组态王的组态设计。 下位机 CAN 节点硬件采用 AT89S52 和 SJA1000 来完成, 软件 利用汇编语言实现。温度采集选择了 DS18B20 一线制数字传感器,湿度选择了 HS1101 电容 式传感器,均采用数字信号进行采集,不存在由模拟量到数字量转换的中间环节,使系统具 有稳定可靠、测量精度高、一致性好、无需任何调整、信号线长短不会影响其性能等优点。 利用 PC 机的高级语言 VB 控制 EPP 并口来实现与 CAN 总线的通讯, 具有开发成本低及运行速 度较快的特点。 监控管理机采用组态王软件使操作更加方便, 系统直观。 能很好的模拟现场, 实现整个系统的全面监视和远程控制。 同时由于该系统采用了 CAN 总线作为通讯网络,大大提高了系统内部的速率和实时性。 将具有很好的应用前景。

关键词:CAN 总线 粮库 组态王 EPP 监控系统

I

第一章:概论................................................................................................................................... 1 1.1 课题研究的背景和意义 ..................................................................................................... 1 1.2 国内外粮库监控系统的发展状况和趋势 ....................................................................... 1 1.3 粮库监控发展存在的问题 ............................................................................................... 3 1.4 粮库监控发展趋势 ........................................................................................................... 3 1.5 粮库监控系统的方案提出 ............................................................................................... 4 1.6 本课题主要要完成以下几方面的工作 ........................................................................... 4 第二章:CAN 总线简介 .................................................................................................................... 4 2.1 CAN 总线主要特点 ............................................................................................................ 4 2.2 CAN 报文的帧结构 ............................................................................................................ 4 2.2.1 数据帧 ................................................................................................................... 5 2.1.2 远程帧 ................................................................................................................... 6 2.2.3 错误帧 ................................................................................................................... 6 2.2.4 超载帧 ................................................................................................................... 7 2.3 CAN 总线的协议规范 ........................................................................................................ 7 2.4 CAN 总线的报文滤波技术 ................................................................................................ 8 2.4.1 单滤波技术 ........................................................................................................... 8 2.4.2 双滤波技术 ........................................................................................................... 9 2.5 CAN 总线的发展及优势分析 .......................................................................................... 10 第三章 粮库监控系统的总体规划 ............................................................................................... 10 3.1 系统总体结构规划 ......................................................................................................... 10 3.2 系统各部分功能 ............................................................................................................. 11 3.2.1 上位机功能 .......................................................................................................... 11 3.2.2 下位机功能 ......................................................................................................... 11 3.3 系统的工作过程 ............................................................................................................. 11 第四章 下位机系统的设计 ......................................................................................................... 12 4.1 CAN 节点的组成 ............................................................................................................ 12 4.2 CAN 节点主要器件介绍 ................................................................................................ 12 4.2.1 AT89S52 单片机 .............................................................................................. 12 4.2.2 CAN 控制器 SJA1000 器件 ........................................................................... 13 4.2.3 PCA2C250 器件 ............................................................................................. 19 4.3 监控节点的软件设计 ..................................................................................................... 20 4.4 温度检测部分 ............................................................................................................... 26 4.4.1 传感器介绍 ....................................................................................................... 26 4.4.4 温度检测的硬件设计 ....................................................................................... 28 4.4.5 软件设计分析 ................................................................................................... 28 4.4.6 使用 DS18B20 注意事项 ................................................................................... 29 4.5 湿度检测部分 ............................................................................................................. 29 4.5.1 传感器介绍 ....................................................................................................... 29 4.5.2 湿度测量硬件设计 ........................................................................................... 29 4.5.2 HS1101 测量湿度的原理分析 .......................................................................... 30 4.5.3 焊接 HS1101 时注意事项 ................................................................................. 31 4.6 虫害检测部分 ............................................................................................................. 31 4.7 温/湿度及虫害控制部分 ........................................................................................... 31

II

第五章 上位机系统的设计 ....................................................................................................... 33 5.1 CAN 通讯适配器的设计 .................................................................................................. 33 5.1.1 EPP 简介 ............................................................................................................ 33 5.1.2 CAN 适配器硬件设计 ..................................................................................... 34 5.1.3 CAN 适配器软件设计 ........................................................................................ 35 5.2 上位机组态设计 ............................................................................................................. 37 5.2.1 组态简介 ........................................................................................................... 37 5.2.2 组态王的主要特点 ........................................................................................... 37 5.2.3 组态王主要功能具体实现 ............................................................................... 37 5.2.4 组态界面的具体设计 ....................................................................................... 41 5.2.5 远程管理控制部分设计 ................................................................................... 42 第六章 系统的可靠性设计及注意事项 ................................................................................... 45 6.1 系统的可靠性设计 ......................................................................................................... 45 6.2 系统的注意事项 ............................................................................................................. 46 6.1.1 系统安装注意事项 ............................................................................................. 46 6.1.2 系统操作注意事项 ............................................................................................. 47 第七章 工作总结与研究展望 ..................................................................................................... 47 7.1 工作总结.......................................................................................................................... 47 7.2 研究展望.......................................................................................................................... 48 参考文献......................................................................................................................................... 49 致 谢........................................................................................................................................... 52 附录................................................................................................................................................. 52 附录 A...................................................................................................................................... 52 A1 CAN 节点电路原理图 ................................................................................................ 52 A2 CAN 节点电路实物图 ................................................................................................ 52 附录 B...................................................................................................................................... 52 CAN 节点部分程序 .......................................................................................................... 52 附录 C...................................................................................................................................... 66 C1 湿度的计算 ............................................................................................................... 66 C2 除湿控制 ................................................................................................................... 67 C3 熏蒸控制 ................................................................................................................... 68 附录 D...................................................................................................................................... 68 D1 WINIO 模块申明 ........................................................................................................ 68 D2 CAN 适配器实物图 .................................................................................................... 69

III

第一章 概 论
1.1 课题研究的背景和意义
粮食问题历来是关系国家国计民生和经济安全的重大战略性问题。2000 年 10 月,中共 中央首次正式提出国家粮食安全体系问题。中共十五届五中全会决议明确指出“要高度重视 保护和提高粮食生产能力, 建设稳定的商品粮基地, 建立符合我国国情和社会主义市场经济 要求的粮食安全体系,确保粮食供求基本平衡” 。2004 年和 2005 年,国务院更是先后以中 央 1 号文件的方式, 对粮食安全问题给予了高度重视。 而粮食安全中粮食的安全合理储藏就 是其中很重要的一环。为了适应粮食储藏技术现代化的发展,一批自主开发、先进实用的粮 食储藏专用新技术、新装备,得到了全面推广和产业化应用,大大提升了我国粮食储藏技术 水平。以环流熏蒸、谷物冷却机、机械通风和粮情测控为代表的“四项新技术”广泛应用,大 大提高了储藏技术管理水平。在“四项”储粮新技术(谷物冷却、机械通风、环流熏蒸、粮 情测控)中,其中粮情监控是基础,是关键,它是各项储粮技术运行状态的观察者和运行结 果的真实反映者。粮情监控系统的准确性、可靠性直接关系到储粮技术的运用和应用效果。 而粮食储存在仓库里易受温度、湿度及其它环境因素的影响,可能出现发热、霉变、虫害等 情况。为了减少粮食储藏过程中的损失,保障粮食的品质和质量,首先应该及时准确地掌握 粮食储藏过程中各种物理量的变化情况,找出其变化规律。建立合理的粮库监控系统。对粮 情变化进行实时检测、并对实时检测数据进行分析和控制,从而达到科学保粮的目的。

1.2 国内外粮库监控系统的发展状况和趋势

[11]

粮食作为我国重要的战略资源, 由于其生产的季节性, 因此粮食的存储是关系到国计民 生的大事。长期以来,国家建设了大批粮食储备库,而早期的粮情检测主要是靠人工的手测 进行的,不光测试速度慢,精度低,而且人员劳动强度大。对于大型粮库的检测情况这些问 题更是突出。 对于通风除湿等控制基本上也是手动操作。 后来国内有关厂家研制出了粮仓温 度,湿度测试仪等,但一般只适合单一仓库的检测,不能实现对整个粮库粮情参数的集中显 示,管理和控制。随着自动化技术,计算机及网络技术的进步与发展。计算机广泛用于粮库 监控,现在国内大多数的粮库都已经实现了计算机粮情测控系统的应用。按通讯网络分,主 要有以下几类粮库监控系统: (1) 基于RS485总线的粮库监控系统[4] RS485总线是使用较为广泛的双向有补偿传输线标准, 其最大每段总线长度为1200米, 每 段最多支持32个节点, 采用单组双绞线双向主从通信。 当总线加长或节点增多时需要使用中 继器连接, 全网络支持最多256个节点。 RS485通信技术应用时间较长, 软硬件实现较为容易, 因此现阶段在国内粮情测控系统应用很广。但由于RS485总线技术不支持多主结构,系统容 量、 通讯距离等方面具有很大的局限性, 所以随着现代化大型粮食储备库的逐年增多, RS485 通讯方式显得愈来愈力不从心。 (2) 基于电力线载波的粮库监控系统[10] 电力线载波通信技术出现于本世纪二十年代初期。 它以电力线路为传输通道, 电力线和 信号线合一,不需要另外布置信号线。具有通道可靠性高、投资少见效快、与电网建设同步 等电力部门得天独厚的优点。 电力载波通讯利用现有库区交流电源线作为通讯线路, 不必申 请付费专用频道优势明显。但由于电力线上对信号存在高削减、高噪声、高变形,传输数据 的过程中会出现意想不到的问题。加之和其它新兴通信手段共存,更显示出了其局限。目前 对电力线载波评价不高似乎已是比较普遍的现象。 (3)基于无线通讯技术的粮库监控系统

1

基于无线通讯技术的粮库监控系统主要有基于无线收发芯片发射电路的粮库监控系统, 基于GSM技术的粮库监控系统以及基于GPRS技术的粮库监控系统。 1) 无线收发芯片发射电路的粮库监控系统[7][9] 无线收发芯片主要采用NRF401和NRF903为核心。这类设计满足无线管制要求,无 须使用许可证。工作频率稳定,外围元件少,便于设计。系统安装、维护方便,可靠性高。 缺点是距离一般只有几百米。现主要用于粮库的温度检测。适合于中小型粮库监控系统。 2) 基于GSM技术的粮库监控系统[13] GSM技术采用拨号方式的电路交换数据传送方式。通过手机短信SMS (Short Message Service) 方式进行无线通信,优点是覆盖面积广。缺点是传输过程采用排队处理。如果数 据量太大或者传输周期太短,可能会产生数据丢失。可用于传输周期较长,数据量不大的数 据传输。现主要用于粮库的温度,湿度的检测。适合于中小型粮库监控系统。 [8] 3) 基于GPRS技术的粮库监控系统 GPRS是通用分组无线业务(GeneralPacketRadioService)的英文简称, 是在现有GSM系统 上发展出来的一种新的承载业务,但它突破了GSM网只能提供电路交换的思维方式,通过增 加相应的功能实体和对现有的基站系统进行部分改造来实现分组交换, 这种改造的投入相对 来说并不大, 但得到的用户数据速率却相当可观。 GPRS允许用户在端到端分组转移模式下发 送和接收数据, 而不需要利用电路交换模式的网络资源。 这种新的分组数据信道与当前的电 路交换的话音业务信道极其相似,因此现有的基站子系统(BSS)从一开始就可提供全面的 GPRS覆盖。从而提供了一种高效、低成本的无线分组数据业务。特别适用于间断的、突发性 的和频繁的、少量的数据传输,也适用于偶尔的大数据量传输。GPRS数据传输具有“永远在 线”“快速登录”“高速传输”“按量收费”等优点。但要实现GPRS数据传输,需要有固定 , , , 的IP地址。 [6] (4) 基于TCP/IP协议的工业以态网的粮库监控系统 TCP/IP(传输入控制地议/网际协议)是一种网络通信协议,它规范了网络上的所有通 信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。基于TCP/IP协议 的工业以态网符合国际主流标准,协议开放、完善不同厂商设备容易互联具有操作性,可以 实现远程访问、远程诊断。具有更高的通讯带宽,能方便的实现现场设备层与企业管理层之 间的无缝连接。随着高速以态网和交换式以态网的发展,以态网的实时性得到了很大提高。 这些现象表明: 基于TCP/IP的工业以态网将在工业控制网络中成为很重要的一部分。 但是就 现在的应用情况看,它不适合在工作环境恶劣,可靠性要求高等场合的应用。一般可以和其 他总线混合应用。如和RS485混合应用于粮库系统。 (5) 基于现场总线网络的粮库监控系统 现场总线技术是一个全新的总线技术,是一种应用于现场设备之间,现场设备与控制之 间实行双向,串行,多节点数字通讯的技术。它的出现为自动化控制和仪器仪表工业带来了 巨大的变革,它代表着未来发展的方向。目前国内粮情监控系统主要采用了三种现场总线: LONWORKS总线技术,PROFIBUS总线[5]和CAN总线[20][21]技术。 1) LONWORKS总线技术通信是采用一种称为LonTalk的网络标准语言实现的。LonTalk协议 由各种允许网络上不同设备彼此间智能通信的底层协议组成。支持OSI/RM的所有七层模型, 通过神经元芯片(Neuron Chip)上的硬件和固件实现提供介质存取,事物确认,认证,组 播消息发送及通讯等服务。其总线开放、可靠性高、通信速度最高可达1.5Mbit/s,最大通 信距离可达2700米。网络的大小可以是两个到32385个设备。 2) PROFIBUS总线也是参考ISO/OSI模型。PROFIBUS总线支持主从系统,纯主站系统,多 主多从混合系统等几种传输方式。传输速率为9.6Kbit/s到12Mbit/s,最大传输距离在 9.6Kbit/s时为1200米,1.5Mbit/s时为200米,可用中继器延长至10千米,最多可挂接127

2

个站点。 3) CAN总线技术在粮情测控系统中的应用比LONWORKS总线技术更为广泛。CAN总线技术具 有先进的多主网络结构、通讯距离远、价位低、可靠性高、系统容量大等优点。同时CAN总 线最大通讯距离可达10公里, 这对库区较大、 粮仓分布较分散的大型储备粮库是非常适用的。 CAN现场总线技术的另一个优点是可以大大节约连接导线以及安装维护费用,使得整个系统 在大大提高系统整体性能的同时具有很高的性能价格比。

1.3 粮库监控发展存在的问题[19]
国内粮库监控系统的发展在许多粮库中取得了良好的效果和明显的经济效益,为实现粮 库现代化管理起到了十分积极的作用。但还存在一些不足的地方: (1) 现场采集抗干扰能力差。 大部分监控系统检测参数时通常采用测量电路将温度转 换为0—5V的信号,然后经数字模拟A/D转换,将信号传送到单片机进行分析处理,由于现 场传感器的引线太长。 其温度转换信号易受工业及其它杂波信号干扰, 影响测温数据和系统 稳定性。 (2) 监测参数少。有的监测的对象往往比较单一,比如有的只有温度或湿度监测,很 少涉及虫害等其它参数的监测。 (3) 仓内的采集元器件保护不好易损坏。在高温雷雨季节或实施熏蒸处理后系统检 测元件出现短路、断路或数值过高、过低。甚至于整仓采集传输不回计算机进行处理数据。 究其原因主要是因为一些电子元器件的防腐蚀、防雷击、防静电等的技术处理不完善。电子 元件板的密封处理达不到技术要求。增加了损坏数量。 (4) 有的监测的自动化程度低。没有建立一个完善的自动化监测通讯网络,检测的 数据利用率不高。 (5) 粮情测控系统之间存在兼容性问题。一些分批建设的粮库。每次建库、扩库都 使用不同厂家生产的粮情测控系统。几套粮情测控系统之间互不兼容,造成国家建设资金 浪费。也不利于实际操作维护,不容易升级和推广。

1.4 粮库监控发展趋势[19]
(1) 传感器的集成化、数字化和智能化。如将传感器及微处理器集成在一个芯片上 则成为数字化和智能化的传感器。随着传感器制造技术的发展,集成化、数字化和智能化的 传感器成本必然降低,易于推广,这样粮情测控系统的结构将发生根本性的改变。 (2) 数据检测的全面化:粮情测控系统检测的内容不但包括目前的温度湿度,还将 包括粮食水分、粮堆内相关气体的浓度、储粮害虫的密度等,使粮情测控系统更能全面地反 映影响粮食储藏安全和粮食品质的各种参数,为安全储粮和延缓陈化提供可靠的技术保证。 (3) 数据分析的智能化:能够完成对检测数据的图形、图表显示、分析、查询,并 能根据对粮情数据的分析结论,提供相应的警告、建议等。粮情测控系统软件能按照《机械 通风技术规程》的规定同时对多个有不同通风目的仓房,实行实时通风的控制,并可随时根 据储粮条件的变化经控制通风参数及其进程, 完成对一个完整通风过程全面清晰的记录, 界 面友好,操作简便。 (4) 粮库监控系统产品系列化、标准化。 (5) 粮库监控系统的自动化和网络化: 粮食储藏中的粮情监控技术同计算机控制技 术一样, 也必将朝着逐渐成主流的现场总线控制系统和多媒体控制系统方向发展。 多媒体和 集散粮情测控系统可将粮情多媒体信息(如储粮害虫密度等)进行采集、监视、传输,以及综 合分析处理和管理,提高粮食储藏技术的管理和自动化水平;同时利用局域网/因特网的实 时状态查询和设备监控。从而将粮食储藏过程中的机械通风、环流熏蒸、谷物冷却储粮控制

3

和生产过程控制等独立完善的控制系统有机结合。 逐步建立起集粮情检测、 粮情分析与粮情 控制于一体的集成化粮情测控系统,提高粮食储藏的现代化水平。

1.5 粮库监控系统的方案提出
考虑到粮库参数很多,其中最重要的是库内外温度,湿度,库内虫害和水分等,如果对 这些参数不能及时的采集和处理, 很可能造成严重的损失。 这里我们主要对粮库在内外温度 湿度以及虫害进行检测和控制。对于水分,气体浓度等其它参数预留有检测控制口。为以后 扩展作好准备。通讯网络我们采用CAN总线,管理控制部分采用组态王进行监控,设计整 个系统的抗干扰能力强,实时性和纠错能力强,扩展容易。网络具有布线方便、经济等。同 时现场采集采用数字式传感器。信号传输过程的衰减不会影响系统精度,且传输距离长。从 而提高粮情监测系统的可靠性,扩大粮情监测的功能。

1.6 本课题主要要完成以下几方面的工作
(1):分析当前粮库监控系统的发展状况和发展趋势,为设计作好理论依据。 (2):CAN总线为通讯网络的分布式粮库监控系统的整体方案设计和具体实施。 (3):管理控制部分的组态设计和数据库管理。 (4):现场传感器的选择和现场控制器的控制。

第二章:CAN总线简介
CAN 总线(SJA1000 Area Network)即控制器局域网,由德国 BOSCH 公司 20 世纪 80 年 代推出。 是国际上应用最广泛的现场总线之一。 遵从 OSI 模型, 划分为物理层和数据链路层。

2.1 CAN 总线主要特点

[1]

(1) CAN 为多主方式工作,网络上任一节点均可以在任意时刻主动地向网络上其它节 点发送信息,而不分主从,通讯方式灵活,且无需站地址等节点信息。利用这一特点可以方 便的构成多机备份系统。 (2) CAN 网络上的节点信息分成不同的优先级,可满足不同的实时要求,高优先级的 数据最多可在 134?s 内得到传输。 (3) CAN 采用非破坏性总线仲裁技术。当多个节点同时向总线发送信息时,优先级较 低的节点会主动地退出发送, 而最高优先级的节点可以不受影响地继续传输数据, 从而大大 的节省了总线冲突仲裁时间, 尤其在网络负载很重的情况下也不会出现网络瘫痪情况 (以太 网则有可能会出现网络瘫痪) 。在错误严重的情况下具有自动关闭输出功能,以使总线上其 它节点的操作不受影响。 (4)CAN 只需通过报文滤波即可实现点对点,一点对多点及全局广播等几种方式传送 接收数据,无需专门的“调度” 。 (5) CAN 的传输介质可用双绞线, 同轴电缆或光纤, 方式灵活。 直接通讯距离达到 10km (速度 5Kbit/s 以下) ;通信速率最高可达 1Mbit/s(此时的通讯距离最长为 40M) 。 (6) CAN 上的节点数主要取决于总线驱动电路, 目前可达 110 个报文; 标志符可达 2032 种(CAN2.0A) ,而扩展标准(CAN2.0B)的报文标志符几乎不受限制。 (7)CAN 采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果。每帧信 息都有 CRC 校验。保证了数据出错率极低。

2.2 CAN报文的帧结构[2]
CAN 通讯协议 2.0 A 规定了 4 种不同的帧类型:

4

数据帧:数据帧携带数据从发送器至接收器。 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。 错误帧:任何单元检测到一总线错误就发出错误帧。 过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。 其中数据帧(或远程帧)通过帧间空间与前述的各帧分开。

2.2.1 数据帧
数据帧由 7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC 场、应答场、帧 结束。数据场的长度可以为 0。 具体组成如图 2.1

图 2.1 (1)帧起始: 以一个比特的显位出现,只有在总线处于空闲状态时,才允许开始发送。 仲裁场:仲裁场包括识别符和远程发送请求位(RTR) 。识别符:识别符的长度为 11 位。这 些位的发送顺序是从 ID-10 到 ID-0。最低位是 ID-0。最高的 7 位 ID-10 到 ID-4)必须不 能全是“隐性” 。RTR 位:该位在数据帧里必须为“显性” ,而在远程帧里必须为“隐性” 。 如图 2.2

图 2.2 (2)控制场:由 6 个位组成,包括数据长度代码和两个将来作为扩展用的保留位。所发送

5

的保留位必须为“显性” 。接收器接收所有由“显性”和“隐性”组合在一起的位。数据长 度代码:数据长度代码指示了数据场中字节数量。数据长度代码为 4 个位,在控制场里被 发送。 如图 2.3。

图 2.3 (3)数据场:由数据帧中的发送数据组成。它可以为 0~8 个字节,每字节包含了 8 个位, 首先发送 MSB。 CRC 场包括 CRC 序列 (CRC SEQUENCE) 其后是 CRC 界定符 , (CRC DELIMITER) 。 应答场长度为 2 个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER) 。在应 答场里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应 答间隙(ACK SLOT)期间(发送 ACK 信号)向发送器发送一“显性”的位以示应答。 帧结束:每一个数据帧和远程帧均由一标志序列界定。这个标志序列由 7 个“隐性”位组 成。

2.1.2 远程帧
通过发送远程帧, 作为某数据接收器的站通过其资源节点对不同的数据传送进行初始化设 置。远程帧由 6 个不同的位场组成:帧起始、仲裁场、控制场、CRC 场、应答场、帧结束。 与数据帧相反,远程帧的 RTR 位是“隐性”的。它没有数据场,数据长度代码的数值是不 受制约的(可以标注为容许范围里 0...8 的任何数值) 。此数值是相应于数据帧的数据长度 代码。如图 2.4。

图 2.4

2.2.3 错误帧
6

错误帧由两个不同的场组成。第一个场用作为不同站提供的错误标志(ERROR FLAG)的叠 加。第二个场是错误界定符。如图 2.5

图 2.5

2.2.4 超载帧
超载帧包括两个位场:过载标志和过载界定符。 有两种过载条件都会导致过载标志的传送: 1. 接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时) 。 2. 间歇场期间检测到一“显性”位。 由过载条件 1 而引发的过载帧只允许起始于所期望的间歇场的第一个位时间开始。而由过 载条件 2 引发的过载帧应起始于所检测到“显性”位之后的位。如图图 2.6

图2.6

2.3 CAN总线的协议规范[1][2]
(1)CAN2.0B 标准帧信息为 11 个字节,包括两部分:信息和数据部分。前 3 个字节为信息 部分。 如下表 2.1: 表 2.1 7 6 5 4 3 2 1 字节 1 字节 2 字节 3 字节 4 字节 5 字节 6 FF PTR ID.2—ID.0 X X DLC(数据长度) (报文识别码)ID.10—ID.3 PTR 数据 1 数据 2 数据 3
7

字节 7 数据 4 字节 8 数据 5 字节 9 数据 6 字节 10 数据 7 字节 11 数据 8 a.字节 1 为帧信息。第 7 位(FF)表示帧格式,在标准帧中,FF=0;第 6 位(RTR)表示帧 的类型,RTR=0 表示为数据帧,RTR=1 表示为远程帧;DLC 表示在数据帧时实际的数据长度。 b.字节 2、3 为报文识别码,11 位有效。 c.字节 4~11 为数据帧的实际数据,远程帧时无效。 (2)CAN2.B 扩展帧信息为 13 个字节,包括两部分,信息和数据部分。前 5 个字节为信息 部分。如表 2.2 表 2.2 7 6 5 4 3 2 1 FF PTR X X 字节 1 DLC(数据长度) 字节 2 (报文识别码)ID.28ID.21 字节 3 ID.20—ID.13 字节 4 ID.12—ID.5 字节 5 ID.4—ID.0 X X X 字节 6 数据 1 字节 7 数据 2 字节 8 数据 3 字节 9 数据 4 字节 10 数据 5 字节 11 数据 6 字节 12 数据 7 字节 13 数据 8 a.字节 1 为帧信息。第 7 位(FF)表示帧格式,在扩展帧中,FF = 1;第 6 位(RTR)表示 帧的类型,RTR=0 表示为数据帧,RTR=1 表示为远程帧;DLC 表示在数据帧时实际数据长度。 b.字节 2~5 为报文识别码,其高 29 位有效。 c.字节 6~13 为数据帧的实际数据,远程帧时无效。

2.4 CAN 总线的报文滤波技术[2]
在 CAN 总线中,存在多种传送和接收数据的方式,比如点对点,一点对多点及全局广播 等几种方式。 这几种方式的选择和转换就是通过 CAN 总线中的报文滤波技术实现的, 而无需 专门的调度。CAN 总线的报文滤波主要有单滤波技术和双滤波技术,现在我们通过 SJA1000 为例对这两种滤波技术的原理和用途做一个简单介绍:

2.4.1 单滤波技术
单滤波是指只有一个由4个验收码寄存器和4个验收屏蔽寄存器组成的验收滤波器总线上 的信息只有通过了它的验收滤波才予以接收如图2.7所示。图中画出了标准帧和扩展帧用于 滤波的标识符及数据。对标准帧而言,11位标识符和RTR位对应ACR0 、ACR1、AMR0、 AMR1 其中ACR1 和AMR1 的低四位未使用。 标准帧由于只有11位标识符, 数据场的前两个字节也参 与滤波。Data1 对应ACR2 AMR2, Data2 对应ACR3 AMR3。 参与滤波的数据字节不能作为一 般用户数据使用。若接收的标准帧为一个远程帧(RTR位为1) ,只要标识符参与滤波即可。 若接收的标准帧是数据帧且数据场长度少于2 字节。则缺少的那部分数据可以不用参与滤
8

波。 对扩展帧而言, 29位标识符和RTR位分别对应4个ACR和4个AMR, 只是ACR3 和AMR3的低2 位 未使用。 实际上扩展帧的情况比标准帧要更简单一些。 无论是标准帧还是扩展帧只有在符合 上述条件的验收滤波通过以后,滤波器才将该帧数据存入接收FIFO 且置位RBS 标志。

图 2.7

2.4.2 双滤波技术
双滤波比单滤波要复杂一些。4 个 ACR 和 4 个 AMR 在双滤波方式下共构成两个滤波器, 接收的信息帧通过任意一个滤波器即可予以接收。如图 2.8 所示,对于标准帧而言,滤波 器 1 由 ACR0、ACR1、AMR0、AMR1 以及 ACR3、AMR3 的低四位组成。对应 11 位标识符 RTR 位 和数据场第 1 字节共 20 位。参与了滤波。验收滤波的具体过程与单滤波相同,滤波器 2 由 ACR2 AMR2 以及 ACR3、AMR3 的高四位组成,参与滤波的只有 11 位标识符和 RTR 位。对于 扩展帧而言,滤波器 1 由 ACR0、ACR1、AMR0 和 AMR1 构成,不包含 ACR3 和 AMR3,29 位标 识符中也只有高 16 位参与了滤波。滤波器 2 由 ACR2、ACR3、AMR2 和 AMR3 构成,参与滤 波的同样是 29 位标识符中的高 16 位。

9

图 2.8

2.5 CAN 总线的发展及优势分析
为促进 CAN 以及 CAN 协议的发展,1992 在欧洲成立了 CiA(CAN in Automation)。在 CiA 的努力推广下,CAN 技术在汽车电子控制系统、电梯控制系统、安全监控系统、医疗仪器、 纺织机械、船舶运输等方面均得到了广泛的应用。现已有 400 多家公司加入了 CiA,CiA 已 成为全球应用 CAN 技术的权威。CAN 总线在组网和通信功能上的优点以及它的高性能价格比 决定了它在许多领域都有广阔的应用前景和发展潜力。 特别是大型仪器设备系统, 对多种信 息进行采集、处理、控制、输出等操作。如医疗器械 CT 断层扫描仪,为保证其可靠工作, 在数据通信上要求功能块间可随意进行数据交换、 通信能以广播方式进行、 简单经济的硬件 接口、通信线尽量少、抗干扰能力强、可靠性高并能自动进行故障识别和自动恢复。但是, 这些要求长时间未能得到很好的解决,直至 CAN 总线技术出现才提供了一个较好的解决方 法。测控系统中离不开传感器,由于各类传感器的工作原理不同,其最终输出的电量形式也 各不相同,为了便于系统连接,通常要考虑将传感器的输出变换成标准电压或电流信号。即 便是这样,在与计算机相连时,必须增加 A/D 环节。如果传感器能以数字形式输出,就可以 方便地与计算机直接相连,从而简化系统结构,提高精度。这种传感器与计算机相连的总线 可称为传感器总线。 实际上传感器总线仍属于现场总线, 关键的问题在于如何将总线接口与 传感器一体化。在广泛的工业控制领域,CAN 总线可作为现场设备级的现场总线,与其它总 线相比,具有很高的可靠性和性价比。这必将是 CAN 技术开发应用的一个主要方向。CAN 网 络上任何一个节点均可作为主节点主动地与其它节点交换数据;CAN 网络节点的信息帧可以 分出优先级,这对于有实时性要求的控制提供了方便;CAN 的物理层及数据链路层有独特的 设计技术,使其在抗干扰以及错误检测等方面的性能均大大提高。CAN 的上述特点使其成为 诸多工业测控领域中首选的现场总线之一。根据国内外资料报道,CAN 技术已应用于家用电 器和智能楼宇以及小区建设中。如安防系统、抄表系统、家电控制等。

第三章 粮库监控系统的总体规划
3.1 系统总体结构规划[20]
影响粮库储粮安全性的参数主要有粮堆温度,湿度和害虫等,及时监测这些参数、准确 分析这些参数的变化并及时采取相应处理措施, 对于提高仓储质量、 减少粮食损耗具有重要 意义。这里我们采用分布式监控网络,主要分为上位机和下位机两部分。而上位机按功能分 由现场上位监控管理机,远程监控管理机和 CAN 通讯适配器组成,下位机则由 CAN 节点 和现场参数采集和控制组成,如图 3.1。

10

(图 3.1)

3.2 系统各部分功能
3.2.1 上位机功能
监控管理部分: 现场监控管理部分: 利用组态王软件完成粮库的现场测量点模拟, 对粮库的现场数据进行采集。 同时对采集 数据进行分析,自动计算仓内的最高、最低和平均温度值,还可计算出每层的最高、最低和 平均温度值, 完成超限实时报警, 同时实现对现场设备进行操作控制。 例如启动通风、 除湿、 喷洒及安全保护装置,报警、切断电源等。并自动生成各种报表和图表,建立和存储粮库的 仓储历史档案和打印功能。 远程监控管理部分: 主要完成粮库状态远程查询,报表打印和远程控制等功能。 CAN通讯适配器 主要是完成CAN总线信号和网络的配置,实现上下位机的通讯。

3.2.2 下位机功能
CAN节点: 主要是完成CAN总线信号和网络的配置。 现场参数采集和控制部分 主要是完成要实时监测本粮库内各个测试点的温度、湿度和粮虫发生情况,还要负责接 收上位管理机的命令,根据上位机的要求传输数据和反馈控制。

3.3 系统的工作过程
下位机节点通过一定时间间隔把含有地址,温度,湿度,虫害等数据量的报文向 CAN 总线发送, 总线通过自身仲裁确定先把优先级最高的数据放到总线上, 然后自动仲裁依次发 送低优先级的报文到 CAN 总线。由于 CAN 总线的信息存取利用了广播式的存取工作方式, 报文可以在任何时候由任何节点发送到空闲的总线上, 每个节点的CAN总线接口接收总线 上出现的所有信息, 通过每个节点的报文滤波和地址匹配, 只有上位机能实现所有报文的接 收。同时在上位机组态王现场模拟图中显示。同时上位机可随时发送信息到 CAN 总线,只有 地址匹配的节点才能收到信息。同时通过这种方式实现粮库的参数反馈控制。

11

整过系统严格按照 CAN2.0A 协议来做。

第四章
4.1 CAN节点的组成[32]

下位机系统的设计

CAN总线的节点结构组成如图4.1(具体设计电路见附录A) 。

图4.1

4.2 CAN节点主要器件介绍
4.2.1 AT89S52单片机
AT89S52 是一个低功耗,高性能 CMOS 8 位单片机,片内含 8k Bytes ISP(In-system programmable)的可反复擦写 1000 次的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密 度、非易失性存储技术制造,兼容标准 MCS-51 指令系统及 80C51 引脚结构,芯片内集成了通 用 8 位中央处理器和 ISP Flash 存储单元,可为许多控制应用系统提供高性价比的解决方案, 同时成本相对较低。其引脚图 4.2:

12

(图 4.2)

4.2.2

CAN 控制器 SJA1000 器件[42][62]

SJA1000 独立 CAN 控制器是 PHILIPS 公司 PCA82C200 控制器(BasicCAN 的替代产品) , 它在完全兼容 PCA82C200 的基础上增加了一种新的工作模式 PeliCAN,SJA1000 完全支持 具有很多新特性 CAN2.0B 协议.SJA1000 的工作模式通过其内部的时钟分频寄存器 CDR 中 的 CAN 模式位来选择。硬件复位时默认模式是 BasicCAN 工作模式。 (1) :SJA1000 的特点: a : 与 PCA82C200 独立 CAN 控制器引脚和电气兼容。 b : PCA82C200 模式(默认的 BasicCAN 模式) 。 c : 可扩展的接收缓冲器(64 字节,先进先出 FIFO) 。 d : 与 CAN2.0B 协议兼容(PCA82C200 兼容模式中的无源扩展结构) e : 同时支持 11 位和 29 位标志符。 f : 位速率可达 1Mbit/s。 g : PeliCAN 模式扩展。 (2):SJA1000 内部结构如图 4.3:

13

图 4.3 SJA1000 的内部结构图 a:接口管理逻辑(IML) 接口管理逻辑解释来自 CPU 的命令, 控制 CAN 寄存器的寻址, 想主控制器提供中 断信息和状态信息。 b:发送缓冲器(TXB) 用于存储发送到 CAN 网络上的完整报文,缓冲器长 13 个字节,由 CPU 写入,BSP 读出。 c:接收缓冲器(RXB) 用于接收 CAN 总线上的报文, 并存储接收到的报文。 可作为 FIFO (RXFIFO, 64B) 的一个窗口,能被 CPU 访问。 d:接收过滤器(ACF) 接收过滤器把它其中的数据和接收的标志符相比较,以决定是否接收报文。在接收 测试中,所有报文都保存在 RXFIFO 中。 e:位流处理器(BSP) 是一个控制发送缓存器和接收缓存器与 CAN 总线之间控制数据流的程序装置, 同时 具有执行错误检测、仲裁、总线填充和错误处理的能力。 f:位定时逻辑(BTL)单元 主要监视串口的 CAN 总线,并处理与总线有关的位时序,使 SJA1000 同步于 CAN 总线上的位流。 g:错误管理逻辑(EML) 主要完成接收 BSP 的出错报告,并按照 CAN 协议完成错误界定, 从而使 BSP 和 IML 进行错误统计。 (3) :SJA1000 的引脚: SJA1000 为 28 脚的 SO-28 和 DIP-28 封装,引脚如图 3.4,具体定义见表 3.1

14

图 4.4 表 4.1

15

(4)SJA1000 在 BasicCAN 模式下的地址分配[1]: SJA1000 内部寄存器分布于 0~31 连续的地址空间中,包括控制段和信息缓冲区。控制 段在初始化载入时可被编程来配置通讯参数(例如,波特率 位时序等) 微控制器也是通 。 过这个段来控制 CAN 总线上的通讯状态。信息缓冲区分为发送缓冲区和接收缓冲区,微处 理器将要发送的信息写入发送缓冲区。然后,启动发送命令后,可进行报文的发送。符合接 收条件的接收到的信息放入接收缓冲区, 微处理器可以读出这些信息并进行处理。 地址分配 如下表 4.2。 工作模式 段 地 址 读 0 1 2 控 3 4 制 5 6 7 8 9 发 送 缓 冲 区 接 收 缓 冲 区 10 11 12~19 20 21 22~29 30 31 控制 (FFH) 状态 中断 (FFH) (FFH) (FFH) (FFH) (FFH) 测试 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 (FFH) 时钟分频器 写 控制 命令 — — — — — — — 测试 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 — 时钟分频器 读 控制 (FFH) 状态 中断 接收代码 接收屏蔽 总线定时器 0 总线定时器 1 输出控制 测试 (FFH) (FFH) (FFH) 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 (FFH) 时钟分频器 写 控制 命令 — — 接收代码 接收屏蔽 总线定时器 0 总线定时器 1 输出控制 测试 — — — 标志符(10~3) 标志符(2~0) PTR 和 DLC 8 位数据字节 — 时钟分频器 复位模式

a:控制段:主要完成 CAN 总线的基本配置和通讯控制。控制段寄存器的基本功能: 控制寄存器(CR) :于改变 CAN 控制器的状态,如复位请求,接收中断使能等。 命令寄存器(CMR) :用于请求发送,夭折发送及释放接收缓冲区等。 状态寄存器(SR) :对总线状态,发送状态接收状态的检测等。 中断寄存器(IR) :主要用于指示各中断源的状态。 验收代码寄存器(ACR) :用于接收报文的识别。
16

验收屏蔽寄存器(AMR) :参与接收报文的识别。并可以屏蔽一些位。 总线时序寄存器 0(BTR0) :主要用于波特率预置器和同步跳转宽度值的设置。 总线时序寄存器 1(BTR1) :用于一个位周期的长度,采样点的位置和每个采样点的采样数 目的确定。 输出控制寄存器(OCR) :用于建立不同的驱动的配置。 时钟分频寄存器(CDR) :主要用于控制 SJA1000 工作模式的选择等。 测试寄存器(TEST) :主要用于内部测试。 b:发送缓冲区:用来存储微控制器要 SJA1000 发送的报文的。分为描述符和数据区。 c:接收缓冲区:基本和发送缓冲区一样。 (5) :SJA1000 的工作过程: SJA1000 相对于主控制器相当于是一存储应象 I/O 设备,它的地址域由控制段和信息缓 冲区段组成,在向下加载初始化期间,控制器可被编程以设定通信参数,如位定时,CAN 总线上的通信可通过此段由 CPU 控制。在初始化期间,始终输出(CLKOUT)端可通过C PU编程得到一个固定值。被发送的信息必须写入发送缓冲区,成功接收后,微控制器可从 接收缓冲区读取信息,然后释放它以被后用。微控制器与 SJA1000 之间的状态、控制和命 令信息的交换是在控制段进行的。 SJA1000 内部寄存器有的是只能写的,有的是既可读又可写的。在系统正常工作之前, 微控制器要对某些寄存器进行初始化, 以保证系统的各部分之间能进行正确的数据交换。 控 制器的内容都是通过微控制器写入的,其读写时序如图 3.5 所示:

(图 4.5) 从读/写时序图来看, 微控制器对 SJA1000 的操作相对比较简单, 由于 SJA1000 内可存 储数据的地址信。 能适合工业现场条件恶劣的环境。 现场数据采集与控制层主要负责从现场 采集数据以 CAN 协议的格式发送到总线上, 并根据需要对某些现场设备进行就地实时控制和 监视。其软件设计思想为:系统上电后处理器先对自身和 SJA1000 进行初始化以 SJA1000 传送到 CAN 总线上或直接现场显示、控制;而对从 CAN 总线上来的信息则采用中断方式,系 统每接收到一帧信息,便产生一次中断,引发微处理机进入中断,在中断服务程序中读取该 帧信息并传送到现场。 (6): SJA1000 在 BasicCAN 模式下的通讯波特率的计算[1] 通讯波特率的计算需要用到总线时序寄存器 0(BTR0)和 1(BTR1) ,下面我们先对这两 个寄存器进行介绍:

17

BTR0 寄存器: BIT 7 BIT 6 SJW.1 SJW.0 BTR1 寄存器: BIT 7 BIT 6 SAM TSEG2.2

BIT 5 BRP.5 BIT 5 TSEG2.1

BIT 4 BRP.4 BIT 4 TSEG2.0

BIT 3 BRP.3 BIT 3 TSEG1.3

BIT 2 BRP.2 BIT 2 TSEG1.2

BIT 1 BRP.1 BIT 1 TSEG1.1

BIT 0 BRP.0 BIT 0 TSEG1.0

图4.6 BTR1的位周期结构 波特率预置器设置:

tSCL ? 2 ? tCLK ? (32 ? BRP.5 ? 16 ? BRP.4 ? 8 ? BRP.3 ? 4 ? BRP.2 ? 2 ? BRP.1 ? BRP.0 ? 1)

tCLK ?

1 f XTAL

;振荡周期

同步跳转宽度位域:

tSJW ? tSCL ? (2 ? SJW .1 ? SJW .0 ? 1)
时间段1(TSEG1)和时间段2(TSEG2)位域:

tSYNCSEG ? 1? tSCL
tTSEG1 ? tSCL ? (8 ? TSEG1.3 ? 4 ? TSEG1.2 ? 2 ? TSEG1.1 ? TSEG1.0 ? 1) tTSEG 2 ? tSCL ? (4 ? TSEG 2.2 ? 2 ? TSEG 2.1 ? TSEG 2.0 ? 1)
具体计算:假如晶振为 16M,BTR0=43H,BTR1=2FH,首先利用公式可以算出

tCLK ?

1 f XTAL

?

1 s 16 ?106

tSCL ? 2 ?

1 1 (0 ? ?0 ? 0 ? 2 ? 1 ? 1) ? s 6 16 ?10 2 ?106
;同步跳转宽度的计算

tSJW ? tSCL ? (0 ? 1 ? 1) ? 2 ? tSCL

tTSEG1 ? tSCL ? (8 ? 4 ? 2 ? 1 ? 1) ? 16tSCL

18

tTSEG 2 ? tSCL ? (0 ? 2 ? 0 ? 1) ? 3tSCL
可得位周期

T ? tTSEG 2 ? tTSEG1 ? tSYNCESG ? 20tSCL ? 20 ?
从而通讯波特率=

1 1 ? 5s 6 10 10

1 ? 100 Kbit / s T

在具体应用中可以参考表 3.3(通讯距离和通讯波特率关系) ,进行通讯波特率和距离的设 定。 表 4.3 位速率 最大总线长度 总线定时 BTR0 BTR1 1Mbit/s 40m 00H 14H 500Kbit/s 130m 00H 1CH 250Kbit/s 270m 01H 1CH 125Kbit/s 530m 03H 1CH 100Kbit/s 620m 43H 2FH 50Kbit/s 1.3km 47H 2FH 20Kbit/s 3.3km 53H 2FH 10Kbit/s 6.7km 67H 2FH 5Kbit/s 10km 7FH 7FH

4.2.3

PCA2C250器件

[63]

PCA2C250为CAN总线收发器,是CAN控制器和物理总线间的接口,提供对总线的驱动 发送能力 、对CAN控制器的差动发送能力和对CAN控制器的差动接收能力。它有很强的抗 瞬间干扰和保护总线的能力;有3种不同的工作方式即高速、斜率控制和待机。总线上的某 节点掉电不会影响总线, 在40 m内实现高速应用可达1 Mbps, 最多可挂110个节点。 PC82C250 的引脚介绍(如表3.4) ,PCA82C250采用DIP8和SO8封装(如图3.6) : 表4.4 管脚名 管脚号 说明 TXD 1 发送数据输入 GND 2 地 Vcc 3 电源电压 RXD 4 接收数据输出 Vref 5 参考电压输出 CANL 6 低电平CAN电压输入/输出端 CANH 7 高电平CAN电压输入/输出端 RS 8 斜率电阻输入

19

图4.7

4.3 监控节点的软件设计[41][42]
监控节点主要完成的程序有SJA1000的初始化, 报文的发送程序, 报文的接收程序, CAN 总线错误处理程序, 以及和传感器配合实现现场参数的采集。 这里只对几个最基本程序进行 介绍,详细程序见附录B (1) SJA1000地址定义 主程序开始前我们需要对 SJA1000 的一些地址进行定义,方便程序编写和可读性,如下: SJA1000_BASE EQU 7F00H REG_CONTROL EQU SJA1000_BASE+0H ;控制寄存器 REG_COMMAND EQU SJA1000_BASE+01H ;命令寄存器 REG_ STATUS EQU SJA1000_BASE+02H ;状态寄存器 REG_INTERRUPT EQU SJA1000_BASE+03H ;中断寄存器 REG_ACR EQU SJA1000_BASE+04H ;验收代码寄存器 REG_AMR EQU SJA1000_BASE+05H ;验收屏蔽寄存器 REG_BTR0 EQU SJA1000_BASE+06H ;总线时序寄存器 0 REG_BTR1 EQU SJA1000_BASE+07H ;总线时序寄存器 1 REG_OCR EQU SJA1000_BASE+08H ;输出控制寄存器 REG_TEST EQU SJA1000_BASE+09H ;测试寄存器 REG_TEST 发送缓冲区(内部地址 0AH—013H) REG_TxBuffer1 EQU SJA1000_BASE+0AH ;发送缓冲区 1 REG_TxBuffer2 EQU SJA1000_BASE+0BH ;发送缓冲区 2 REG_TxBuffer3 EQU SJA1000_BASE+0CH ;发送缓冲区 3 REG_TxBuffer4 EQU SJA1000_BASE+0DH ;发送缓冲区 4 REG_TxBuffer5 EQU SJA1000_BASE+0EH ;发送缓冲区 5 REG_TxBuffer6 EQU SJA1000_BASE+0FH ;发送缓冲区 6 REG_TxBuffer7 EQU SJA1000_BASE+010H ;发送缓冲区 7 REG_TxBuffer8 EQU SJA1000_BASE+011H ;发送缓冲区 8 REG_TxBuffer9 EQU SJA1000_BASE+012H ;发送缓冲区 9 REG_TxBuffer10 EQU SJA1000_BASE+013H ;发送缓冲区 10 接收缓冲区(内部地址 014H—1DH) REG_RxBuffer1 EQU SJA1000_BASE+014H ;接收缓冲区 1 REG_RxBuffer2 EQU SJA1000_BASE+015H ;接收缓冲区 2 REG_RxBuffer3 EQU SJA1000_BASE+016H ;接收缓冲区 3 REG_RxBuffer4 EQU SJA1000_BASE+017H ;接收缓冲区 4 REG_RxBuffer5 EQU SJA1000_BASE+018H ;接收缓冲区 5 REG_RxBuffer6 EQU SJA1000_BASE+019H ;接收缓冲区 6

20

REG_RxBuffer7 EQU SJA1000_BASE+01AH ;接收缓冲区 7 REG_RxBuffer8 EQU SJA1000_BASE+01BH ;接收缓冲区 8 REG_RxBuffer9 EQU SJA1000_BASE+01CH ;接收缓冲区 9 REG_RxBuffer10 EQU SJA1000_BASE+01DH ;接收缓冲区 10 (2) SJA1000初时化 初始化程序主要是通过对CAN控制器SJA1000控制段中的寄存器写入控制字。来确定 SJA1000的工作方式。具体流程图如图4.8,程序如下:

图 4.8 SJA1000_INIT00: MOV ERROR,#20H ;32 次,报错 SJA1000_INIT01: LCALL BCAN_CREATE_COMMUNATION ;调用 SJA1000 接口测试函数 JNB F0, SJA1000_INIT10 ;接口正常,初始化 SJA1000 DJNZ ERRORC, SJA1000_INIT01 ;接口不正常,再检测 MOV ERROR_STATUS, #SJA_INTFACE_ERR LJMP ERROR_HANDLE ;错误处理 SJA1000_INIT10: MOV ERROR,#20H SJA1000_INIT11: MOV R7, #04 ;首先设置参数 MOV ERRORC, #020H LCALL BCAN_SET_BANDRATE ;设置波特率为 100k JNB F0, SJA1000_INIT20 ;判断设置是否成功 DJNZ ERRORC , SJA1000_INIT11

21

MOV ERROR_STATUS,#SJA_INITBTR_ERR LJMP ERROR_HANDLE SJA1000_INIT20: MOV ERROR,#020H SJA1000_INIT21: MOV R6, #49H ;这里设定只接收 ID 为 49H 地址的报文 LCALL BCAN_SET_OBJECT JNB F0, SJA1000_INIT30 ;判断设置是否成功 DJNZ ERRORC , SJA1000_INIT21 MOV ERROR_STATUS,#SJA_INITOBJ_ERR LJMP ERROR_HANDLE SJA1000_INIT30: MOV ERRORC,#020H SJA1000_INIT31: MOV R7, #0AAH ;设置输出控制、时钟分频,正常输出模式 MOV R6, #048H ;使能内部比较器、禁止 CLKOUT LCALL BCAN_SET_OUTCLK JNB F0, SJA1000_INIT40 ;判断设置是否成功 DJNZ ERRORC , SJA1000_INIT31 MOV ERROR_STATUS,#SJA_INITOCLK_ERR LJMP ERROR_HANDLE SJA1000_INIT40: MOV ERRORC,#020H SJA1000_INIT41: LCALL BCAN_QUIT_RETMODEL ;退出复位状态 JNB F0, SJA1000_INIT50 ;判断设置是否成功 DJNZ ERRORC, SJA1000_INIT41 MOV ERROR_STATUS,#0FEH;#SJA_INIT_ERR LJMP ERROR_HANDLE SJA1000_INIT50: MOV DPTR,#REG_CONTROL ;开放 SJA1000 内部功能中断 MOV A,#01EH ;中断开放 MOV @DPTR,A RET ERROR_HANDLE: LCALL BCAN_ENTER_RETMODEL ;进入复位模式 LCALL SJA1000_INT0 ; MOV ERROR_STATUS,#0FCH RET (3) CAN节点通讯设计 1)本次设计对总线传输的数据帧CAN2.0A协议做了如下统一规定: ID.10 ID.9 ID.8 ID.7 ID.6 ID.5 ID.4 ID.3 ID.2 ID.1 ID.0 ID.10—ID.9 用于设定仓库的类型。这里可以设定种仓型,如00:房式仓, 01:筒式仓 ID.8—ID.6 用于设定仓库号 如001:1号仓库,依次类推。

22

ID.5—ID.3 用于设定仓库中的测量节点数。如001:表示第1个CAN节点其他的依次类推。 ID.0 用于设定数据传输方向 如0:表示发送 ,1:表示接收。 具体举例如: 设定(ID.10—1D.0)为 00010100110。表示为房式仓 2 号仓库第二个节点上传数据 2) 节点的数据接收 该部分通过主程序调用数据接收子程序完成。分别如下: 数据接收的主程序调用 MOV R0, #RCV_DATA_BUF1 LCALL BCAN_DATA_RECEIVE ;调用接收数据子程序 MOV R7,#04H ;释放接收缓冲区 LCALL BCAN_CMD_PRG RET 数据接收子程序(流程图如图 4.9) BCAN_DATA_RECEIVE: MOV DPTR, #REG_STATUS MOVX A, @DPTR SETB F0 JNB ACC.0, BCAN_DR_QUIT ;判断报文是否有效 CLR F0 MOV DPTR, #REG_RxBuffer1 MOV A,@DPTR MOV R2, A CJNE A, ADDRESS_G, BCAN_DR_QUIT ;比较节点地址 MOV DPTR, REG_RxBuffer2 ;接收报文的 ID 号的低 3 位 \RTR 位 \数据长度 DLC MOVX A, @DPTR ;接收缓冲区的首地址 MOV R2, A MOV A, R2 JB ACC.4, BCAN_RCVYB ;接收到的是远程帧 ;数据帧 MOV B,A ANL A, #0FH ;计算接收到的数据长度 ADD A #02H ;计算报文的长度 MOV R6, A AJMP BCAN_RCVDATA BCAN_RCVYB: MOV R6, #02 ;远程帧 BCAN_RCVDATA: ;开始读取数据 MOVX A, @DPTR MOV @R0, A INC DPTR INC R0 DJNZ R6, BCAN_RCVDATA BCAN_DR_QUIT: RET

23

图4.9

图4.10 3)节点数据的发送 该部分通过主程序调用数据发送子程序完成 数据的发送主程序调用: MOV R0, #SEND_DATA_BUF1 LCALL BCAN_DATA_WRITE ;将要发送的数据送入发送缓冲区

24

MOV R7, #01 LCALL BCAN_CMD_PRG RET 数据发送子程序(流程图如图 4.10) : BCAN_DATA_WRITE: MOV DPTR, #REG_STATUS MOVX A, @DPTR SETB F0 JNB ACC.3, BCAN_DW_QUIT CLR F0 MOVX A, @DPTR SETB F0 JNB ACC.2, BCAN_DW_QUIT CLR F0 INC R0 MOV A, @R0 ;R0 为微处理器要发送数据的首地址 DEC R0 MOV DPTR, #REG_TxBuffer1 ;发送缓冲区首地址 JB ACC.4, BCAN_WYB ;远程帧 ;数据帧 ANL A, #0FH ;计算发送数据的长度 ADD A, #02H MOV R7, A AJMP BCAN_WRTXBUF BCAN_WYB: MOV R7, #02 ;写入发送缓冲区数据长度为 2 BCAN_WRTXBUF: MOV A, @R0 ;开始写入 MOVX @DPTR, A SETB F0 MOVX A, @DPTR ;校验写入的是否正确 XRL A, @R0 JNZ BCAN_DW_QUIT ;写入错误退出 CLR F0 ;正确写入继续 INC R0 INC DPTR DJNZ R7, BCAN_WRTXBUF ;没有写完继续 BCAN_DW_QUIT: RET (4)监控系统的节点设计中需要注意的问题: 总线两端需要配备两个 120Ω 的电阻,来匹配总线阻扰,忽略掉它们,将会使数据通信 的抗干扰性及可靠性大大降低,甚至无法通信。 SJA1000 的 TX1 脚要悬空,RX1 引脚的电位必须维持在约 0.5Vcc 上,否则,将不能形 成 CAN 协议所要求的电平逻辑。

25

SJA1000在向下加载初始化后,接收码寄存器、接收屏蔽码寄存器、总线定时器0、定 时器1和输出控制寄存器中的内容不能改变,并且整个系统中的SJA1000内的总线定时器 0、定时器1内容必须相同,否则通信无法进行。

4.4 温度检测部分[49][53][61]
4.4.1 传感器介绍
这里我们采用由 DALLAS 半导体公司生产的 DS18B20 型单线智能温度传感器,该传感 器属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度 测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。 使用 1-WIRE 协议的数字化温度传感器。具有以下特点: (1)独特的单总线方式:DS18B20 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 (2)在使用中不需要任何外围元件。 (3)可用数据线供电,电压范围:+3.0—+5.5 V。 (4)测温范围:-55 —+125 ℃。固有测温分辨率为 0.5 ℃。 (5)通过编程可实现 9—12 位的数字读数方式。 (6)用户可自设定非易失性的报警上下限值。 (7)支持多点组网功能,多个 DS18B20 可以并联在惟一的三线上,实现多点测温。 (8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。

4.4.2 DS18B20 的内部结构
DS18B20 采用 PR35 封装或 8 脚 SOIC 封装,其内部框图如图 4.11 所示:

图 4.11

4.4.3

DS18B20 的测温原理

DS18B20 的测温原理如图 4.12 所示,图中低温度系数晶振的振荡频率受温度的影响很 小,用于产生固定频率的脉冲信号送给减法计数器 1,高温度系数晶振随温度变化其震荡频 率明显改变,所产生的信号作为减法计数器 2 的脉冲输入,图中还隐含着计数门,当计数门 打开时,DS18B20 就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。 计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分 别置入减法计数器 1 和温度寄存器中,减法计数器 1 和温度寄存器被预置在-55℃所对应的 一个基数值。 减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数, 当减法计数器

26

1 的预置值减到 0 时温度寄存器的值将加 1,减法计数器 1 的预置将重新被装入,减法计数 器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数, 如此循环直到减法计数器 2 计数 到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图 4.12 中的 斜率累加器用于补偿和修正测温过程中的非线性, 其输出用于修正减法计数器的预置值, 只 要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是 DS18B20 的测温原理。

图 4.12
DS18B20 的软件操作共有 5 个 ROM 功能命令和 6 个内存操作命令,分别如表 4.5 和表 4.6:

表 4.5 M 操作指令 指 令 读 ROM 符合 ROM 约定代码 33H 55H 功 能 读 DS1820 温度传感器 ROM 中的编码(即 64 位地址) 发出此命令之后, 接着发出 64 位 ROM 编码, 访问单总线 上与该编码相对应的 DS1820 使之作出响应,为下一步对 该 DS1820 的读写作准备。 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。 适用于单片工作。 执行后只有温度超过设定值上限或下限的片子才做出响 应。 表 4.6 RAM 操作指令 功 能 启动 DS1820 进行温度转换,12 位转换时最长为 750ms(9 位为 93.75ms)。结果存入内部 9 字节 RAM 中。 读内部 RAM 中 9 字节的内容 发出向内部 RAM 的 3、4 字节写上、下限温度数据命令, 紧跟该命令之后,是传送两字节的数据。 将 RAM 中第 3 、4 字节的内容复制到 EEPROM 中。 将 EEPROM 中内容恢复到 RAM 中的第 3 、4 字节。 读 DS1820 的供电模式。寄生供电时 DS1820 发送“ 0 ”,
27

搜索 ROM 跳过 ROM 告警搜索命令

0FOH 0CCH 0ECH

指 令 温度变换 读暂存器 写暂存器 复制暂存器 重调 EEPROM 读供电方式

约定代码 44H 0BEH 4EH 48H 0B8H 0B4H

外接电源供电 DS1820 发送“ 1 ”。

4.4.4

温度检测的硬件设计

DS18B20 主要有两种工作方式:寄生电源工作方式和外接电源工作方式。这里我们采用 外接电源方式(如图 4.13) ,由这种方式构成的多点测温如图 4.14。

图 4.13

图 4.14

4.4.5

软件设计分析

在 DS18B20 接入系统以前, 应该分别从 ROM 中读出其序号, 然后分别赋予系统中的编号 1 到 N 号。以便在粮库中对点操作。步骤如下:主机发出一个脉冲,待“0”电平大于 480us 后,复位 DS18B20,在 DS18B20 所发出响应脉冲由主机接收后,主机再发出 ROM 命令代 码 33H,然后发出一个脉冲大于 15us,并接着读取 DS18B20 序列号的一位。用同样方法读 出序列号的 64 位。 另外, 由于 DS18B20 单线通信功能是分时完成的, 遵循严格的时隙概念, 因此,系统对 DS18B20 和各种操作必须按 1-WIRE 协议协议进行,搜索算法采用的是二叉 树型结构见() ,搜索过程沿各分节点进行,直至找到器件的 ROM 注册码即为止;后续的搜 索操作沿节点上的其他路径进行, 按照同样的方式直至找到总线上的所有器件代码。 然后测 量温度单片机将从 DS18B20 型温度传感器中读出 2 个字节的温度值, 然后通过查表 (表 4.7) 即可得出温度值,期间单片机将禁止所有中断资源,以免打断 1-WIRE 时序。具体程序见附 录 B。 表 4.7 实测温度与数字输出的对应关系表 温度/℃ 数字输出(2 进制) 16 进制 0000011111010000 07D0H +125 +85 0000010101010000 0550H +25.0625 0000000110010001 0191H +10.125 0000000010100010 00A2H +0.5 0000000000001000 0008H 0 0000000000000000 0000H -0.5 1111111111111000 FFF8H -10.125 1111111101011110 FF5EH

28

-25.0625 -55 程序流程图如下:

1111111001101111 1111110010010000

FE6FH FC90H

图 4.15

4.4.6 使用 DS18B20 注意事项
(1) 出于 DS18B20 的测温分辨力提高到 l2 位.因此它对时序及电特性参数要求较高、需 严格按照 DSl8B20 的时序要求进行操作。 (2) 在 DS1820 测温程序设计中, DS1820 发出温度转换命令后, 向 程序总要等待 DS1820 的返回信号,一旦某个 DS1820 接触不好或断线,当程序读该 DS1820 时,将没有返回信号, 程序进入死循环。这一点在进行 DS1820 硬件连接和软件设计时也要给予一定的重视。务必 将 Vcc,I/O、GND 端焊接牢固。 (3)测温电缆建议采用带屏蔽层的 4 芯双绞线,其中一对线接地线和信号线,另一对接 VCC 和地线,屏蔽层在源端单点接地。 (4)DS18B20 在实际应用中。单总线上所挂 DS1820 超过 8 个时,就需要解决微处理器 的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 (5)连接 DS1820 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度 超过 50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常 通讯距离可达 150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一 步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用 DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。

4.5
4.5.1

湿度检测部分[[28][50][57]
传感器介绍

湿度检测采用HS1101型湿度传感器,HS1101是HUMIREL公司生产的变容式相对湿度传感 器,HS1101 湿敏电容是基于独特工艺设计的电容元件。主要具有以下特性: (1).高精度:±2%RH,极好的输出线性 (2).宽量程:1—99%RH,宽工作温度-40—100℃ (3).湿度输出受温度影响小,常温使用不需温度补偿 (4).响应速度快:5 秒;浸水或结露后迅速恢复 10 秒 (5).抗静电,防灰尘,有效抵抗各种腐蚀性物质 (6).长期稳定性可靠性好:0.5%RH/年

4.5.2 湿度测量硬件设计
HS1101测量湿度主要有两种方法:一是将该HS1101置于运放与阻容组成的桥式振荡电 路中,所产生的正弦电压信号经过整流滤波,直流放大,再A/D转换成数字信号;第二种就

29

是将HS1101置于555振荡电路中,将电容值的变化转换成电压频率信号,可以直接被微处理 器采集。这里我们采用第二种方法。 设计的电路如图4.17。 555芯片外接电阻R20, R19与HS1101, 构成对HS1101的充电回路。 7端通过芯片内部的晶体管对地短路实现对HS1101的放电回路,并将引脚2,6端相连引入到 片内比较器,构成一个多谐波振荡器,其中,R20相对于R19必须非常的小,但决不能低于 一个最小值。R18是防止短路的保护电阻。

4.5.2

HS1101 测量湿度的原理分析

HS1101 作为一个变化的电容器(其电容—湿度响应曲线如图图 4.17) ,连接 2 和 6 引 脚。 引脚作为 R20 的短路引脚。 HS1101 的等效电容通过 R19 和 R20 充电达到上限电压(近 似于 0.67 Vcc,时间记为 T1),这时 555 的引脚 3 由高电平变为低电平,然后通过 R19 开始 放电, 由于 R20 被 7 引脚短路接地, 所以只放电到触发界线(近似于 0.33 Vcc, 时间记为 T2), 这时 555 芯片的引脚 3 变为高电平。通过不同的两个电阻 R19,R20 进行传感器的不停充 放电。产生方波输出。可以得出: T1 =C(R4+R2)ln2 T2 = CR2ln2 这样可得 555 输出方波频率为
f 555 ? 1 1 ? (T 1 ? T 2) C(R4+2R2)ln2

由此可以看出,空气相对湿度与 555 芯片输出频率存在一定线性关系。表 4.8 给出了典 型频率湿度关系。 我们可以通过微处理器采集 555 芯片的频率, 然后查表即可得出相对湿度 值。这里我们为了更好提高测量精度,这里我们采用下位机负责采集频率,将频率值送入上 位机进行分段处理,具体处理程序见附录 B。

图 4.16 表 4.8(参考点:25℃,相对湿度:55%,输出频率:6660kHz) 0 10 20 30 40 50 相对湿度值/% 7.100 6.976 6.853 6.728 输出频率值/kHz 7.351 7.224 60 70 80 90 100 相对湿度值/% 6.330 6.186 6.033 输出频率值/Hz 6.600 6.468

30

图 4.17

4.5.3 焊接 HS1101 时注意事项
(1)烙铁温度要少于 300 度。 (2)接触时间少于 6 秒。 (3)防止烙铁漏电击穿。 (4)注意防静电处理。 (5)焊完后放置 24 小时才稳定。

4.6

虫害检测部分[27]

害虫特别是幼虫都有向孔、 缝中钻的生活习性。 虫害检测就是基于这种原理设计而成的。 用一根内壁光滑的细长管做成害虫收集管,插入粮食中,管壁上钻有很多细孔,细孔的直径 要恰当,粮食颗粒不能掉入而害虫刚好能钻入。小型粮仓在粮仓中间捕一个收集管即可,中 型粮仓可用 2~3 个收集管选择适当的距离,呈直线形或成三角形插入粮仓内,大型粮仓可 用 5 个收集管,按一定的距离,呈梅花形捕入粮仓内。在管的下方某一位置设有一个光电传 感器.害虫钻入后就会从管中落下,通过传感器时便产生一个脉冲。然后在一段时间里对脉 冲计数,即可测出虫害数量。这里我们采用 10 秒记一次数。具体电路设计如下,元件选择 VD1 选用聚光型红外发射二极管,VT1 选用国产光敏三极管 3DU,VT2 的放大倍数要大于 80 为好。设计原理图如图 4.18。 具体程序见附录 B。

图 4.18

4.7

温/湿度及虫害控制部分[43][51]

我们采用继电器控制通风,除湿等设备的启动,具体设计如图,其中 J1 用于控制通风 设备,J2 用于控制湿度,J3 用于控制熏蒸机。

31

图 4.19 软件流程如图 4.20,具体程序见附录 B:

图 4.20

32

第五章

上位机系统的设计

5.1 CAN 通讯适配器的设计[16][22][23][24][25][26]
我选择了基于 EPP 并口的方法实现 CAN 网络与计算机的接口。该方式结构简单(借助 于并口总线, 无需独立的微处理器) 成本非常低, , 灵活性强 (由上位计算机控制软件决定) , 传输速率高,具有很强的应用价值和市场前景。

5.1.1 EPP 简介
EPP 即增强型并行接口协议, 它与外设之间定义了双向通信的标准。 IEEE1284 标准对 EPP 协议进行了规范。 目前 EPP 有 EPP1.7 和 EPP1.9 两个标准。 接口协议通过硬件自动握手, EPP 能达到 500Kbps 到 2Mbps 的通信速率。接近 ISA 总线的速率。适合于大块数据传输的场合。 在具体应用中,计算机一般默认并口为 ECP 模式,这里我们通过 BIOS 中 Parallel port mode 将并口模式并口设置为 EPP 模式。 (1) EPP 的模式信号如表 5.1 表 5.1

(2) EPP 寄存器定义如表 5.2 : 表 5.2 端口名称 I/O 地址 BASE_AD 数据寄存器 BASE_AD+1 状态寄存器 BASE_AD+2 控制寄存器 BASE_AD+3 EPP 地址端口 BASE_AD+4 EPP 数据端口 (3) EPP 的读写时序如图 5.1 :

读/写 可写 可读 可写 可读可写 可读可写

说明

EPP 读写周期的地址 EPP 读写周期的数据

33

图 5.1

5.1.2 CAN 适配器硬件设计

[29][30]

利用 EPP 并行口实现 PC 机 CPU 与 SJA1000 的通信,关键在于实现 SJA1000 的读写时 序,实现的方法有两种:软件产生读写时序电路和硬件产生读写时序电路。采用软件产生读 写时序设计的硬件比较简单,便于调试,但是程序编写比较复杂(需编写程序产生 SJAl000 的读写时序);用硬件产生读写时序设计的硬件稍微复杂,硬件调试也复杂一些,但是应用 程序的编写要简单一些(不用编写程序产生 SJAl000 的读写时序),而且端口读写的速度也快 得多。这里我们选用硬件产生读写时序电路。通过逻辑门的时间延迟来产生 SJA1000 握手 等信号,实现“自给自足” 。具体设计电路如图 5.2:

34

图 5.2

5.1.3 CAN 适配器软件设计[29][30][56]
在 Windows 环境下我们采用 VB 语言进行开发,但由于 Windows 的保护,VB 无法直 接读写并行端口, 因此我们需要另外的程序模块来实现并行端口的的直接读写。 这里我们使 用 YARIV KAPLAN 先生的 WINIO 模块来解决 VB 对并口的操作。 使用时将 Winio.sys、Winio.dll、Winio.vxd 及 Winio.bas 四个文件拷贝到工作目录下,在 VB 程序中直接添加 Winio.bas 模块即可。我们用到的函数主要有四个,分别说明如下: 1)Initialize():允许端口控制函数,在使用端口输入输出函数之前调用一次,操作时在 FORM_LOAD 中首先判断 InitializeWinIo 是 True 还是 False,它必须是 True,否则后继所有 与 WINIO 相关的操作均不能进行。 2)Shutdown():关闭端口控制函数,在退出程序时执行一次,成功返回“1” ,失败返回“0” 。 3)GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte) As Boolean:读取端口函数,PortAddr 为端口地址, Portval 为端口值,bSize 为要读取 的字节数,读取成功返回“1” ,失败返回“0” 。 4)SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte) As Boolean:写端口函数,PortAddr 为端口地址, Portval 为要写的值,bSize 为要写入 的字节数,写入成功返回“1” ,失败返回“0” 。 注:这 4 个函数在 WINIO 模块中申明,不需要修改。WINIO 模块申明见附录 D 一旦 InitializeWinIo 操作成功, 在你的程序中就可以使用 GetPortVal 读外部端口状 态,用 SetPortVal 设置外部端口状态:如下: 读端口:Result = GetPortVal(Val("&H" + TxtPortAddr), PortVal, 1) 写端口:Result = SetPortVal(Val("&H" + TxtPortAddr), Val("&H" + TxtPortByte), 1) 通过这两个函数即可进行 EPP 并口的读写控制。下面给出了基于 VB 的并口驱动部分程序, SJA1000 的初始化程序以及 VB 启动组态王程序,其它程序见附录 C: 1)开启并口程序 Private Sub Form_Load() If InitializeWinIo = False Then MsgBox "并口初始化没有成功.", vbOKOnly + vbCritical, "警告"

35

Else 调用应用程序 End If End Sub 2)关闭并口程序 Private Sub Form_Unload(Cancel As Integer) Call ShutdownWinIo End Sub 3) VB 对 SJA1000 的初始化程序 Result = SetPortVal(&H37A, &H4, 1) Result = SetPortVal(&H37B, &H0, 1) Result = SetPortVal(&H37C, &H1, 1) ;SJA1000 进入复位 ;寄存器具体配置

Result = SetPortVal(&H37B, &H4, 1) ;验收滤波器设置 Result = SetPortVal(&H37C, &H0, 1) Result = SetPortVal(&H37B, &H5, 1) Result = SetPortVal(&H37C, &HFF, 1) Result = SetPortVal(&H37B, &H6, 1) ;通讯波特率设置 Result = SetPortVal(&H37C, &H43, 1) Result = SetPortVal(&H37B, &H7, 1) Result = SetPortVal(&H37C, &H2F, 1) Result = SetPortVal(&H37B, &H8, 1) Result = SetPortVal(&H37C, &HAA, 1) Result = SetPortVal(&H37B, &H1F, 1) Result = SetPortVal(&H37C, &H48, 1) Result = SetPortVal(&H37B, &H0, 1) Result = SetPortVal(&H37C, &H2, 1) Result = SetPortVal(&H37B, &H0, 1) Result = SetPortVal(&H37C, &H0, 1) 4)VB 启动组态王程序 Dim x Dim fname As String fname = "C:\Program Files\Kingview\touchvew.exe" ;进入 SJA1000 工作模式 ;输出控制设置

36

x = Shell(fname, 1)

使用 WINIO 注意事项: DESIGN 方式下第二次调试程序运行一定会出现 Initialize()失败,这是这个模块程序 的一个小缺陷,但不影响它的使用。只要把它编译了,生成 EXE 文件,一样可以运行。

5.2 上位机组态设计
5.2.1 组态简介
[44][54]

“组态”的概念是伴随着集散型控制系统 (Distributed Control System 简称 DCS) 的出现才 开始被广大的生产过程自动化技术人员所熟知的。在工业控制技术的不断发展和应用过程 中,PC(包括工控机)相比以前的专用系统具有的优势日趋明显。这些优势主要体现在: PC 技术保持了较快的发展速度,各种相关技术已臻成熟;由 PC 构建的工业控制系统具有 相对较低的拥有成本;PC 的软件资源和硬件资丰富,软件之间的互操作性强;基于 PC 的 控制系统易于学习和使用,可以容易地得到技术方面的支持。在 PC 技术向工业控制领域的 渗透中,组态软件占据着非常特殊而且重要的地位。 组态软件是指一些数据采集与过程控制的专用软件, 它们是在自动控制系统监控层一级 的软件平台和开发环境, 使用灵活的组态方式, 为用户提供快速构建工业自动控制系统监控 功能的、通用层次的软件工具。组态软件应该能支持各种工控设备和常见的通信协议,并且 通常应提供分布式数据管理和网络功能。 对应于原有的 HMI (人机接口软件, Human Machine Interface)的概念,组态软件应该是一个使用户能快速建立自己的 HMI 的软件工具,或开发 环境。在组态软件出现之前,工控领域的用户通过手工或委托第三方编写 HMI 应用,开发 时间长,效率低,可靠性差;或者购买专用的工控系统,通常是封闭的系统,选择余地小, 往往不能满足需求,很难与外界进行数据交互,升级和增加功能都受到严重的限制。组态软 件的出现,把用户从这些困境中解脱出来,可以利用组态软件的功能,构建一套最适合自己 的应用系统。随着它的快速发展,实时数据库、实时控制、SCADA、通讯及联网、开放数 据接口、对 I/O 设备的广泛支持已经成为它的主要内容,随着技术的发展,监控组态软件将 会不断被赋予新的内容,当前组态软件的种类很多,比较出名的都有 10 余家,比如国外的 INTOUCH,IFIX 等,国内的 MCGS,力控,组态王等。这里我们选用国产的组态王 6.5 进 行上位机的监控和管理。

5.2.2 组态王的主要特点

[36]

组态王 6.5 是亚控科技在组态王 6.0x 系列版本成功应用后, 广泛征询数千家用户的需求 和使用经验, 采取先进软件开发模式和流程, 由十多位资深软件开发工程师历时一年多的开 发,及四十多位试用户一年多的实际现场考验。使用更方便,功能更强大,性能更优异,软 件更稳定,质量更可靠的国产组态软件主要具有以下特点: (1) :强大的画面组态功能,能很好的模拟现场。 (2) :强大的通讯能力和良好的开放性。 (3) :多任务的软件运行环境。 (4) :强大的实时数据库功能。 (5) :具有强大的网络功能。 (6) :具有多方位冗余功能。

5.2.3 组态王主要功能具体实现

[36]

37

(1)VB 与组态王的通讯 因为本系统是自己设计的现场采集,在组态王中没有驱动模块。所以要进行现场和上位 机的通讯需要第三方软件,这里我们采用 VB 与组态王的通讯。VB 应用程序利用 DDE 技 术与组态王进行数据交换。DDE(Dynamic Data Exchange)即动态数据交换,它是 Windows 支持的三种内部通信机制之一, 是应用程序间通过共享内存进行进程间通信的一种形式。 应 用程序间进行数据交换称为"会话"(Conversation) ,申请会话端叫客户(Client) ,响应申请 端叫服务器(Server) 。一旦客户与服务器间建立起 DDE 所需的数据链路就可自动进行数据 交换。VB 中只有 TextBox、PictureBox、Label 和 Form 可以与其它应用程序进行动态数据 交换,控件用于 DDE 的属性项有 LinkTopic(连接主题) LinkItem 、 (连接项) LinkMode 、 (连 接模式)和 LinkTimeout(连接等待时间) 。下面我们就以 VB 作为主机,组态王作为客户端 实现该系统数据交换,基本配置如下(我们仅以一个数据交换为例) :对于组态王作为服务 器,VB 作为客户端,只需在此基础上通过简单设置项目名即可。 1) :VB 的设置如下: 新建一个 vbdde 的应用程序, 在 Form1 属性中将 LinkMode 属性设置为 1(source), LinkTopic 属性设置为 FormTopic,这个值将在“组态王”中引用。文本框 Text1 属性:Name 属性设置为 wendu1,这个值也将在“组态王”中被引用。 2) 组态王的设置如下: : 新建一个名为 vbdde 的 DDE 设备,服务程序名为 vbdde(如图 5.3) ,话题名 formtopic,数 据交换方式为标准 WINDOWS 项目交换(如图 5.4) 。在组态王变量组中新建一个名为 f1wendu11 的 I/O 变量,连接设备设为 vbdde,项目名设为 wendu1(如图 5.5) ,这样即建立 起了 wendu1 和 f1wendu11 的通讯。对于多个数据交换,依次加入即可。

图 5.3

38

图 5.4

图 5.5 (2)组态王与 ACCESS 的通讯
[14][15][55]

在粮库监控系统中, 有很多数据信息需要处理。 比如对温度等参数的分布发展趋势进行 分析。尽管组态王软件具有强大的实时数据库功能.但其数据分析能力却十分薄弱。需要利 用曲线拟合的算法,通过组态王是很难完成。针对这种情况,我们可以利用组态软件数据库 访问的技术将数据库中数据取出.送到其他具有数据分析能力的软件(如 MATLAB)中去,从 而弥补了组态软件在数据分析方面的不足,为其在更大范围内的应用提供了切实可行的方 法。 访问组态王数据库主要有两种方法:FileWriteFields 函数访问和 SQL 访问。通过应用这 两种方法. 将组态王实时数据库中的实时数据直接取出. 从而使其他软件可以对数据进行分 析。这两种方法是并行的.任何一种都可以完成对组态王数据库的访问。相比较而言, FileWriteFields 函数方法相对简单,只要安装了“组态王”即可,但需要占用软件相当的点 数:利用 SQL 方法相对复杂一点,而且需要安装如 Access 等支持 SQL 的数据库软件,但 不占用组态软件的点数,这里我们选择利用 SQL 方法。 首先,先在access中建立一个库名为“粮库监控”的数据库并将其保存,并在该数据库 中建立一个表名为“参数表”的表.在字段名称处分别键入“日期”“时间”“温度”“湿 . , , 度”“虫害” , 。日期和时间参数类型前两个为“文本” ,其它三个参数类型为“数字” ,保存 该表。然后打开的控制面板中的数据源 (ODBC),安装一个Microsoft Access Driver数据源。

39

具体操作见图5.6和图5.7:

图5.6

图5.7 然后在组态王工程浏览器中建立一个名为BIND的记录体, 这里我们只列举一个点的字段配 置,如图5.8:

图 5.8 建立组态王和源名为“粮库监控”的数据源的连接,我们只需要在组态王应用程序命令语言

40

中启动时写入: SQLConnect( DeviceID, "dsn=mine;uid=;pwd="); SQLSelect( DeviceID, "参数表", "BIND", "", ""); 运行时写入: SQLInsert( DeviceID, "参数表", "Bind" ); SQLUpdateCurrent( DeviceID, "参数表" ); 结束时写入: SQLDconnect( DeviceID); 即可完成组态王与 ACCESS 的通讯,如果我们需要对这些参数进行分析只要在 ACCESS 中 把需要的数据保存为*.txt 格式即可送入 MATLAB 等处理软件。

5.2.4 组态界面的具体设计
我们利用组态王强大组态功能建立粮库的现场模拟图主要由进入画面(如图 5.9) ,监控总 图(如图 5.10)和具体仓库测量点模拟图(如图 5.11)等组成,对于历史曲线等图这里就不 一一列举了。

图 5.9

41

图 5.10 监控界面总图

图 5.11 房式仓现场模拟图

5.2.5 远程管理控制部分设计
(1)远程控制管理机的配置需求

[36]

42

随着Internet科技日益渗透到生活、生产的各个领域,传统自动化软件的e趋势已发展 成为整合IT与工业自动化的关键。并正在逐步迈向实施阶段。基于Internet的WEB实时监控 系统,是通过计算机网络,连接各生产或测试现场以及控制系统的信息,实现整个企业的监 控系统信息的采集、分析、统计、存储,让管理层和各部门都能看到以前只有现场监控人员 才能看到的现场实时状况。通过局域网、广域网、国际互联网,使企业内部,企业之间,处 于不同地区的各相关部门之间交流现场监控信息,使出差在外的人员能及时了解到监控情 况,实现对监控现场的远程调度、指挥决策。 组态王6.5提供了For Internet应用版本——组态王WEB版,支持Internet/Intranet访 问。 组态王WEB功能采用B/S结构, 客户可以随时随地通过Internet/Intranet实现远程监控, 而远程客户端仅仅需要的软件环境就是安装了Microsoft Internet Explore 5.0以上或者 Netscape 3.5以上的浏览器以及JRE插件(第一次浏览组态王画面时会自动下载并安装并保 留在系统上) IE客户端就能获得与组态王运行系统相同的监控画面, , IE客户端和WEB发布服 务器保持高效的数据同步,通过网络您能够在任何地方获得与在WEB服务器上一样的画面和 数据显示、报表显示、报警显示、趋势曲线显示等,以及方便快捷的控制功能。在客户端运 行的程序有着强大的自主功能,局域网内部如厂长办公室的电脑通过浏览器实时浏览画面, 监控各种工业数据, 而与之相连的任何一台PC机亦可实现相同的功能。 实现了对客户信息服 务的动态性、实时性和交互性。 (2)组态王远程控制的具体设计: 首先在组态王中双击“WEB”目录,设置端口为800,然后设置一个LKJK的发布组,同时对 LKJK需要发布的画面和用户权限进行配置。见图5.12和图5.13

图5.12

43

图5.13 (3)该系统的远程控制操作: 使用浏览器进行浏览时,首先需要输入 WEB 地址,这里我们采用 Internet Explorer 浏览 器。在该浏览器的地址栏里输入地址。地址的格式为: http://发布站点机器名(或 IP 地址):组态王 WEB 定义端口号 如果需要直接访问该站点上的某个组,则使用下面的地址: http://发布站点机器名(或 IP 地址):组态王 WEB 定义端口号 /要浏览的组名称 这里运行组态王的机器名为 liangkujiankong,其 IP 地址为“172.16.161.106” ,端口号为 800,发布组名称为“lkjk” ,那么可以在 IE 的地址栏敲入如下地址: http:// liangkujiankong:800 或 http://172.16.161.106:800 如果是直接进入该发布组,则输入以下地址: http:// liangkujiankong:800/lkjk 或 http://172.16.161.106:800/lkjk 如果定义的端口号为 80 时,可以省略端口号不输入,即: http:// liangkujiankong 或 http://172.16.161.106 注意如果采用端口号为 80 调试时,会出现端口被占用的情况。建议不采用此端口。 Touchvew 运行后,在任何一个与该发布机器通过网络相连接的站点上打开 IE 浏览器。输 入地址,均可进入发布组界面,这里我们通过 DREAMWEAVER 软件对界面做了一个简单处理, 如下图 5.14 和图 5.15 所示。通过该界面,即可进入监控系统,实现远程控制。

44

图5.14

图 5.15

第六章

系统的可靠性设计及注意事项

6.1 系统的可靠性设计[31][36]
在粮库监控系统中,CAN 通讯电缆容易受拉,压,砸,挤等影响而造成故障,这对于以 总线为核心的 CAN 总线系统将会是一种极大的威胁,比如总线短路,一旦发生这种故障,总

45

线将会失去通讯能力导致整个系统瘫痪。 解决这一故障的最有效的方法就是总线冗余, 同时 使用两条或多条总线电缆。 总线冗余的方法可分为完全冗余和部分冗余。 完全冗余是在 CAN 总线冗余处理上, 通常 采用的方法是使用两套总线,每一套都包含有完整的总线电缆、总线驱动器和总线控制器, 或将总线控制器与 CPU 集成于一体的 MCU(微控制单元,如单片机)。这种方法有两种操作方 式,一种是后备方式:一套运行,另一套“休眠”备用,当运行总线发生故障时,启用备用 总线;另一种是同时运行方式:两套总线同时运行, 如果其中一套发生故障, 另一套仍能维持 系统的正常运行。它的优点在于:实现了物理介质、物理层及数据链路层甚至应用层的全面 冗余,因此,可以称之为“全面冗余方法”。但全面冗余方法存在着某些不足之处,如,由 于 CAN 节点对系统的构成不敏感,因此,后备方式发现总线开路故障的能力和及时性较差; 同时运行方式由于两路同时工作,因此,功耗大。另外,由于使用两个总线控制器或 MCU, 这种冗余成本相对高一些。这里我们采用部分热冗余来实现系统的可靠性。 部分冗余方法只实现物理介质和物理层的冗余,这种方法使用两条总线电缆,每个节点 内部使用两个总线驱动器,但只有一个总线控制器。此外,在总线控制器与两个总线驱动器 之间设置一判断电路,结构图如图 6.1 所示。在该系统中,当节点发送时,总线控制器通过 两个总线驱动器同时向两条总线发送相同的报文(不管其中一条总线是否发生故障)。在接收 过程中, 判断电路自动选择两个总线中的一个并将其中的报文送人总线控制器。 由于两个总 线在传输延时上不会严格一致,两个报文的到达时间有先有后,因此,判断电路以时间优先 为选择原则,即抢先到达者被选中,其报文送人总线控制器,正常情况下,两个总线上传送 的报文是相同的,因此,无论选择哪一个,这一报文都能被送到总线制器。如果一个总线发 生故障, 则关闭它与总线控制器之间的信号通道, 而正常总线上的报文仍能顺利送往总线控 制器。此外,当发生总线故障时,将自动向 AT89S52 发出总线故障中断,这时,AT89S52 发送一个总线故障报警信号,通过非故障总线通知整个系统。 在部分冗余方法中,由于每个设备中只使用一个总线控制器,因此,在正常运行状态下 即使发生总线竞争(总线冲突)也不会造成两条总线的混乱或报文不一致的情况, 所以, 以这 种方法构成的系统完全能够符合 CAN 协议的要求。 这种方法与全面冗余方法相比, 不仅成本 低,而且它在发现总线故障以及及时性方面比后备方式好,功耗比同时运行方式低。当然, 部分冗余方法中多增加了一个环节(判断电路)使通讯延时增加, 通讯速度受到一些影响, 不 过,即使速度降低一些,对粮库监控系统这类的应用来说也足够了。

图 6.1

6.2 系统的注意事项
6.1.1 系统安装注意事项
(1) 在系统设备安装前,应采用兆欧表或万用表对系统主电源电缆、主通讯电缆和通讯电 缆进行测量,不允许有短路和断路现象。 (2)监控计算机,应置于干燥、通风、防尘性能好的室内,系统供电电源应注意防雷和可

46

靠的专用接地。 (3) 、CAN 监控节点应安装在仓外不受阳光直射、通风良好的防雨箱内,并良好接地。 (4) 、系统地主电源电缆和主通讯电缆应尽量采用铠装或穿钢管直埋敷设方式。 (5) 、安装于粮仓内的裸露铜制接线部分应进行防腐蚀处理。系统安装调试完成后,应将出 线口处进行良好密封,以防止熏蒸气体的泄露。

6.1.2 系统操作注意事项
(1) 、系统的操作人员须具备粮食保管和电器设备常识,经培训合格后方可上岗。 (2) 、粮情分析时要使用每天定时检测的数据,以确保检测数据的可比性。 (3) 、没有自动开/断电源功能的设备,检测操作完成后要切断各仓测控设备的电源,确保 外部测控设备处于断电状态。 (4) 、操作中出现导常粮情警告信息时,须及时查明原因,并采取有效的解决措施,同时报 告备案。 (5) 、操作中设备出现故障,而按操作说明书无法排除的,请尽快通知当地设备维修点,须 由专门技术人员或设备制造经销商检查维修。 (6) 、粮情测控系统应尽量避免在雷雨期间开机检测,开启/关闭测控主机时,应间隔一定 时间。

第七章 工作总结与研究展望
7.1 工作总结[21]
本课题通过对当今粮库系统的发展状况和发展趋势的分析,设计了CAN总线为通讯网 络的分布式粮库监控系统。将先进的现场总线技术CAN现场总线应用于粮库测控系统,大

47

大提高了系统内部的速率和实时性。其中利用AT89S52单片机进行采集节点控制,不仅大量 节约了资金,还可节约大量的研发费用;基于组态王的上位机组态提供了良好的人机界面, 使操作更加方便,系统直观。现场采集采用了全数字化的温度、湿度传感器,直接输出的是 表示温度和湿度的数字信号, 不存在由模拟量到数字量转换的中间环节, 所以该系统具有稳 定可靠、测量精度高、一致性好、无需任何调整、信号线长短不会影响其性能等优点,还有 单总线也带来安装方便、线路清晰、节省线材等长处。该系统具有很好的可靠性,将具有很 大的市场价值。 该系统稍加改造即可用于家用电器和智能楼宇以及小区建设中。 如安防系统、 抄表系统、 家电控制等。

7.2 研究展望[2][38][40]
由于这是我第一次接触总线系统的设计,对于 CAN 总线系统设计有了初步的了解,由于 本人能力和时间有限。对该系统的设计还有以下方面需要改进: (1) :本课题采用的是 CAN 总线的 BasicCAN 模式,测量节点最多只能达到 110 个,如 果要进行更多节点的监控,需要采用 PeliCAN 模式。 (2) :本课题采用是 DDE 通讯,传输速度虽然适合该系统,如果在速度要求高的场合, 应编写组态王通讯的驱动程序。 (3) :在该系统中利用的是 CAN 底层协议提供的功能,数据量再大一些的话,系统中 部分低优先级的信息帧很可能会发不出去, 而发送这些低优先级信息帧的站点会因为多次发 送错误,退出 CAN 总线。我们可以研究相应的动态优先级算法来改善 CAN 网络的实时性。 (4) :对于复杂的 CAN 系统开发,可考虑采用 RTOS 作为任务调动的核心程序,提高 系统的实时性。 (5) :CAN 总线与先进理论的结合:如模糊控制技术和智能技术。近年来,由于企业规 模的不断扩大,生产过程控制系统也越来越复杂,系统的非线性增强、时滞增大,而且很难 给系统的每个环节建立精确的数学模型, 这就要求模糊逻辑控制的应用。 现场总线的强大网 络功能实现集中化管理, 而对必要的现场环节实行分散的模糊控制。 这样可以很好地提高系 统的可靠性和智能化水平。 把智能控制技术和现场总线结合起来将会成为以后工程控制中的 主要研究和应用方向。 (6) :还需要扩大粮库中其他参数的采集,粮库出入库管理系统,防火防盗功等功能。

48

参考文献 [1] 李正军 现场总线及其应用技术 机械工业出版社 2005.1 [2] 史久根 张培仁 陈真勇 CAN 现场总线系统设计技术 国防工业出版社 2004.10 [3] 戴佳 戴卫恒 51 单片机 C 语言应用程序设计实例精讲 电子工业出版社 2006.7 [4] 李园园 魏权利 李勇 基于 RS485 通信的主从式粮仓监控系统 工业控制计算机 2006 年,第 12 期 [5] 杨陶 李行建 PROFIBUS 总线技术在粮情温度监测系统中的应用 仪器仪表与分析监测 2003 年第 4 期 [6] 魏永禄 张吉月 纪文刚 基于 MODBUS/TCP 的分布式粮情监控系统的设计 北京石油化 工学院学报 2005 年 6 月 第 13 卷第 2 期 [7] 郑长征 毛哲 谢兆鸿 nRF903 在粮库测温系统中的应用 现代电子技术 2006 年 21 期 [8] 周金柱 阎勤劳 范方娟 甘海宁 粮库实时无线监控系统及 GPRS 技术应用 农机化研 究 2005 年 1 期 [9] 夏美云 郭艳红 基于 NRF401 无线发射电路的粮库监控系统 商场现代化 2005 年 10 期 [10] 张志鸿 ,岳一领 ,闫献国 ,孙培刚等 基于 PowerBus 技术的粮仓设备计算机测控系 统的设计与实现 大连理工大学学报 2006 年 9 月第 37 卷第 5 期 [11] 顾根来 贾 锟 余德猛 粮库计算机管理控制系统初探 仓房建设与设施 2005 [12] 甘凤萍 张红梅 国家储备粮库 MIS 的设计和实现 河南工业大学学报(自然科学版) 2006 年 8 月 第 27 卷 4 期 [13] 凌振宝 王君 邱春玲 基于 GSM 技术的粮库温度检测系统设计 仪器仪表学报 2003 年 8 月第 24 卷第 4 期增刊 [14] 李卫中 曹顺安 李红霞 用 ACCESS 扩展组态王的功能 化工自动化及仪表 2002 年, 第 04 期 [15] 陆健健 黄 勇 徐骏善 用 ACCESS 扩展组态王的动态数据交换功能 工业控制计算机 2003 年 07 期 [16] 朱兆优 林刚勇 王海涛 CAN 总线与 LPT 通信接口设计的与实现 东华理工学院学报 2006 年 6 月第 29 卷第 2 期 [17] 刘雨刚 李 亮 组态王与 VisualBasic 在矿井通风主扇监控系统中的应用 煤炭工程 2006 年第 11 期 [18] 韩梅 杨晓源 沈泓 粮库自动监控系统设计 信息技术 2001 年第 09 期 [19] 吴 迪 王玉坤 陈占玉 丁卫国 粮情电子测控系统使用现状与展望 粮油仓储科技通 讯 2004 年 05 期 [20] 来清明 基于 CAN 总线的多功能大型粮仓远程监测系统 微计算机信息 2005 年第 07 期 [21] 狄卫国 井海明 杨明 燕延 基于 CAN 总线的大型粮仓远程监控系统 仪表技术 2004 年 02 期 [22] 曹军义 刘曙光 基于增强并行口 EPP 协议的 CAN 控制器设计 自动化与仪表 2003 年第 02 期 [23] 黄勇 周有庆 彭红海 邵霞 在 EPP 模式下利用并口实现上位机与 CAN 总线的数据通信 中国仪器仪表 2003 年第 04 期 [24] 庄乾成 饶运涛 江珊珊 魏雄 PC 机并口与 CAN 现场总线通讯的实现 仪表技术 2005 年4期 [25] 吴楠 梁再信 增强型并行口 EPP 协议及其在 CAN 监控节点中的应用电子技术应用 2000 年第 04 期

49

[26]William Buchanan 著 精英科技 译 PC 接口通信与 Windows 编程 中国电力出版社 2001.5 [27] 陈贵银 雷建龙 基于 AT89C2051 的仓库粮食虫害检测报警系统现代电子技术 2002 年 第 03 期 [28] 邹晴 基于 AT89C51 的湿度测量系统 电气时代 2006 年 03 期 [29] 张培仁等 自动控制技术和应用 中国科学技术大学出版社 2001 [30] 汪道辉 单片机系统设计与实践 电子工业出版社 2006 [31] 禹春来 许化龙 刘根旺 侯晓林 CAN 总线冗余方法研究 测控技术 2003 年第 22 卷第 10 期 [32] 丁恩杰 监控系统与现场总线 矿业大学出版社 2003.10.1 [34] 张戟 程旻 谢剑英 基于现场总线 DeviceNet 的智能设备开发指南 西安电子科技大学 出版社 2004.6 [35] [36]北京亚控科技发展有限公司.KINGVIEW Version6.0 使用手册[M].2001 [37]北京亚控科技发展有限公司.组态王 Version6.0 命令语言函数速查手册[M].2001 [37] 李雁飞 陈国钧 张卫东 吴杰长等 组态王环境下数据库访问技术及其应用 微计算机 信息 2004 No.12 P.5-6 [38] 韩进军 唐红卫 CAN总线实时性研究及改进 计算机测量与控制.2005.13(11) [39] 赵文敏 用 VB 6.0 开发粮库温度监测系统的监控软件 现代电子技术 2001 年,第 04 期 [40] 刘艳, 马秋霞, 王健 CAN 总线通讯的电磁兼容性能分析与设计 电子技术应用 2006 年,第 08 期 [41] 肖海荣,周风余.基于SJA1000的CAN总线系统智能节点设计[J] .计算机自动测量与控 制,2001,9(2) [42] 独立 CAN 器件 SJA1000 的应用[J].南京工程学院学报,2002 年 3 月 [43] 史军勇 冀捐灶 杨宝强 基于 AT89C2051 单片机的温湿度控制仪 电子技术 2004 年第 01 期 [44] 李琳 郭文成 Li Lin 基于组态王的监控系统设计及数据处理 工业控制计算机 Industrial Control Computer 2006 年,第 01 期 [45] 黄卫华 方康玲 周红军 肖伟 基于组态王和 VB 的工业远程监控系统 冶金自动化 2005 年,第 02 期 [46] 洪家平 基于 CAN 总线的粮库温湿度监控系统的研制 电脑开发与应用 2004 年,第 10 期 [47] 王冬 曹立文 刘向东 CAN 总线在粮库温湿度监控系统中的应用 机电工程技术 2006 年,第 07 期 [48] 王玉奎 粮情检测系统软硬件接口设计 粮油食品科技 2006 年,第 06 期 [49] 陈涛 王仲东 DS18B20 在粮情监控系统中的应用 昆明理工大学学报(理工版) , 2003 年 05 期 [50] 罗飞 低成本的数字显示湿度测量仪的设计实验室研究与探索 ,2006 年 07 期 [51] 刘振全 王朝玉 基于单片机的冬枣保鲜库温、湿度监控系统天津科技大学学报 2003 年 03 期 [52] 周育才 刘少军 邓奕 刘忠伟等 基于 DS18B20 分组方式测温系统设计微计算机信息 2007 年 01 期 [53] 蒋鸿宇 王勇 植涌 DS18B20 构成的多点温度测量系统单片机与嵌入式系统应用 , 2007 年 01 期

50

[54] 赵维佺 冼钊龙 监控组态软件的研究与应用工业控制计算机 2006 年 10 期 [55] 孙明革; 朱喜林;基于组态王软件下的 SQL 数据库技术微计算机信息 2006 年 07 期 [56] 刘江虹 徐晓东 在 VB 中对并行口编程 内蒙古大学学报(自然科学版) , 2003 年 06 期 [57] 林敏 于忠得 HS1100/HS1101 电容式湿度传感器及其应用。仪表技术与传感器。2001 [58] 鲍官军 计时鸣 张利 王亚良 CAN 总线技术、系统实现及发展趋势 浙江工业大学学 报 , 2003 年 01 期 [59]CenaG,ValenzanoA.AnimproveCANfieldbusforindustrialapplications[A].IEEETransactionsOn IndustrialElectronics[C].California:IEEE,1997. [60]PHILIPSSemiconductors.CANSpecification(Version2.0)[M].Eindhoven:PHILIPSSemiconduc tors,1991. [61] DS18B20 Programmable Resolution 1—Wire Digital Thermometer,Dallas Semiconductor, 2003 [62] PHILIPS Semiconductors.Data Sheet SJA1000 Stand—alone CAN Controller。1997 [63] PHILIPS Semiconductors.PCA82C250 CAN controller interface data sheet, 1997.10

51





经过 1 年多的时间,论文设计终于告一段落,在此我首先要感谢我的导师谌海云老师, 回顾 3 年的研究生生活, 谌老师无论从学习上还是生活上均给予了我很大帮助。 特别是他那 种严谨的治学态度和认真工作的精神。对我以后的工作学习都将是一个很好的指引。 同时感谢电子信息工程学院的领导和老师, 感谢他们 3 年来对我生活上的关心, 以及学 习上的指导。 最后我要感谢研究生院测试计量技术及仪器专业 2004 级所有研究生同学,感谢他们 3 年来对我的勉励和帮助。 我将在以后的工作中作出更大的成果来答谢曾经指导、帮助和支持过我的领导,老师, 同学和朋友们。 发表论文:

附录 附录 A
A1 CAN 节点电路原理图 A2 CAN 节点电路实物图

附录 B
CAN 节点部分程序
ORG LJMP ORG LJMP ORG LJMP ORG LJMP 0000H MAIN 0003H BCAN_INT0 0013H INT1_INT 001BH T1_INT

ORG 0100H MAIN: MOV R0,#07fH CLR A MOV @R0,A DJNZ R0,$-1 MOV @R0,A MOV SP,#60H LCALL SJA1000_INT0 LCALL T1_INIT

52

CLR FS_FLAG CLR RCV_GOOD CLR ERR_FLAG SETB PX0 SETB PX2 SETB IT1 SETB EX1 SETB EX0 SETB TR1 SETB EA LOOPER: JNB RCV_GOOD,LOOPER2 CLR RCV_GOOD LCALL RCVDATA_PRG MOV R0,#RCV_DATA_BUF1 INC R0 INC R0 MOV A,@R0 INC R0 ANL A,#01H JNZ KAIQI1 CLR P2.3 L1: MOV A,@R0 INC R0 ANL A,#01H JNZ KAIQI2 CLR P2.4 L2: MOV A,@R0 ANL A,#01H JNZ KAIQI3 CLR P2.5 AJMP LOOPER2 KAIQI1: SETB P2.3 AJMP L1 KAIQI2: SETB P2.4 AJMP L2 KAIQI3: SETB P2.5 LOOPER2: JNB FS_FLAG,LOOPER3

53

LCALL LCALL CLR LCALL LOOPER3: JNB CLR LCALL LOOPER4: AJMP

WENDUCELIANG CHONGHAICELIANG FS_FLAG SENDDATA_PRG ERR_FLAG,LOOPER4 ERR_FLAG ERR_PRG LOOPER

SJA1000_INT0: LCALL BCAN_CREATE_COMMUNATION MOV R7, #04 LCALL BCAN_SET_BANDRATE MOV R7, #00H MOV R6, #0FFH LCALL BCAN_SET_OBJECT MOV R7, #0AAH MOV R6, #048H LCALL BCAN_SET_OUTCLK LCALL BCAN_QUIT_RETMODEL MOV DPTR,#REG_CONTROL MOV A,#01EH MOVX @DPTR,A CLR F0 RET ERR_PRG: LCALL LCALL MOV RET

BCAN_ENTER_RETMODEL SJA1000_INT0 ERROR_STATUS,#0FCH

RCVDATA_PRG: MOV R0,# RCV_DATA_BUF1 LCALL BCAN_DATA_RECEIVE MOV R7,#04H LCALL BCAN_CMD_PRG RET SENDDATA_PRG: MOV R0, #SEND_DATA_BUF1 MOV A, ADDRESS_H

54

MOV INC MOV MOV ADD MOV INC MOV INC MOV MOV LCALL MOV LCALL RET T1_INT: push PUSH PUSH PUSH MOV MOV MOV DJNZ MOV INC MOV CJNE SETB

@R0, ADDRESS_H R0 @R0, ADDRESS_L A, @R0 A,#04H @R0, A R0 @R0, TEMPER_NUM R0 @R0, CHONHAI R0, #SEND_DATA_BUF1 BCAN_DATA_WRITE R7, #01 BCAN_CMD_PRG

DPH DPL PSW ACC TMOD, #26H TH1, #4CH TL1, #00H JISHU,T1OUT JISHU,#39 JISHU1 A,JISHU1 A,#40,T1OUT FS_FLAG

T1OUT: POP ACC POP PSW POP DPL POP DPH RETI INT1_INT: PUSH DPH PUSH DPL PUSH PSW PUSH ACC INC CHSLL JNC INT1_OUT

55

INC CHSLH INT1_OUT: POP ACC POP PSW POP DPL POP DPH RETI CHONGHAICELIANG: MOV A,CHSLL RET T1_INIT: MOV TMOD, #26H MOV TH1, #4CH MOV TL1, #00H RET BCAN_INT0: PUSH DPH PUSH DPL PUSH PSW PUSH ACC MOV DPTR,#REG_INTERRUPT MOVX A,@DPTR MOV SAVE_INT_INFO,A JNB ACC.0,BCAN_INT1 SETB RCV_GOOD BCAN_INT1: MOV JNB SETB BCAN_INT2: POP POP POP POP RETI

A,SAVE_INT_INFO ACC.2,BCAN_INT2 ERR_FLAG ACC PSW DPL DPH

BCAN_CREATE_COMMUNATION: MOV DPTR, MOVX A, MOV A, MOVX @DPTR, SETB F0 MOVX A,

#REG_TEST @DPTR #0AAH A @DPTR

;对测试寄存器进行读写测试 ;写入值 0AAH

;读出值

56

CJNE MOV MOVX MOVX CJNE CLR MOVX CLR BCAN_CM_QUIT: RET

A, A, @DPTR, A, A, A @DPTR, F0

#0AAH,BCAN_CM_QUIT #055H A @DPTR #055H,BCAN_CM_QUIT A

;测试写入读出是否正确 ;再次测试 ;写入 055H ;测试写入读出是否正确 ;清零测试寄存器 ;接口正确

BCAN_ENTER_RETMODEL: MOV MOVX ORL MOVX CLR MOVX JB SETB BCAN_ER_QUIT: RET

DPTR, A, A, @DPTR, F0 A, ACC.0, F0

#REG_CONTROL @DPTR #01H A @DPTR BCAN_ER_QUIT

BCAN_QUIT_RETMODEL: MOV MOVX ANL MOVX CLR MOVX JNB SETB BCAN_QR_QUIT: RET

DPTR, A, A, @DPTR, F0 A, ACC.0, F0

#REG_CONTROL @DPTR #0FEH A @DPTR BCAN_QR_QUIT

BCAN_DATA_WRITE: MOV MOVX SETB JNB

DPTR, #REG_STATUS A, @DPTR F0 ACC.3, BCAN_DW_QUIT

57

CLR MOVX SETB JNB CLR INC MOV DEC MOV JB ;数据帧 ANL ADD MOV AJMP BCAN_WYB: MOV BCAN_WRTXBUF: MOV MOVX SETB MOVX XRL JNZ CLR INC INC DJNZ BCAN_DW_QUIT: RET

F0 A, @DPTR F0 ACC.2, BCAN_DW_QUIT F0 R0 A, R0 DPTR,

@R0 #REG_TxBuffer1;发送缓冲区首地址 ;远程帧 ;计算发送数据的长度

ACC.4, BCAN_WYB A, #0FH A, #02H R7, A BCAN_WRTXBUF

;

R7,

#02

;写入发送缓冲区数据长度为 2

A, @R0 @DPTR, A F0 A, @DPTR A, @R0 BCAN_DW_QUIT F0 R0 DPTR R7, BCAN_WRTXBUF

;开始写入

;校验写入的是否正确 ;写入错误退出 ;正确写入继续

;没有写完继续

BCAN_DATA_RECEIVE: MOV DPTR, #REG_STATUS MOVX A, @DPTR SETB F0 JNB ACC.0, BCAN_DR_QUIT CLR F0

;判断报文是否有效

58

MOV

DPTR, #REG_RxBuffer1

MOVX A,@DPTR MOV R2, A CJNE MOV MOVX MOV ANL RR A CJNE MOV JB ANL ADD MOV AJMP A, ADDRESS_H, BCAN_DR_QUIT DPTR, #REG_RxBuffer2 A, @DPTR R2, A A, #0F0H A, ADDRESS_L, BCAN_DR_QUIT A, R2 ACC.4, BCAN_RCVYB A, #0FH ;计算接收到的数据长度 A, #02H ;计算报文的长度 R6, A BCAN_RCVDATA

BCAN_RCVYB: MOV BCAN_RCVDATA: MOVX MOV INC INC DJNZ BCAN_DR_QUIT: RET

R6,

#02

;远程帧 ;开始读取数据

A, @R0, DPTR R0 R6,

@DPTR A

BCAN_RCVDATA

BCAN_SET_BANDRATE: MOV A, R7 ;判断波特率的值是否存在 CLR CY SUBB A, #13 ; SETB F0 JNC BCAN_SETBR_QUIT ;输入的值大于 12 则不正确 CLR F0 MOV A, R7 RL A MOV DPTR, #BCAN_SETBR ;查表找出相应的预设第一个值 MOVC A, @A+DPTR

59

MOV MOV RL INC MOVC MOV MOV

R5, A, A A A, R6, DPTR,

A R7

;将数据保存 ;找出第二个值

@A+DPTR A #REG_BTR0

;保存值 ;装入波特率预设值,同步跳转宽度 ;位宽度

MOV A, R5 MOVX @DPTR, A SETB F0 MOVX A, @DPTR XRL A, R5 JNZ BCAN_SETBR_QUIT CLR F0 INC DPTR MOV A, R6 MOVX @DPTR, A SETB F0 MOVX A, @DPTR XRL A, R6 JNZ BCAN_SETBR_QUIT CLR F0 BCAN_SETBR_QUIT: RET

;判断写入是否正确 ;不正确

;判断写入是否正确

BCAN_SETBR: DB 053H, DB 087H, DB 047H, DB 083H, DB 043H, DB 03H, DB 081H, DB 01H, DB 080H, DB 00H, DB 080H, DB 00H, DB 00H,

02FH 0FFH 02FH 0FFH 02fH 01cH 0faH 01cH 0faH 01cH 0b6H 016H 014H

;20KBPS 的预设值 ;40KBPS 的预设值 ;50KBPS 的预设值 ;80KBPS 的预设值 ;100KBPS 的预设值 ;125KBPS 的预设值 ;200KBPS 的预设值 ;250KBPS 的预设值 ;400KBPS 的预设值 ;500KBPS 的预设值 ;666KBPS 的预设值 ;800KBPS 的预设值 ;1000KBPS 的预设值

60

BCAN_SET_OBJECT: MOV DPTR, #REG_ACR MOV A, R7 MOVX @DPTR, A MOVX A, @DPTR SETB F0 XRL A, R7 JNZ BCAN_SETO_QUIT CLR F0 INC DPTR MOV A, R6 MOVX @DPTR, A MOVX A, @DPTR SETB F0 XRL A, R6 JNZ BCAN_SETO_QUIT CLR F0 BCAN_SETO_QUIT: RET

;写 ACR 寄存器

;检验写入是否正确

;写 AMR 寄存器

;检验写入是否正确

BCAN_SET_OUTCLK: MOV DPTR, MOV A, MOVX @DPTR, MOV B, MOVX A, SETB F0 CJNE A, CLR F0 MOV DPTR, MOV A, MOVX @DPTR, MOV B, MOVX A, SETB F0 CJNE A, CLR F0 BCAN_SETOC_QUIT : RET

#REG_OCR R7 A A @DPTR B,

;写 OCR 寄存器

BCAN_SETOC_QUIT ;检验写入是否正确 ;写 CDR 寄存器

#REG_CDR R6 A A @DPTR B,

BCAN_SETOC_QUIT ;检验写入是否正确

BCAN_CMD_PRG:

61

MOV CJNE ;发送请求命令 MOV MOVX CLR RET

A, A, DPTR, @DPTR, F0

R7 #01,

BCAN_CMD1

#REG_COMMAND; 地址指向命令寄存器 A ;写入命令字

BCAN_CMD1: CJNE A, ;;//夭折发送命令 MOV DPTR, MOVX A, SETB F0 JB ACC.5, CLR F0 BCAN_CMD_QUIT: RET BCAN_CMD2: CJNE A, ;释放接收缓冲区 MOV DPTR, MOVX @DPTR, NOP NOP MOV DPTR, MOVX A, SETB F0 JB ACC.0, CLR F0 BCAN_DB_QUIT: RET BCAN_CMD3: CJNE ;清除超载状态 MOV MOVX NOP NOP MOV MOVX SETB

#02,

BCAN_CMD2

#REG_STATUS ;地址指向状态寄存器 @DPTR ;判断是否有正在发送的状态 BCAN_CMD_QUIT

#04,

BCAN_CMD3

#REG_COMMAND; 地址指向命令寄存器 A ;写入命令字

#REG_STATUS ;判断是否释放成功 @DPTR BCAN_DB_QUIT ;不成功跳转

A, DPTR, @DPTR,

#08,

BCAN_CMD4

#REG_COMMAND; 地址指向命令寄存器 A ;写入命令字

DPTR, A, F0

#REG_STATUS ;判断清除超载是否成功 @DPTR

62

JB CLR BCAN_DOVER_QUIT: RET

ACC.1, F0

BCAN_DOVER_QUIT ;不成功跳转

BCAN_CMD4: CJNE A, ;进入睡眠状态命令 MOV DPTR, MOVX @DPTR, CLR F0 BCAN_CMD5: RET WENDUCELIANG: LCALL RESET MOV A,#0CCH LCALL WRITE MOV A,#44H LCALL WRITE LCALL DELAY1000 LCALL RESET MOV A,#0CCH LCALL WRITE MOV A,#0BEH LCALL WRITE LCALL READ MOV TEMP1,TEMP LCALL READ MOV TEMP2,TEMP LCALL TEMPER_COV RET RESET: NOP L0: CLR DIN MOV R2,#200 L11: NOP DJNZ R2,L11 SETB DIN MOV R2,#30 L4: DJNZ R2,L4 CLR C

#10H,

BCAN_CMD5

#REG_COMMAND; 地址指向命令寄存器 A ;写入命令字

63

ORL C,DIN JC L3 MOV R6,#80 L5: ORL C,DIN JC L3 DJNZ R6,L5 SJMP L0 L3: MOV R2,#250 L22:DJNZ R2,L22 RET WRITE: MOV R3,#8 WR1: SETB DIN MOV R4,#8 RRC A CLR DIN WR2: DJNZ R4,WR2 MOV DIN,C MOV R4,#20 WR3: DJNZ R4,WR3 DJNZ R3,WR1 SETB DIN RET READ: MOV R6,#8 RD1: CLR DIN MOV R4,#6 NOP SETB DIN RD2: DJNZ R4,RD2 MOV C,DIN RRC A MOV R5,#30 RD3: DJNZ R5,RD3 DJNZ R6,RD1

64

MOV TEMP,A SETB DIN RET DELAY1000: MOV 60H,#18 DELAY100: MOV 61H,#0FFH DELAY10: MOV 62H,#0FFH DEL1: DJNZ 62H,DEL1 DJNZ 61H,DELAY10 DJNZ 60H,DELAY100 RET TEMPER_COV: MOV A,#0F0H ANL A,TEMP1 ; 舍去温度低位中小数点后的四位温度数值 SWAP A MOV TEMPER_NUM,A MOV A,TEMP1 JNB ACC.3, TEMPER_COV1; 四舍五入去温度值 INC TEMPER_NUM TEMPER_COV1: MOV A,TEMP2 ANL A,#07H SWAP A ORL A,TEMPER_NUM MOV TEMPER_NUM,A; 保存变换后的温度数据 LCALL BIN_BCD RET ;//*****************************************// ; 将 16 进制的温度数据转换成压缩 BCD 码 ;//*****************************************// BIN_BCD: MOV DPTR,#TEMP_TAB MOV A,TEMPER_NUM MOVC A,@A+DPTR MOV TEMPER_NUM,A RET TEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15H

65

DB DB DB DB DB DB DB DB DB

16H,17H,18H,19H,20H,21H,22H,23H 24H,25H,26H,27H,28H,29H,30H,31H 32H,33H,34H,35H,36H,37H,38H,39H 40H,41H,42H,43H,44H,45H,46H,47H 48H,49H,50H,51H,52H,53H,54H,55H 56H,57H,58H,59H,60H,61H,62H,63H 64H,65H,66H,67H,68H,69H,70H,71H 72H 73H 74H 75H 76H 77H 78H 79H 80H 81H 82H 83H 84H 85H 85H 86H

END

附录 C
C1 湿度的计算
If shidu <= 7351 And shidu > 7224 Then shidu = 7351 - shidu shidu = shidu \ 12.7 shidu2.Text = shidu ElseIf shidu <= 7224 And shidu > 7100 Then shidu = 7224 - shidu shidu = shidu \ 12.4 + 10 shidu2.Text = shidu ElseIf shidu <= 7100 And shidu > 6976 Then shidu = 7100 - shidu shidu = shidu \ 12.4 + 20 shidu2.Text = shidu ElseIf shidu <= 6976 And shidu > 6853 Then shidu = 6976 - shidu shidu = shidu \ 12.3 + 30 shidu2.Text = shidu ElseIf shidu <= 6853 And shidu > 6728 Then shidu = 6853 - shidu shidu = shidu \ 12.5 + 40 shidu2.Text = shidu ElseIf shidu <= 6728 And shidu > 6600 Then shidu = 6728 - shidu shidu = shidu \ 12.8 + 50 shidu2.Text = shidu

66

ElseIf shidu <= 6600 And shidu > 6468 Then shidu = 6600 - shidu shidu = shidu \ 13.2 + 60 shidu2.Text = shidu ElseIf shidu <= 6468 And shidu > 6330 Then shidu = 6466 - shidu shidu = shidu \ 13.8 + 70 shidu2.Text = shidu ElseIf shidu <= 6330 And shidu > 6186 Then shidu = 6330 - shidu shidu = shidu \ 14.4 + 80 shidu2.Text = shidu ElseIf shidu <= 6186 And shidu > 6033 Then shidu = 6186 - shidu shidu = shidu \ 15.2 + 90 shidu2.Text = shidu

C2 除湿控制
Private Sub chushi1_Change() Dim y As Integer Result = SetPortVal(&H37B, &H2, 1) Result = GetPortVal(&H37C, PortVal, 1) y = Hex$(PortVal And &HFF) y = y And Hex(4) If y = "4" Then Result = SetPortVal(&H37B, &HA, 1) Result = SetPortVal(&H37C, 9, 1) Result = SetPortVal(&H37B, &HB, 1) Result = SetPortVal(&H37C, fenji.Text + 19, 1) Result = SetPortVal(&H37B, &HC, 1) Result = SetPortVal(&H37C, tongfeng1.Text, 1) Result = SetPortVal(&H37B, &HD, 1) Result = SetPortVal(&H37C, chushi1.Text, 1) Result = SetPortVal(&H37B, &HE, 1) Result = SetPortVal(&H37C, xunzheng1.Text, 1)

67

Result = SetPortVal(&H37B, &H1, 1) Result = SetPortVal(&H37C, 1, 1) End If End Sub

C3 熏蒸控制
Private Sub xunzheng1_Change() Dim x As Integer Result = SetPortVal(&H37B, &H2, 1) Result = GetPortVal(&H37C, PortVal, 1) x = Hex$(PortVal And &HFF) x = x And Hex(4) If x = "4" Then Result = SetPortVal(&H37B, &HA, 1) Result = SetPortVal(&H37C, 9, 1) Result = SetPortVal(&H37B, &HB, 1) Result = SetPortVal(&H37C, fenji.Text + 19, 1) Result = SetPortVal(&H37B, &HC, 1) Result = SetPortVal(&H37C, tongfeng1.Text, 1) Result = SetPortVal(&H37B, &HD, 1) Result = SetPortVal(&H37C, chushi1.Text, 1) Result = SetPortVal(&H37B, &HE, 1) Result = SetPortVal(&H37C, xunzheng1.Text, 1) Result = SetPortVal(&H37B, &H1, 1) Result = SetPortVal(&H37C, 1, 1) End If End Sub

附录 D
D1 WINIO 模块申明
Option Explicit Declare Function MapPhysToLin Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysSize As Long, ByRef PhysMemHandle) As Long Declare Function UnmapPhysicalMemory Lib "WinIo.dll" (ByVal PhysMemHandle, ByVal

68

LinAddr) As Boolean Declare Function GetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByRef PhysVal As Long) As Boolean Declare Function SetPhysLong Lib "WinIo.dll" (ByVal PhysAddr As Long, ByVal PhysVal As Long) As Boolean Declare Function GetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByRef PortVal As Long, ByVal bSize As Byte) As Boolean Declare Function SetPortVal Lib "WinIo.dll" (ByVal PortAddr As Integer, ByVal PortVal As Long, ByVal bSize As Byte) As Boolean Declare Function InitializeWinIo Lib "WinIo.dll" () As Boolean Declare Function ShutdownWinIo Lib "WinIo.dll" () As Boolean Declare Function InstallWinIoDriver Lib "WinIo.dll" (ByVal DriverPath As String, ByVal Mode As Integer) As Boolean Declare Function RemoveWinIoDriver Lib "WinIo.dll" () As Boolean

D2 CAN 适配器实物图

69


相关文档

陈海--基于CAN总线和组态王的粮库监控系统的研究
基于CAN总线和组态王的监控系统软件设计
基于CAN总线监控系统的研究和开发
can总线和组态王监控系统软件设计
基于CAN总线的粮库温度和湿度监控系统
基于现场总线CAN的实时监控系统研究与设计
CAN总线在粮库温湿度监控系统中的应用
基于CAN总线的远程监控系统分层设计研究
电脑版