简单Profibus/DP实验系统的组建


Writed by 远方 DND-DeviceNet

引言:

为了让更多刚接触到Profibus系统的朋友能对Profibus的网络架构及系统运行机制有一个整体的认识,笔者根据自身的运用经历编写这篇文章,以期望能带领各位读者快速进入到Profibus的世界。

本文所采用的系统是Siemens S7 300的CPU,加上ET200M并带AI和DI模块,另加一Siemens MMX420变频器带Profibus接口板组成。系统的目的是实现远程控制变频器启动,停止,及频率给定的操作,并实现变频器参数的访问。

 

 

 

 

六、数据监控

上面的几章,已经完成了整个Profibus/DP系统的实现,为进一步的了解DP的工作机制,此章的重点将是数据的监控与分析,通过PLC的一些监视功能及加入我们自己的一些辅助手段,可以很清楚的观测到整个DP总线运行的过程。此章是理解DP运行机制及进行DP从站开发的重点。

当确定梯形图程序已经正确在PLC中运行,将PLC的KEY拨到RUN。在梯形图编辑窗口,选择菜单PLC -> Monitor/Modify Variables,可以启动变量监视窗口。如图,在窗口的Address栏位输入需要监视的变量的地址。我们输入MW40到MW46,此4 Words为我们试先写入准备用来访问变频器的数据。最后再输入MW10,此地址存放的是我们写数据到变频器的操作的返回值,如果操作正确此值为0。

点击菜单Variable -> Monitor或按Ctrl+F7或点击眼镜图标,开始监视所输入的地址的变量值。

从监视的结果中,我们看到MW40的值为12BCHEX,接下去的3 words的值都为0,这与我们试先写入的值相符,另外,MW10的返回值为0,则表示送数据到变频器的操作成功。
接着,我们输入MW30到MW36的位址,此位址存放从变频器读回来的数据。后面接着再输入MW12,这个位址存放从变频器读数据回来的操作是否成功,为0则表示成功。

从数据中,我们可以看到,MW30为12BCHEX,与发送的相同,MW32,MW34为0,MW36值为0006HEX,这个位址表示从变频器读回来的参数值,即我们需要读取的参数量0700的值为6。

MW12为0表示此读数据操作成功。

同理,可以使用此方法去监视不同的其它变量。

   
也许我们更关心DP总线上面的数据,上面看到的数据都是由PLC内存区里面提取的,那么,作为DP从站,PLC是如何把数据送达到变频器,而变频器又是如何将数据送回给PLC的呢?

这些部分都是由Profibus/DP总线的协议来完成的。

Profibus/DP协议是一个复杂的通讯协议,在此我们只作简单的概述,以方便描述其数据通讯的过程。

首先我们来看看Profibus的重要电文结构  
(1)令牌信息。

Profibus支持多主站系统,每个主站按时间分配其总线控制权,使用令牌在主站之间传递信息,如果主站获得上一个主站传递来的令牌,则立即有对总线的控制权,当其令牌时间到达,则使用此电文将令牌传递给下一个主站。

SD4 = 0XDC,DA = 目标地址,SA = 源地址

(2)FDL状态请求电文。

在进行Cyclic 数据交换之前,主站间通讯,主站与从站间通讯都交由FDL状态请求电文来实现。

SD1 = 0X10,FC = 功能码 (Function Code)FCS =  帧检查顺序 (Frame Check Sequence)

(3)数据电文。

Profibus所有的数据交换都使用此电文来实现,包括诊断等。

DA = 目的地址 (Destination Address)
DU = 数据单元 (Data Unit)
DSAP = 目的服务存取点(Destination Service Access Point)
ED = 结束分界符 (End Delimiter)[0X16]
FC = 功能码 (Function Code)
FCS = 帧检查顺序 (Frame Check Sequence)
LE = 长度 (Length)
LEr = 重复长度 (Repeated Length)
SA = 源地址 (Source Address)
SD2 = 开始分界符2 (Start Delimiter 2)[0X68]
SD4 = 开始分界符4 (Start Delimiter 4)[0XDC]
SSAP = 源服务存取点 (Source Service Access Point)

   
我们继续了解DP从站的状态机制。一个DP的从站有四种状态:No Power、WAIT_PRM、WAIT_CFG、DATA_EXCH。

