基于PROFIBUS DPV1的断路器通信单元的开发
2009-09-23
作者:王 石 韩 兵
摘 要: 基于PROFIBUS-DPV1总线的断路器(ACB、MCCB)通信单元的硬件和软件设计,以及断路器的配置和诊断。重点论述了支持PROFIBUS-DPV1协议的SPC3智能从站通信芯片的使用及PRODAVE S7软件开发包的使用。
关键词: PROFIBUS-DP SPC3 PRODAVE STEP7 断路器
PROFIBUS协议是开放的,与制造商无关,无知识产权保护的标准。原则上,PROFIBUS协议在任何微处理器上都可以实现,在微处理器内部或外部安装异步串行通信接口(UART)即可完成。
PROFIBUS-DP是经过优化的高速低成本通信,专门用于设备级控制系统与分散式I/O的通信。PROFIBUS-DP用于现场的高速数据传送时,主站周期地读取从站的输入信息并周期地向从站发送输出信息。目前PROFIBUS-DP有3个功能版本,即DPV0、DPV1、DPV2。DPV0实现的PROFIBUS-DP基本功能和特征:即采用RS-485双绞线、双线电缆或光缆进行数据传输,波特率为9.6K~12Mbps。设备类型有:(1)一类主站(DPM1),中央可编程控制器PLC等。(2)二类主站(DPM2),如可编程、可组态、可诊断的设备。(3)DP从站,如分散式I/O设备。各主站间令牌传递,总线上最大站点(主-从设备)数为126。主-从用户数据传送采用循环方式,每个DP从站的输入和输出数据最大为246字节。主-主数据传送采用非循环方式;DPM1与DP从站之间的数据传送分为3个阶段:参数设定、组态配置和数据交换。
因为DPV0只允许主站和从站之间进行周期性数据交换,而不允许进行非周期性数据传输,这就使控制过程缺乏灵活性。而断路器这样的现场设备需要在一定的控制任务下改变原来的工作状态,所以就需要实现非周期性数据传输。DPV1可实现这一要求,它是DP的扩展功能,是对DPV0基本功能的补充,且与DPV0兼容。其扩展的功能有:
DPM1与DP从站间可以进行非循环的数据传输;带DDLM读和DDLM写的非循环读/写功能,可读写从站任何所需要的数据;允许报警响应,DP基本功能允许DP从站用诊断信息向主站自发地传输事件,而新增的DDLM-ALAM-ACK功能被用来直接响应在DP从站上接收的报警数据;DPM1与从站间的非循环数据传输。
1 硬件设计
本系统最小实现由3个单元组成:上位机PC,DP主站的S7-300PLC和DP从站的断路器。各单元相互连接框图如图1所示。
上位机使用串行口通过PC-Adapter与S7-300PLC相连,S7-300和断路器通过PROFIBUS总线相连。
1.1 硬件开发
在开发DP从站通信单元中,采用了专用的西门子ASIC芯片SPC3。SPC3是一种用于PROFIBUS从站的智能通信芯片,支持PROFIBUS-DP协议。图1中断路器的DP从站通信单元的详细框图如图2所示。
在图2中,RS485总线驱动器一侧与D型插座相连,另一侧通过光耦与SPC3相连。SPC3不能独立工作,需要外接微处理器。SPC3有8根数据线和11根地址线,其中低8位地址线与数据线复用,可以接80C32、80C166、80C165、HC11、HC16、HC196等单片机。SPC3本身具有地址锁存功能,不需另加锁存器,且自身可以产生片选信号。本系统采用了80C32微处理器作为SPC3的外接处理器。
1.2 软件开发
PROFIBUS-DP的状态机构可以保证DP站在每种情况下行为的一致性,其状态机如图3所示。SPC3内部集成了状态机构。在POWER-ON状态下,从站可以从主站接收Set_Slave_Add报文来改变它的地址,然后从站进入Wait_Parameter状态,等待参数化。同时,在此状态下,从站还可以接收Slave_Diag、Get_cfg报文。参数化完成后,从站进入Wait_Cfg状态,等待Chk_Cfg报文。完成Chk_Cfg后,从站进入Data_Exchange状态,进行周期性数据传输。若组态和数据交换状态不成功,则返回到参数化阶段。进入Data_Exchange状态后,从站可以接收Rd_inp、Rd_Outp、Slave_Diag、Chk_Cfg、Set_Prm、Get_Cfg、MSAC_C1_READ、MSAC_C1_WRITE、MSAC_C1_ALARM_QUIT等报文。其中,后面3个报文是PROFIBUS-DPV1才有的功能,而DPV0不存在这3个报文。
由于SPC3集成了完整的PROFIBUS-DP协议,因此80C32不需要参与处理PROFIBUS-DP状态机。80C32的主要任务是根据SPC3产生的中断,转存SPC3接收到的主站发出的输出数据,组织要通过SPC3发给主站的数据,并根据要求组织外部诊断等。
软件开发采用了西门子公司提供的针对SPC3的程序开发包DPSE,而DPSE提供支持DPV1的功能。其低级版本的程序开发包DPS2主要用于开发DPV0通信。
DPSE程序开发包使用C语言开发,并提供了一系列封装好的C接口函数,使用户可以方便地对SPC3的寄存器和内存进行操作,实现PROFIBUS-DPV1通信。
在DPSE开发包中实现非周期读服务的回调函数是DPSE_READ_REQ( )。调用这个函数需要传递2个参数:第1个参数是SAP,即服务入口点(对于非周期读服务,入口点固定为50)。第2个参数是PDU,即协议数据单元。它是一个非周期读服务的协议数据单元结构类型。实现非周期写服务的回调函数是DPSE_WRITE_REQ( )。调用这个函数也需要传递2个参数:第1个参数是SAP(对非周期写服务,服务入口点固定为51);第2个参数是PDU。对于写服务,对应的是写服务的协议数据单元类型。
PDU数据结构如图4所示。其中function_num表示功能号,slot_num表示从站的槽号,Index表示读或写数据块的索引号,length表示读或写数据块的长度,pdu_data表示传输的协议数据。这是根据PROFIBUS_
DP协议封装好的数据格式。
西门子S7-300PLC作为主站,集成了上述非周期读和非周期写服务。对于DS_READ服务,可以通过S7-300特殊功能调用SFC 59激活。对于DS_WRITE服务,可以通过特殊功能调用SFC 58激活。
其中:
REQ是调用请求位。当此位为1时,调用执行。
IOID对于SFC58固定为B#16#54,对于SFC59固定为B#16#55。
LADDR为模块I/O起始地址(该地址对应于使用STEP7软件进行硬件组态时模块的地址)。
RECNUM为S7-300数据记录号,数值范围为2~241。
RECORD对应需要传输的数据记录。对SFC58读,则设定从从站模块读上来的数据保存的地址以及数量;对SFC59写,则设定将要传输给从站模块的数据的地址及数量,保存或传输方式都以字节为单位。
RET_VAL表示调用返回值。根据这个值可以判断调用是否成功执行。如果失败,可以得到失败的原因。
BUSY表示调用忙位。当调用执行时,此值为1;调用结束时,此值为零。因此可以根据这个位的值,判断调用是否结束。
根据PROFIBUS DPV1协议,当执行SFC58示例时,可以从总线观测到04 5E C5这3个特征的16进制数据。如图4所示,04代表slot_num,5E代表Index索引号(对应于RECNUM),C5代表length传输的数据量(C5十进制为197,即192个字节再加上协议数据帧标志)。同理,当执行SFC59示例时,可以从总线观测到04 5E 2E这3个特征的16进制数据。
2 上位机软件开发
上位机软件主要功能:
(1)监测PROFIBUS总线上各DP从站的工作状态。
(2)如果DP从站具有DPV1功能,则通过此软件可以在需要的时候调整该DP从站的工作参数。
上述功能的实现主要基于PRODAVE S7软件开发包,用户可以通过PRODAVE S7使用VB、VC等高级语言进行相关的软件开发。对于使用VC开发的用户,PRODAVE S7提供了2个封装好的DLL,而在这2个DLL中提供了访问PLC的相关函数,并且提供了链接这2个DLL的相应的静态LIB文件。本上位机软件就是采用了VC开发。
要使用PRODAVE S7,必须正确设置好西门子系列PLC和PC机的连接。本系统S7-300通过一个PC-Adapter连接到PC机的串口上,如图5所示。
PRODAVE S7提供的访问PLC的函数主要可以用来访问PLC的各种内存区域。对于S7-300,主要有:可以读写输入/输出映像区、读写计时器(timer)数据、读写计数器(counter)数据、读写DB数据(块)、读写内存字节数据、读写内存的位数据。对于S7-200和S7-400,读者可以查阅PRODAVE帮助文档。
在使用这套开发软件包时,需要注意:
(1)初始化连接。若函数是load_tool,调用此函数时必须正确设置adr_table参数。如果只访问1个PLC,一般情况下采用默认设置即可;如果要访问多个通过1个PC-Adapter连接起来的PLC,则需要正确设置adr_table参数,才能使初始化连接成功。只有当初始化连接成功了,才能访问PLC,这一点很重要。
(2)初始化连接以后,如果系统中只有1个PLC,则此PLC即为当前活动的PLC;如果系统中有多个PLC,则必须调用new_ss函数来激活想要访问的PLC。
(3)不能在初始化成功以后再继续初始化,否则会出错。如果要重新初始化,必需先使用unload_tool函数断开连接。
(4)使用相关函数从PLC内存区域中读出的数据字的结构和常用的PC机数据字的结构位置正好相反。常用的PC机中内存字的结构使用的是intel标记,即先低位字节,再高位字节。而使用PRODAVE读出的PLC内存字使用的是STEP5标记,即先高位字节,再低位字节。所以在编程的时候需要做一些处理,才能得到相应的数据。该软件的主要功能如下:
(1)设置从站地址。
(2)对应STEP7软件的硬件组态,配置该从站各个I/O模块的输入/输出地址。配置好这些地址后,就可以使用PRODAVE软件开发包关于访问PLC输入、输出映像区函数(e_field_read、e_field_write、a_field_read、a_field_write)访问作为主站的PLC和作为从站的I/O模块的周期性数据。
(3)根据用户在PLC中关于SFC 58和SFC 59的功能调用编程,进行相应的DPV1配置,例如指定非周期读或写DB的数据块地址、读请求位、写请求位和BUSY位等一系列相关设置。通过这些设置,就可以通过PRODAVE软件开发包提供的函数mb_setbit设置请求位为1来激活非周期服务。通过testbit函数测试BUSY位是否为零来判断服务是否结束;通过db_read、db_write 函数可以读或者写相应的数据块数据。因此,采用此方法,可以在上位机上实现控制主站和从站的非周期数据交换。
(4)对周期性数据和非周期性数据进行相应的处理,可实现实时监控和动态修改从站参数。
软件框架原理图如图6所示。
基于PROFIBUS DPV1断路器通信单元的实现,不但满足了在工业现场对于实时监控断路器工作状态的需求,而且可动态地修改断路器工作参数,极大地方便了断路器的工业控制。因此,PROFIBUS总线在工业自动化中有广泛的应用前景。
参考文献
1 SIEMENS.SPC3 PROFIBUS Controller User Description.1996
2 阳宪惠.现场总线技术及其应用.北京:清华大学出版社,1999
3 郭宗仁,吴亦锋,郭永.可编程序控制器应用系统设计及通信网络技术.北京:人民邮电出版社,2002
4 SIEMENS.Profibus Specification.1997
5 SIEMENS.PRODAVE S7 Mannual.1999