ProfibusDP数据传递通信原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单Profibus/DP实验系统的组建
引言:
为了让更多刚接触到Profibus系统的朋友能对Profibus的网络架构及系统运行机制有一个整体的认识,笔者根据自身的运用经历编写这篇文章,以期望能带领各位读者快速进入到Profibus的世界。
本文所采用的系统是Siemens S7 300的CPU,加上ET200M并带AI和DI 模块,另加一Siemens MMX420变频器带Profibus接口板组成。
系统的目的是实五、PLC编程
当网络组态工作正确完成之后,接下来继续进行PLC端梯形图的编程,S7 Manager提供了强大的PLC编程系统。
我们的任务是编写一个简单的梯形图程序,以能过ET200M上的DI和AI模块来对MMX Drives进行操作及参数访问。
DI模块用来对变频器进行启动,停止,正向,反向等控制操作,AI模块用来设定变频器的频率。
回到S7 Manager的主窗口,因为在Configure的过程中,我们已经加入了S7-300的CPU系统,故在右边的列表里已经多了一个CPU 315-2 DP。
现远程控制变频器启动,停止,及频率给定的操作,并实现变频器参数的访问。
按右图所示的路径点开列表,在最后的Blocks里面,有一个OB1,这是PLC主程序的入口模块,一般的程序都在此模块中进行设计,PLC程序也从此模块开始调用执行。
OB1模块打开,如图所示。
这时便可以在此窗口进行PLC程序的设计。
有关S7-300PLC 的指令列表请参阅详细的手册,在此不再详述。
梯形图是一种最直观的PLC程序设计语言,使用即方便也便于维护。
我们先产生一个永远为True的变量M0.0。
梯形图程序必须存在一个Input和一
个Output,故我们在很多地方会使用M0.0来作为永远为True的Input。
现在我们要实现变频器的启动操作,根据ET200M模块上挂接的DI模块,确定其输入端子上的接线方法,然后接上数字输入信号。
SM321 DI模块使用24VDC 信号输入。
确认信号输入接好后,当终端有输入信号时,相应的终端对应的LED会亮起
GREEN,这时表示信号正确,否则检查接线。
回到硬件配置窗口。
选中IM 153-1,其下方的窗口里出现所挂接的两个模块DI 和AI,选中DI 16XDC24V并点击右键,在右键菜单中选中Monitor/Modify。
在此Monitor/Modify窗口中,可以检视模块的每一个输入量的状态,选中下方的Monitor,即开始Monitor此模块的所有输入量,此例中我们使用最后一路输入作为实验,当有信号输入时,1.7的信号变为GREEN,表示有信号输入。
其它的设备与此相同。
按Alt + F9新增一个Network。
再来关注PLC如何对DI模块进行操作。
DI的地址映射为0...1两个字节,故我们可以直接对其进行寻址,使用1.6作为启动信号,使用1.7作为停止运行信号。
程序如右图所示,当I1.6为True的时候,MOVE 指令会送0x677E到地址264,这是MMX映射的Q Address(PZD)264...267。
264...265为Contol word(查阅MMX420手册)。
同理,使用1.7的输入作为停止信号,当1.7有输入信号时,MOVE指令会送0x677F到地址PQW264,同样是MMX420的Control Word,使变频器停止运行。
接着我们再来给定MMX Drives的频率。
频率的给定值来源于ET200M的AI模块,AI共有两路输入信号,使用前也需要按说明书连接其外围电路。
此例中我们使用一电位器来给出一个连续变化的模拟量信号。
同样的方法,当我们Monitor AI模块时,可以看到已经有模拟信号进入到了第二路输入信道中。
旋动外部的电位器可以看到其值在不断变化。
这时表示AI模块的输入信号已经成功接入。
AI模块映射的地址为I Address 256...259(PZD),在MMX映射的地址264 (267)
中,后一个Word用作频率给定266...267。
程序如图所示,M0.0永远为True,故频率是在时时刷新的,当电位器给定的频率发生变化时,就会立即通过总线送到MMX420。
至此,我们完成了通过ET200M挂接的DI和AI模块对变频器的控制,并实现其频率给定。
接下去的部分,我们要使用PKW数据实现对变频器参数的访
PKW采用通用串行接口协议(USS)的规范。
USS按照串行总线的主/从通讯原理来确定访问的方法。
总线上可以连接一个主站和最多31个从站,主站根据通讯报文中的地址字符来选择要传输数据的从站。
在主站没有要求它进行通讯时,从站本身不能首先发送数据,各人从站之间也不能直接进行信息的传输。
PKW区说明参数识别ID-数值接口的处理方式。
PKW接口并非物理意义上的接口,而是一种机理,这一机理确定了参数在两个通讯伙伴之间(例如控制装置与变频器)的传输方式,例如参数数值的读和写。
有关USS及PKW格式的详细信息请参阅文档(USS.pdf 312KB)此例中,我们试图去读取变频器参数0x2bc(700)的值,根据USS规范里面的描述,主站
需要发送的数据为:12bc 0000 0000 0000。
我们先将此4 Words的数据写到内存区
M40...M47,然后再利用SFC15模块将数据送到总线上。
按Alt+F9新增Network 7。
选择菜单View -> STL,将程序转为指令格式,输入如图所示的指令。
如果需要查看SFC15(DPWR_DAT)模块的参数介绍,则只须点击一下DPWR_DAT,再按下F1。
LADDR表示要访问的设备的DP起始地址,必须用十六进制表示。
在这里,MMX设备映射的Q Address(PKW)为256...263,则此值为256(0X100)RECORD表示需要传送的数据存放的位置,我们是按字节从M40位置开始存放。
RET_VAL表示此项操作的返回代码。
我们将其存放于M10里面。
如果操作成功,此值为0,否则为其操作的错误代码。
点击菜单View -> LAD,让程序返回梯形图模式。
加SFC14模块,
以读取PKW值
(从变频器返回
的值)。
同样使
用F1也可以查询
SFC14
(DPRD_DAT)的
参数信息,SFC14
用于读到DP设备
的数据。
LADDR
表示读取的DP设
备所映射的I
Address的起始
地址,必须用十六
进制表示。
此例中
为260(0X104)。
RET_VAL表示此
操作的返回值,我
们将其存放在内
存M12中。
如果
此读操作成功,则返回值为0,否则为其错误代码。
RECORD表示读回来的数存放的位置,暂且存放在M30...M37中,长度为8 bytes。
选择菜单View -> LAD,让程序返回到梯形图模式。
至此,
PLC梯形图编程已完成。
选择菜单PLC -> Download...,如果程序编写无误,则会出现如图所示的提示框,告诉你PLC里面的OB1已经存在,是否覆盖,选择YES即可以把程序下载到PLC 中。
如果硬件配置与梯形图程序相符合,则PLC的运行一切正常,如果有错误发生,则按提示进行Troubleshooting
引言:
为了让更多刚接触到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支持多主站系统,每个主站按时间分配其总线控制权,使用令牌在主站之间传递信息,如果主站获得上一个主站传递来的令牌,则立即有对总线的控制权,当其令牌时间到达,则使用此电文将令牌传递给下一个主站。
2)FDL状态请求电文。
在进行Cyclic 数据交换之前,主站间通讯,主站与从站间通讯都交由FDL状态请求电文来实现。
3)Profibus所有的数据交换都使用此电文来实现,包括诊断等。
我们继续了解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_Diag61(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掉线时发生的程序执行错误。
当我们清除掉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]\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\x
[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\x
[40]\x10\x03\x02\x7D\x82\x16
[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\x
B4\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\x 00\x00\x00\x6F\x16
[11]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\x B4\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\x 00\x02\xF0\x4F\x16
[17]\x68\x0F\x0F\x68\x02\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x B4\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\x 00\x02\xF0\x2F\x16
[23]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\x B4\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\x 00\x02\xF0\x4F\x16
[29]\x68\x0F\x0F\x68\x02\x10\x08\x12\xBC\x00\x00\x00\x00\x00\x06\xFB\x B4\x00\x00\x9D\x16
至此,关于如何组建简单Profibus/DP实验网络及一些简单的数据分析方法就基本介绍完毕。
Profibus是一种在实际项目中用得很多,市场占有率极大的现场级工业控制网络,其最高通讯速度可以达到12M,在业界也算是高居第一。
开发能接入Prifibus总线的现场设备,将使产品本身的集成能力更加强大,市场效用也明显提升。