当从站Power On,如果从站支持Set_Slave_Add报文,则处理此报文,如果不支持,则跳过。此时,从站等待主站的请求诊断电文(Slave_Diag),然后把自己的状态告知主站,此时从站进入WAIT_PRM状态,主站知道从站正在等待参数化(Parameterization)报文,于是就会发出参数化报文。从站收到后取出报文中的参数对自身进行配置,并立即进入WAIT_CFG状态,主站继续送Configuration的报文到从站,Configuration报文里所带的数据主要是从站IO长度的数据,它表明从站可与主站进行的PKW和PZD的IO数据长度各是多少。从站会将此数据与自身比对,如果符合自身所支持的某一个格式,则配置通讯格式。最后主站会使用(Slave_Diag)报文来再次获取从站的状态,如果从站配置成功,则进入DATA_EXCH状态,此时主站知道从站已经在等待进行IO数据交换,立即会发送IO数据报文与从站进行数据交换。这样的数据交换被称为Cyclic数据交换,会一直持续下去。

   
接下来,我们找寻一些方法,来抓取DP总线上实际在运行的数据,分析整个数据交换的过程。

由于Profibus采用高速的RS485通讯,但支持的频率范围从9.6Kbit/s到12Mbit/s,故我们在低速(9.6Kbit/S)的情况下,可以使用PC的COM口来采集总线上面的数据。具体的实现方法很简单,我们用一个RS485到RS232的转换模块,如研华的Data Acquisition Modules ADAM-4520 RS232 to RS485 isolated converter,将PC与总线相连接,DP总线的A和B分别接到converter的输入(注意数据的方向),转换模块需要9V的DC供电。另一端与PC相连,为使用简单,我们使用CVFD软件的数据接收功能来接收总线上面的数据。

Profibus的数据为11bit,数据格式为<8,E,1>,这里我们要设定baud rate 为9.6K,因前面配置Profibus网络的时候,我们设定了速率为9.6Kbit/s,选择RTU模式。

 

 

 

点击START,开始接收数据,这时总线上面的所有数据就被采集到PC上了。为了我们可以看到一个从站连接的全过程,我们将MMX的总线接头拨下,然后再插上插头,这样我们可以看到MMX与主站进行连接的过程。当拨下插头时,主站会报错误SF和BUSF,再行插上插头的时候,BUSF消失,但SF还是亮RED,这时我们要将程序复位,将PLC的KEY拨回STOP,再拨到RUN即可消除。

   
接下来我们对所采集的数据进行整理及分析。点击介面上的Save to file按钮,将数据保存到PC硬盘上,此例中的文件可以从这里下载(data.txt 55.2KB)。
首先我们来看看Profibus数据电文的DSAP和SSAP(服务存取点)的功能分配:

SSAP为源服务存取点,都为62(0X3E)。而DSAP为目标服务存取点,不同的DSAP表示主站想要进行的不同的动作。我们常用的DSAP为如下几种:

58(0X3A)Global_Control

60(0X3C)Slave_Diag

61(0X3D)Set_Prm

62(0X3E)Chk_Cfg

Default:Data_Exchange

Global_Control用于广播信息及全局控制,一般发送的目标地址(DA)为0XFF。

Slave_Diag用于请求从站的诊断信息,以获取从站目前的状态。

Set_Prm传送必要的参数及用户自定义扩展参数给从站,用户自定义扩展参数可以在GSD文件中试先写好,主站会将这些参数送给从站,从站接收后自行进行处理及相应的配置。

Chk_Cfg是Congfiure报文,里面包含了从站所要进行的IO数据交换的信息,如PKW及PZD的长度。

Data_Exchange用于Cyclic IO数据交换,此为默认的SAP,故在Cyclic 数据报文中,无DSAP 也无SSAP。

有关各种报文的数据所表达的详细意义,请查阅文件(ProfibusDP.pdf 1.45M)。

   
接下来我们对所采集的数据进行分析整理,然后抓取出对我们有用的数据进行分析。

