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

来源:互联网 发布:标准篮球场数据 编辑:程序博客网 时间:2024/06/05 22:36

引言:

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

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

 

 

 

 

六、数据监控

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

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

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

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

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

MW120表示此读数据操作成功。

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

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

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

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

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

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

SD4 = 0XDCDA = 目标地址,SA = 源地址

2FDL状态请求电文。

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

SD1 = 0X10FC = 功能码 (Function CodeFCS =  帧检查顺序 (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 = 开始分界符Start Delimiter 2[0X68]
SD4 = 
开始分界符Start Delimiter 4[0XDC]
SSAP = 
源服务存取点 (Source Service Access Point

  我们继续了解DP从站的状态机制。一个DP的从站有四种状态:No PowerWAIT_PRMWAIT_CFGDATA_EXCH

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

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

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

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

 

 

 

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

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

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

580X3AGlobal_Control

600X3CSlave_Diag

610X3DSet_Prm

620X3EChk_Cfg

DefaultData_Exchange

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

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

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

Chk_CfgCongfiure报文,里面包含了从站所要进行的IO数据交换的信息,如PKWPZD的长度。

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

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

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

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

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

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

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

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

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

[20]主站继续发送Configure报文DSAP = 0X3EChk_Cfg),此例中IO配置数据为0XF30XF1表示PKWInput/Output都为4wordsPZDInput/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]PLCKEY在切换的时候,就会发送全局控制报文DSAP = 0X3AGlobal_Control),[09]不属于DP协议范围。

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

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

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

从这些数据,我们不难看出,我们预想的PKWPZD的操作一工正常,在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总线的现场设备,将使产品本身的集成能力更加强大,市场效用也明显提升。  

~~全文完~~      

0 0
原创粉丝点击