为了让刚刚从事DeviceNet开发的朋友能够对DeviceNet网络的总体架构及工作方式有一个大致的了解,并同时提供给从事工程项目的朋友作为项目规划中的参考,DND推出此文章以期为各位DeviceNet开发及应用的朋友带来方便,本文分为如下几个部分:
一 软件需求环境;
二 网络组成;
三 连接工具RsLinx;
四 DeviceNet组态;
五 简单的SLC梯形图程序以实现简单任务;
六 实验网络架构的总结;
本文的写作是基于Rockwell Automation Allen-Bradley的SLC500 PLC系统,组建一个简单的电机驱动器控制系统,通过IO节点可以给变频器发送启动,停止等控制命令,使用模拟量模块作为变频器的频率给定,同时IO模块也有数字输出的部分,可以显示变频器的运行与停止状态。也有很多DeviceNet的系统是基于OMRON的DeviceNet系统,但原理大同小异。
一 软件需求环境
使用AB的SLC 500 PLC作为主站,必须要安装几个配套软件,如果你是通过正常渠道购买的产品,则会附带安装光盘,在我们的实验系统中,需要如下的软件支持(相关的硬件配置请参阅本文第二部分):
1)RSlinx——用于建立PC与SLC之间的串行连接和PC与1770-KFD模块之间的连接;
2)RSNetWorx——用于DeviceNet组态的软件工具,与1770-KFD配套使用对整个网络进行配置;
3)RSLogix 500——用于SLC 500 PLC应用编程的工具,一般的梯形图程序及指令等程序都可以使用;
各软件的安装请参照附加的帮助文档,或在论坛中提出,以获取最快的帮助。
二 网络组成
本文所使用的几个节点配置如下。
PLC配置:
1) AB SLC500 4-SLOT RACK(1746-A4)
2) AB SLC500 Power Supply (1746-P1)
3) AB SLC 5/03 CPU (1747-L531)
4) AB SLC500 Analog Input Module (1747-N14)
5) AB SLC500 DeviceNet Scanner Module (1747-SDN/B)
Slave配置:
1) AB RediSTATION IO Module (2705T)
2) AB Enhanced DeviceNet Communications Module (1203-GU6)
+ AB 1305 Adjustable Freqency AC Drive
组态模块:
1) AB 1770-KFD Moudle
网络电源模块:
1) AB PowerTap (1485T-P2T5-T5/B) DeviceNet compatible
网络接线:
主干线与支线都使用协议规定的标准线,主线与支线连接使用T型分接头,支线头上用迷你型连接器。支线与节点之间全部用开放型连接器。
在PLC的配置中,第1项为PLC的机架,使用4插槽的PLC机架;第2项为PLC的电源供给模块,一般与机架构成PLC的基本单元;第三项为PLC的核心运算单元CPU,一般将CPU插在第一个插槽内;第四项为AB提供的SLC 500 CPU用的模拟量输入模块,在此用于变频器的频率给定;而最后一项则为DeviceNet网络的驱动者——Master。
相关的产品的详细信息请查阅Rockwell Automation Allen-Bradley
使用上述网络构件后,可以组成一个简单的DeviceNet实验网络,其示意图如下:
在上图中,PC通过1770-KFD节点对网络进行配置,配置信息也通过此节点从DeviceNet网络上送到扫描模块,而SLC中的PLC编程部分则通过SLC本身带的RS232通讯端口进行编程下载。
三 连接工具RSLinx
这个部分我们会介绍如何配置RSLinx以实现与1770-KFD的连接,和实现与PLC的连接,在此我们假设你已经完全按要求搭建好网络,所有的连线都已经连好,所有的节点都可以正常加电且工作正常,如果你在各个产品的电源供给或是加电等方面遇到了麻烦,请参阅各产品的使用手册,建议你在加电之前最好详细阅读产品的使用说明书,以免因输入电源不当造产品的损坏。
1、PC与1770-KFD的连接
如果你已经安装好了所需的软件,并且使用附带的串行通讯线将PC的COM1口与1770-KFD的RS232接口相连,则可以按如下步骤进行操作:
1)点击“开始”—“程序”—“Rockwell Software”—“RSLinx”—"RSLinx",启动RSLinx;
2)点击“Communications”—"Configure Drivers...",则会出现"Configure Drivers"的对话框。在上方的下拉列表里选择“DeviceNet Drivers (1784 PCD/PCIDS,1770-KFD....)”此项,点击“Add New...”按钮以添加此驱动,接着会出现驱动选择的对话框,在此我们选择“Allen-Bradley 1770-KFD”并点“Select”按钮以确认选择。
3)接着会出现1770-KFD的配置对话框,在此可以对通讯的一些参数进行设置,如串行口,串行通讯波特率,还可以设定1770-KFD作为一个DeviceNet节点的一些参数,如节点地址(MAC ID)及波特率。设置好了以后点OK进行测试。
4)如果RSLinx有测试到通讯正常,则会出现如下对话框,告知你要为连接取一个名字,你可以默认也可以自己输入新的名称。最后点OK确认。
5)此时可以在驱动列表里看到已经加入了一项驱动,且状态处于Running。关闭此对话框返回到RSLinx的主界面,可以看到左边的列表里多了一项连接:1770-KFD-1, DeviceNet(取决于你所起的名称)。选中此列表或点击旁边的“+”号,RSLinx则会搜索网络上的存在的节点,在右边的窗口中你可以看到网络上存在的节点的图标及MAC ID 还有名称。如果你看不到节点,则可能你的节点与网络的连接有问题,如果你所有的节点都看不到,则可能你的网络波特率不统一。
2、PC与PLC的连接
确定你已经将专门用于PC与PLC连接的串行线将PC和PLC连接起来,则可以如下操作:
1)与连接1770-KFD相同的操作;
2)在选择驱动类型的时候请选择“RS-232 DF1 devices”,然后“Add new...”,则会出现如下配置对话框。设定好COM端口,选择设备类型为:SLC-CH0/Micro/PanelView...,然后点下边的“Auto-Configure”,如果配置无误,则在右边的只读框中会出现“自动配置成功”。
3)同样在驱动列表中你会看到刚刚配置好的类似“AB_DF1...”的驱动。
四 DeviceNet组态
这部分主要实现简单的DeviceNet网络的配置组态,使用的工具是Rockwell提供的软件——RSNetWorx。例子虽然简单但期望各位网友以一当十,达成更复杂的应用,此才为此文章的最终目的。
1、点击“开始”—“程序”—“Rockwell Software”—"RSNetWorx"—"RSNetWorx for DeviceNet"以正常启动RSNetWorx;也许你会遇到找不到当前字体的对话框,因操作系统的问题,你尽可以回答“是”。
2、RSNetWorx启动后,也许你可看到左边有一个硬件列表框,如果没有你可以在View菜单里找到,点击就可以显现出此列表。而主视图框中有一条网络线,这是最初的状况,因为还没有一个节点被加到当前的网络中,所以右边这条线上没有一个节点。你当然可以在左边的列表框里选择你目前已经连接好的设备并双击使其加到右边的网络线上,但我们不这样做,RSNetWorx有一个最简单的做法就是利用网络扫描功能,如下图:点击图中的Online图标或点“NetWork”—"Online"菜单,则可以启动扫描功能。
3、点击“Online”图标后会弹出一个对话框,要你选择用于连接的驱动,你应该可以看到1770-KFD的连接,如果没有,则请参阅本文的第三部分。
4、选中“1770-KFD”驱动并点击OK,或直接双击,会告诉你一个同步确认对话框,点击OK。RSNetWorx即开始Browsing Network...
5、如果此对话框的进度条一直没有动作则表示你的串行通讯连接线有问题,或是你的PC上正有其它程序使用串行口。扫描完毕后网络上能找到的所有节点都会显示出来。在此例中Master(1747-SDN/B)的地址为01,而1770-KFD节点地址为05。
6、双击其中的图标,可以查看节点的信息:General, Parameters, I/O Defaults, EDS File。其中第一项可以清楚的知道供应商,及其它一些详细信息,参数部分可以显示此节点所有本身提供可访问的参数,这些参数根据属性的不同可以读写或只读。在第一次查看参数的时候提示“upload or download”的时候最好是"upload"。
7、双击Scanner的图标,会出现其配置对话框。点击“Module”选项卡,并选择“upload”按钮,以读取当前Scanner中的配置信息。当读取完毕后,可以看到“Module”选项卡中有几个信息值:Interscan Delay和Foreground to Background Poll Ratio。前一项表示两次发送轮询IO信息的间隔时间;后一项表示发送多少次IO报文后才对特定的节点发送一次IO报文,默认值为1,则表示每次都会发送IO报文,这主要用于通讯较慢的设备与较快的设备同时在一个网络上的时候,也可以减少某些不必很快的设备的CPU资源开销。
8、选择“Scanlist”选项卡,可以看到左边的列表里有当前可以使用的设备,此例中为两个。右边有一空的扫描列表。在此我们选中节点“1305 Drive”,并注意“Automap on Add”前的框里打上勾,使其自动映射地址。然后点“>”按钮将此节点加入扫描列表。当选中一个节点后,可以点击下方的“Edit I/O Parameters...”来编辑节点的IO数据长度,其中就可以设置此节点是否使用Foreground to Background Poll Ratio功能。
9、点击“Input”, "Output"选项卡,可以看到节点的地址已经被映射到Scanner的Input和Output地址上了,此地址直接映射到PLC的CPU内存地址上,用于在SLC 500中进行编程控制。
10、同样地将另一个节点2705T(I/O Module)也加入到扫描列表中。
11、点击“确定”按钮,提示是否将此配置下载到Scanner中,将PLC的控制钥匙打到“PROG”状态,确定即可以下载此配置到Scanner了。当你把PLC上的控制钥匙打到RUN,则可以看到Scanner的“MODULE”和“NET”LED都是绿色。 到此简单的DeviceNet组态就完成了。
另外,相信大家都知道每个DeviceNet设备组态时都需要EDS文件,为什么我们一直没有使用EDS文件呢?这是因为我们使用的设备都是AB的设备,而配置工具也是AB的设备,配置工具已经预先将AB的DeviceNet的EDS文件导入了此配置工具中,所以我们不需要做这一步,如果你是自己开发的设备要使用RSNetWorx连到DeviceNet网络中,那你必须使用RSNetWorx所提供的EDS导入向导把自己编写的EDS文件导入到系统中。此功能可以通过菜单“Tools”—"EDS Wizard..."来启动,根据提示很容易就可以导入自己的EDS文件。如果你的设备还未导入EDS文件就接上了DeviceNet网络,则RSNetWorx同样会发现此节点,只是处于不能识别的状态,双击图标也可以启动EDS文件向导以导入正确的EDS文件。
五 简单的SLC梯形图程序以实现简单任务
有关SLC系列PLC的应用编程工具RSLogix 500,是一个功能强大且复杂的工具,在此我们不准备做详细的介绍,但我们会完成一个简单的例子,来达成通过DeviceNet上的I/O控制变频器的启动与停止,并且在IO模块的输出上显示变频器的运行/停止状态。
在启动RSLogix之前请认真参阅此文第三部分:RSLinx的使用。以保证已经正确的配置好了PLC与PC的连接。其结果应该是可以在驱动列表里看到AB_DF1....类似的连接处于RUNNING状态,为避免发生错误,如果你是在同一台PC上进行的,可以先删除1770-KFD的连接驱动后再增加RS232的连接驱动。
确认RSLinx的连接没有问题后,可以按如下的步骤进入RSLogix编程。
1、点击“开始”—“程序”—“Rockwell Software”—"RSLogix 500 English"—"RSLogix 500 English"以启动RSLogix 500。启动后的主界面如下面所示。首先需要新建一个文件,点击新建图标出现处理器选择对话框。在此对话框中选择你的CPU,此例中的CPU为“1747-L531 5/03”,选中此CPU,然后在对话框下方的“Communication setting”里设定通讯的驱动为“AB_DF1.....”,点OK确认。
2、新生成的项目文件有两个部分,一个是项目管理,位于左边的窗口,一个为梯形图编辑器,位于右边。在左边的列表中,可以看到有许多能使用的资源,但我们首先要对“Controller”的部分进行配置,不然项目管理程序不知道当前PLC的插槽上都插有哪些卡?也就无法正确的对各扩充卡进行寻址。双击左边项目列表里“Controller”下的“IO Configuration”,可以看到一个配置对话框。选择“Racks”为:1746-A4 4-slot rack,以选定所使用的机架。在下方的列表中,可以看到已经把CPU插入了第一个插槽中。
3、现在要将另外的扩充卡也加入到此项目中来,点击旁边的“Read IO Configuration”,出现读取确认框,这时可以看到驱动里面已经选中了AB-DF1,如果你在第一步里忘了选择,也可以在这里选择驱动。
4、点击上图中的“Read IO Configuration”,出现“Confirm Change Processor Type”对话框,点击OK。
5、这时可以很清楚的看到机架上所插入的模块,第二槽为模拟量输入模块,第四槽为DeviceNet Scanner。
7、当这此模块都配置好后,就可以进行PLC梯形图程序的编写了,这部分不准备对如何编写梯形图做介绍,详细的编程手册请到Rockwell AB的网站上找寻或参考购买产品时所附带的手册。但我们需要一个简单的例子程序来完成对变频器的操作,频率给定和状态监控。
有关各节点在master中的地址映射如下表:
1)在Scanner模块中,提供了一个指令控制字,就是可以让CPU对扫描模块进行控制,要想CPU在运行的时候使扫描模块把数据送到总线上,必须在梯形图中先对扫描模块的这个控制字进行设置,在扫描模块安装手册中有讲到此字Bit 0为1表示扫描模块为RUN MODE,否则为IDLE MODE,所以应先将此位元设为有效,否则扫描模块总会显示80代码,表示处于IDLE状态。下面是梯形图程序的一个示例:
说明:在此例中,因为扫描模块是插到第四插槽的,所以槽号为3(0~3),控制字的寻址方式为O:S.1,其中的S表示扫描模块所在的槽号。
2)变频器启动与停止的控制。
参考1305变频器的手册,设置其控制指令来源为通讯适配置器,以选择使用通讯来控制变频器。1305变频器的Control Command字的bit0 表示停止,bit1表示启动。故实际的操作中我们可以通过送控制字到1305的端口来控制变频器.下面是梯形图程序的一个示例:
启动变频器:bit1 置1
停止变频器:bit0 置1
说明:上例中,输入的信号I:3.3/1来自IO模块的bit 1,表示按下启动按钮;O:3.1/1是映射到1203-GU6模块的通讯地址上面的,GU6会将其送到变频器的控制端口,实现启动的操作;停止变频器的操作同理。
3)变频器频率给定。
此例中我们使用模拟量输入模块来获取频率给定值,模拟量输入模块外部需要接入一电位器产生可调节的电压信号送入模块中(相关的详细说明参阅手册)。在GU6模块默认的2WORDS的INPUT数据中,后一个字表示为频率给定值,故只要在梯形图中将模拟量模块的输出值送到GU6第二个字当中,GU6即会将其送到变频器。下面是梯形图的一个示例:
读取模拟量模块的值,并送到GU6的第二个字上面
为了降低模拟量变化的精度,以降低网络对变频器频率给定的频繁程度(就是去掉频率值的低位部分不关心),你可以把读取的模拟量模块的值先送到整形文件N中,然后再换成二进制B,然后与0XFF00相与,就可以去掉频率值的低八位,这样只有频率值高八位产生变化时才会引起变频器频率值的改变。这点在这里不再做详细叙述。
4)接下来我们需要在IO模块上显示变频器的运行/停止状态。
在变频器返回到DeviceNet的数据(Input Data)中,前一个字为变频器的状态值,读取Bit 1位可以获取当前变频器是否在运行。下面是梯形图的一个示例:
I:3.1/1表示变频器返回的第一个字的Bit 1位,O:3.3/0表示IO模块的输出数据的Bit 0,在节点中表示上面的一个LED灯。
由此,我们就实现了一个简单的IO控制变频器启动/停止,模拟量模块给定变频器的频率的一个SLC梯形图程序,通过此程序,在网络上的表现为:按IO上的启动按钮实现变频器启动,按IO上的停止按钮实现变频器停止,调整模拟量模块的电位器(需要外接)可以调整变频器的频率,当变频器处于RUNNING,则IO模块上的LED会亮,当变频器停止,则LED会灭。
有关RSLogix的使用请参阅使用手册。、
六 实验网络架构的总结
至此为止,我们已经搭建了一个简单但却典型的DeviceNet实验网络,利用此网络,开发者可以从多种角度去观察及了解DeviceNet的总体架构与运行的机制,以此会对DeviceNet总线有一个全面的认识。在从站开发的过程中(甚至也可以作为主站开发的一部分实验网络),开发者很有必要首先认真熟读DeviceNet协议,然后通过实验系统的帮助来认识总线上各节点间的报文交换,这样就会更加明确DeviceNet如何实现数据在各节点间的传送。
当你准备开发DeviceNet从站设备的时候,你一定要对单片机知识有所了解,我们所描述的所有文档都是针对DeviceNet技术本身来说的,而这意味着在所有动作之前有一个假设,就是你对单片机的开发很熟悉且不会遇到问题(其实如果你真有问题也很容易在网上找到帮助)。
此文的写作是基于Rockwell Automation Allen-Bradley的SLC 500系列PLC及1747-SDN扫描模块来完成,此系统其实更适合于工业现场的使用,而在实验中,或许使用PCI式的插卡会更方便,而且实验设备的成本会低很多,所以远方是建议大家会去选择基于PC的主站方式,一方面,基于PCI的主站可以很方便且灵活的来配置DeviceNet报文,很方便实现对从站设备的监控,尽管可能要你去写一些大量的PC端的应用程序,但这会为开发带来更大的便利。另一方面,使用PCI方式的接口卡还可以开发其它的一些接点,如可以使用其提供的驱动及API接口来实现一个从站,或实现一个模拟主站等。
开发从站设备的平台中还有一个非常重要的因素,就是总线分析仪。协议上很明确的规定了各种报文的格式,如果请求如何回答,其实一看多了就云里雾里,如果有一个工具可以把一个实际的节点与主站交换的报文呈现出来岂不是一切都变得如此简单?分析仪就可以做到这样,分析仪其实也就是一个节点,不同公司设计的分析仪可能有些差别,但功能都是将总线上的数据全部抓取下来,进行分析后再呈现给使用者,通过分析这些报文可以很清楚的看到节点间如何传送数据。一些公司提供的分析仪产品功能非常强大,但价格也不菲,很多使用者可能也无法支付这样高的费用,如果你对CAN的报文了解到一定的程度的时候(了解CAN控制器的工作及如何编程时),就可以自己试着实现分析仪的功能,或许你自己的分析仪功能并不强大,但能够满足你实验用就OK了。关于这部分的一些知识论坛里已经有些讨论,感兴趣的朋友也可以去看看。
断断续续写完这篇文章后,一看吓了一跳,怎么和AB的产品使用手册这么像呢?但大家相信这不是翻译自产品使用手册,里面的每一个字都是我输入,每一张图片都是我抓取的,我只是想把自己建立这个实验平台的过程原始的呈现在这里,希望对从事此项开发的朋友有用,也为刚刚从事DeviceNet工程项目的朋友提供一点信息,起到抛砖引玉的作用。
最后,感谢一些网友的鼓励和支持!希望有兴趣的网友把自己的经验及经历写下来,让大家都来分享你的宝贵的经验。下载本文