首先我们按照上述的数据报文结构对数据进行换行处理,存在四种报文:令牌(0XDC开头),FDL状态请求(0X10开头),数据交换(0X68开头),短应答(0XE5),FDL与数据报文都以ED[0X16]结尾。然后根据电文中DA及SA的信息,我们去除节点3(ET200M)与主站之间产生的报文,只保留节点0X10(MMX)与主站之间产生的报文。

[01]主站扫描其它是否有新的节点加入。主站从站地址1开始往上扫描,到126止,当前扫描地址0X6A(106)。

[02]令牌传送报文。主站之间传递令牌信息,如果总线上面只有一个主站,也会进行令牌传送,只不过从自己传到自己。

[03]主站请求诊断信息报文,主站要获取从站16(MMX)的信息,DSAP = 0X3C(Slave_Diag),但此时从站未接上,故无应答。主站会一直发送此信息,直到从站有应答。

[08][09]从站16接上总线,进行应答。请参阅上面的附件对报文的数据进行解读。

[14][15]主站发送参数化报文DSAP = 0X3D(Set_Prm),从站接收参数化数据并立即回应短应答信息(只有一个0XE5),告知数据已经正确接收到,但数据是否有效还不知道。

[20]主站继续发送Configure报文DSAP = 0X3E(Chk_Cfg),此例中IO配置数据为0XF3,0XF1表示PKW的Input/Output都为4words,PZD的Input/Output都为2words。从站收到此报文后立即发送0XE5短应答报文告知主站已经收到报文,但会继续与自身所设定的值进行比较,如果有相符的设定,则进入Data_Exchange状态。

[26][27]主站再次获取从站16的诊断信息,这时,主站知道从站正在等待进行IO数据交换。

[32][33]此为状态请求报文,目前从站本应该进行IO数据交换,但主站由于其错误状态还没有被清除,故不能正确送数据到总线,便利用状态请求报文与从站进行交换。这时我们需要清除PLC程序执行的错误,将KEY拨回到STOP,然后再拨回RUN状态即可以消除由于从站16掉线时发生的程序执行错误。

[01]\x10\x6A\x02\x49\xB5\x16
[02]\xDC\x02\x02
[03]\x68\x05\x05\x68\x90\x82\x6D\x3C\x3E\xF9\x16
[04]\x10\x03\x02\x7D\x82\x16
[05]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[06]\x10\x6B\x02\x49\xB6\x16
[07]\xDC\x02\x02
[08]\x68\x05\x05\x68\x90\x82\x6D\x3C\x3E\xF9\x16
[09]\x68\x0B\x0B\x68\x82\x90\x08\x3E\x3C\x02\x05\x00\xFF\x80\xB5\xCF\x16
[10]\x10\x03\x02\x5D\x62\x16
[11]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[12]\x10\x6C\x02\x49\xB7\x16
[13]\xDC\x02\x02
[14]\x68\x0C\x0C\x68\x90\x82\x5D\x3D\x3E\xB8\x15\x17\x0B\x80\xB5\x00\x0E\x16
[15]\xE5
[16]\x10\x03\x02\x7D\x82\x16
[17]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[18]\x10\x6D\x02\x49\xB8\x16
[19]\xDC\x02\x02
[20]\x68\x07\x07\x68\x90\x82\x7D\x3E\x3E\xF3\xF1\xEF\x16
[21]\xE5
[22]\x10\x03\x02\x5D\x62\x16
[23]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[24]\x10\x6E\x02\x49\xB9\x16
[25]\xDC\x02\x02
[26]\x68\x05\x05\x68\x90\x82\x5D\x3C\x3E\xE9\x16
[27]\x68\x0B\x0B\x68\x82\x90\x08\x3E\x3C\x00\x0C\x00\x02\x80\xB5\xD7\x16
[28]\x10\x03\x02\x7D\x82\x16
[29]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[30]\x10\x6F\x02\x49\xBA\x16
[31]\xDC\x02\x02
[32]\x10\x10\x02\x7D\x8F\x16
[33]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16
[34]\x10\x03\x02\x5D\x62\x16
[35]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[36]\x10\x70\x02\x49\xBB\x16
[37]\xDC\x02\x02
[38]\x10\x10\x02\x5D\x6F\x16
[39]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16
[40]\x10\x03\x02\x7D\x82\x16
   
当我们清除掉PLC程序执行的错误后,数据交换回复到正常状态。

[02][03]仍然处于状态请求。

[04][09]当PLC的KEY在切换的时候,就会发送全局控制报文DSAP = 0X3A(Global_Control),[09]不属于DP协议范围。

[10][11]现在主站已经正确的将数据送到从站16了,从站也正确的将自己的数据送回到主站。

[16][17]PKW操作已经开始,但变频器还没有回送参数值。

[22][23]PKW操作中,变频器已经开始回送数据,其要读取的参数值为0X06。

从这些数据,我们不难看出,我们预想的PKW及PZD的操作一工正常,在PZD区域,主站送数据00 00 02 F0到变频器,前一个字表示Control Word,都为0则无操作动作,后一个字表示Refer Frequency,值为0X02F0,而从变频器返回的值中,我们接收到数据FB B4 00 00,前一个字表示Status Word,是变频器的状态值,后一字表示Out Freq,输出频率,目前输出频率为0,表示处于STOP状态。

[01]\xDC\x02\x02
[02]\x10\x10\x02\x7D\x8F\x16
[03]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16
[04]\x68\x07\x07\x68\xFF\x82\x46\x3A\x3E\x00\x00\x3F\x16
[05]\x10\x03\x02\x5D\x62\x16
[06]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[07]\x10\x4D\x02\x49\x98\x16
[08]\xDC\x02\x02
[09]\x68\x09\x09\x68\xFF\x82\x44\x34\x36\x5D\x00\x68\x00\xF4\x16

[10]\x68\x0F\x0F\x68\x10\x02\x5D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6F\x16
[11]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16
[12]\x10\x03\x02\x7D\x82\x16
[13]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[14]\x10\x4E\x02\x49\x99\x16
[15]\xDC\x02\x02
[16]\x68\x0F\x0F\x68\x10\x02\x7D\x12\xBC\x00\x00\x00\x00\x00\x00\x00\x00\x02\xF0\x4F\x16
[17]\x68\x0F\x0F\x68\x02\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\xFB\xB4\x00\x00\xC9\x16
[18]\x10\x03\x02\x5D\x62\x16
[19]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[20]\x10\x4F\x02\x49\x9A\x16
[21]\xDC\x02\x02
[22]\x68\x0F\x0F\x68\x10\x02\x5D\x12\xBC\x00\x00\x00\x00\x00\x00\x00\x00\x02\xF0\x2F\x16
[23]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16
[24]\x10\x03\x02\x7D\x82\x16
[25]\x68\x09\x09\x68\x02\x03\x08\x01\x00\x00\x08\x02\xF0\x08\x16
[26]\x10\x50\x02\x49\x9B\x16
[27]\xDC\x02\x02
[28]\x68\x0F\x0F\x68\x10\x02\x7D\x12\xBC\x00\x00\x00\x00\x00\x00\x00\x00\x02\xF0\x4F\x16
[29]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\xB4\x00\x00\x9D\x16

   
至此,关于如何组建简单Profibus/DP实验网络及一些简单的数据分析方法就基本介绍完毕。Profibus是一种在实际项目中用得很多,市场占有率极大的现场级工业控制网络,其最高通讯速度可以达到12M,在业界也算是高居第一。开发能接入Prifibus总线的现场设备,将使产品本身的集成能力更加强大,市场效用也明显提升。
   

~~全文完~~

 

简单Profibus/DP实验系统的组建相关推荐

  1. HART/PROFIBUS DP网关

    型号:HPM-610 基本说明:实现HART设备与PROFIBUS DP总线系统的互联. 1.支持1个HART通道,HART通道支持连接的HART从站设备多达15个: 2.HART侧可配置为第一主站或 ...

  2. 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc

    VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. 熟悉 VGA 接口协议规范. 4.通 ...

  3. 简单的eda实验vga在linux系统中,《EDA实验报告VGA彩条显示.doc

    <EDA实验报告VGA彩条显示 VGA彩条信号显示控制 一.实验目的: 1. 熟练掌握 Verilog HDL语言和QuartusII 软件的使用: 2. 理解状态机的工作原理和设计方法: 3. ...

  4. 柔性生产制造实验系统

    ZN-RX3FMS柔性生产制造实验系统 一.产品概述 ZN-RX3FMS柔性生产系统是使用柔性制造技术中具代表性的制造自动化系统,可实现多品种.中小批量的加工管理.柔性制造技术是在自动化技术.信息技术 ...

  5. PROFIBUS DP 网络部署的四大要点

    PROFIBUS 线缆 PROFIBUS-DP 物理层支持屏蔽双绞线和光纤两种介质,其中 RS485 传输方式应用最为广泛. PROFIBUS-DP 规定的电缆有 A 型和 B 型两种.技术参数如表中 ...

  6. linux内核实验平台搭建,搭建自己的Linux实验系统(一)

    当你对操作系统已经有了基本的把握:而且对Linux也有了初步的了解,可是,如果你是一个程序员,你肯定还是会觉得惴惴不安:Linux到底是怎么回事? 求知和求实是程序员的天性,我们当然有义务满足自己的天 ...

  7. css 模拟器方向_GDS变方向动态循环单剪实验系统VDDCSS

    原标题:GDS变方向动态循环单剪实验系统VDDCSS 变方向循环简单剪切(VDDCSS)允许在两个方向进行简单剪切,而不是标准单向.这通过具有作用于其上的次级剪切作动器来实现,此剪切作动器与主剪切作动 ...

  8. 于掌控板实现简单的抢答器系统

    基于掌控板实现简单的抢答器系统/手动判断正误,随机发送题目 一.实验目的及要求 实现掌控板抢答器功能. 二.实验原理与内容 基于TinywebDB实现云数据库出题 基于掌控板实现按键抢答和判题 基于M ...

  9. el-jy-ii计算机组成原理实验报告,EL-JY-II型计算机组成原理实验系统

    一.适用范围: EL-JY-II型计算机组成原理实验系统是为<计算机组成原理>课程的教学实验而研制的,涵盖了目前流行教材的主要内容,能完成主要的基本部件实验和整机模拟实验,同时也可供计算机 ...

最新文章

  1. matlab 坐标修改gca及Matlab中输入上标、下标、希腊字母,特殊符号或字体
  2. 【译】Economics of Fees and Gas
  3. tcp协议接收方对out of order的分段是如何处理的?_TCP协议与流通信
  4. tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解
  5. Centos7忘记密码——转
  6. 【Codeforces - 1000C】Covered Points Count(思维,离散化,差分)
  7. dotty编译器语法特性之一交叉类型,联合类型和文本单例类型
  8. DecimalFormat 用法
  9. es6语法在ios低版本的支持性
  10. 基于机器视觉的马达孔直径中心距、齿数线序测量
  11. HDU-2050-折线分割平面
  12. POJ 1066 Treasure Hunt(计算几何)
  13. 常用的python模块及安装方法
  14. Atitit 信息检索 v3 t55.docx Atitit 现代信息检索 目录 1.1. 信息检索(索引 索引 结构化文本 1 1.2. Atitit 重要章节 1 1.3. 息检索建模 1 1.
  15. vue导出自定义的excel表格
  16. 综合项目之闪讯破解(一)之 闪讯拨号用户名核心算法
  17. WhatsApp群发系统-SendWS拓客系统功能后台介绍(五):WhatsApp筛号群发,群发超链
  18. Php扫码签到功能怎么实现,扫码签到常用方法_云分组小程序
  19. 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
  20. 游戏手柄按键遥杆值检测

热门文章

  1. Flash 望庐山瀑布特效
  2. 【RDMA】IRN|Revisiting Network Support for RDMA-(重新审视RDMA的网络支持)
  3. 每日简报 4月6日简报新鲜事 在这里,60秒读懂世界
  4. 《对话》:求解“精英思想”与“企业实践”的统一
  5. Nature | 细菌分子靶向病毒DNA
  6. Decode 函数的用法
  7. TopStatck 物联网云组态平台
  8. Linux测试远程端口是否开放
  9. 第七章:小朱笔记hadoop之源码分析-hdfs分析 Datanode 心跳分析
  10. “被玩坏了”的Dropout