爱普生压电喷头行业资讯
2024-05-03
图1 Profibus-DP中断机制[/align]2.2 中断相应 虽然在开发DP产品时无需对Profibus-DP的中断机制进行修改,但深入了解该中断机制对于剖析SPC3的固态程序具有重要的意义,因为该固态程序的框架就是基于Profibus-DP协议所定义的中断机制。在实际运行过程中,DP从站内的微处理器主要对协议芯片SPC3的以下几类中断事件做出响应。 (1) Diag_Fetched:诊断数据被主站取走,此时MCU应发出一个User_Diag_Read_Cmd命令(通过读RAM中的User_Diag_Read_Cmd单元实现),将用户诊断缓冲器与MAC缓冲器互换,以将更新的用户诊断数据提供给MAC层,供主站在必要时取用; (2) IndQ_Entry:新的事件信息进入指示队列,在中断处理时MCU应从指示队列中读出事件信息代码,根据不同的事件做出反应。比如发生监视定时器到时事件,就将程序从数据交换状态跳出,停止输入数据的发送; (3) Go/Leave_Data_Exchange:进入或离开数据交换状态。此时MCU应读取SPC3的状态寄存器,得知具体是进入还是离开。若是进入数据交换状态,应当准备输入数据以便向主站发送;若是离开则停止输入数据的发送; (4) New_Prm_data:新的参数报文。MCU从用户参数缓冲器中读出参数数据, 然后对从站需要设置的参数进行设置,根据设置的结果是否正确向SPC3发出一个肯定的User_Prm_OK_Cmd或一个否定的User_Prm_Not_OK_Cmd命令,SPC3便会对此参数报文向主站作出肯定或否定的应答; (5) New_Cfg_data:新的组态报文。MCU从用户组态缓冲器中读出组态数据,然后根据组态信息设置从站,根据组态的结果是否正确向SPC3发出一个肯定的User_Cfg_OK_Cmd或一个否定的User_Cfg_ Not_OK_Cmd命令,SPC3便会对此组态报文向主站作出肯定或否定的应答; (6) Get_Cfg_Buffer_Change:读组态缓冲器改变,即用户读组态缓冲器与MAC读缓冲器互换。在中断处理时MCU应通过读User_Cfg_Buffer_Ptr得到新的用户读组态缓冲器的指针,以将从站的组态信息写入新的用户读组态缓冲器中。此中断由User_Get_Cfg_Read_Cmd命令对主站组态报文的User_Cfg_OK_Cmd肯定引起; (7) Diag_Buffer_Changed:诊断缓冲器改变,即用户诊断缓冲器与MAC诊断缓冲器互换。在中断处理中MCU应通过读User_Diag_Buffer_Ptr得到新的用户诊断缓冲器的指针,以将从站的诊断信息写入新的用户诊断缓冲器中,此中断由User_Diag_Read_Cmd命令引起; (8) DX_OUT:新的输出数据。此时应发出一个User_New_Dout_Cmd命令,并得到新的U缓冲器的指针,从而用户可以根据这个指针得到存入其中的新的输出数据,同时MCU应发出一个User_New_Din_Cmd,将U输入数据缓冲器变为N输入数据缓冲器,同时得到新的U缓冲器的指针,这样便将用户的输入数据发送给主站,并得到新的U缓冲器以准备新的输入数据。 所有的中断事件协调组合在一起,就构成了Profibus-DP的状态机,该状态机模型如图2:[align=center]
图2 Profibus-DP状态机模型[/align]3 SPC3固态程序的剖析 使用西门子公司提供的协议芯片SPC3可以较容易地设计Profibus-DP从站的硬件电路,相对而言从站的软件设计要相对复杂,而软件设计的关键是利用开发包中提供的SPC3协议芯片固态程序,因此解析该固态程序是另一个需要关注的问题。3.1 SPC3固态程序流程 由于SPC3芯片内的寄存器是完全格式化的,固态程序可实现在SPC3内部寄存器与应用接口之间的连接,为用户提供了宏接口,使用固态程序可大大节省用户的开发的时间。SPC3固态程序包使得用户无须直接操作寄存器和计算存储空间。固态程序中包含的各程序模块有: (1) 主程序SERSPC3.C,主要完成SPC3初始化,启动,外部信号处理,发送和接收数据和诊断; (2) 中断模块INTSPC3.C,主要处理分配从站参数、组态数据检查和从站地址设定; (3) 函数DPS2SPC3.C,这些函数根据组态数据计算输入输出数据长度,辅助缓冲区分配,缓冲区初始化,设置IO数据长度,各缓冲区更新函数等; (4) 变量定义和宏接口DPS2USER.h,宏接口使用户能够方便地访问SPC3的各个寄存器。 SPC3在接收到由Profibus-DP主站传送的不同输出数据时,会产生输出标志位(位于中断请求字单元),CPU通过在应用循环中查询标志位来接收主站数据,对于实时性要求严格的系统,则应采用中断方式进行输出数据的处理。主程序首先利用开发包中的DPS2对SPC3进行初始化,允许外部中断INT0,设置INT0为高优先级及开中断,然后启动SPC3,通过SPC3进行主站和从站的数据交换以及处理诊断。SPC3固态程序的流程示意如图3:[align=center]
图3 SPC3固态程序流程图[/align]3.2 SPC3初始化子程序 在SPC3正常工作之前,首先需要进行初始化,以配置需要的寄存器,包括设置协议芯片的中断允许,写入从站识别号和地址,设置SPC3方式寄存器,设置诊断缓冲区,参数缓冲区,配置缓冲区,地址缓冲区,初始化长度,并根据以上初始值得出各个缓冲区的指针和辅助缓冲区的指针。根据传输的数据长度,确定输出缓冲区,输入缓冲区及指针。 初始化程序用以实现以下各项功能: (1) SPC3硬件复位:应用程序用RESET复位SPC3,初始化内部RAM及复位微处理器; (2) 编译器设置:针对选用的微处理器选用合适的编译器,用#define DPS2_SPC3激活DPS2接口; (3) 设置SPC3中断屏蔽寄存器:宏DPS2_SET_IND( )激活SPC3中断触发,包括从站地址改变,组态数据检查,参数检查中断; (4) SPC3内部看门狗设置:用户看门狗用于确保在微处理器出现故障时,SPC3能在DPS2_SET_USER_WD_VALUE(X)设定的时间内进行数据通信后,时间完后则离开数据交换通信状态,只要微处理器没有问题,则需不断地用DPS2_RESET_USER_WD重新触发看门狗电路; (5) 设备标识码设置:在启动过程中,应用程序读取标识码,并将其传送到SPC3芯片中; (6) 设置响应时间:如果某些应用需要,用户可以通过DPS2_SET_MINTSDR(X)为SPC3设置最小的从站响应时间; (7) 缓冲区初始化设置:用户必须确定DPS2_BUFINIT结构体中定义的各个用于信息交换的缓冲区的长度,这些缓冲区长度决定了SPC3中各个数据缓冲区的长度,这些缓冲区占用SPC3双口RAM的空间,因此不能超过缓冲区总长度。用宏SPC3_INIT( )或Dps2_buf_init( )函数将DPS2_BUFINIT初始化后的结构体指针作为参数,根据结构体中的数据在SPC3的RAM中分配各缓冲区,检查各个缓冲区的最大长度,并返回缓冲区初始化后的测试信息; (8) 波特率控制设置:用DPS2_SET_BAUD_CNTRL( )宏,可以设置波特率控制模式。在此监视定时值过后,如果没有有效的信息被接收,SPC3将启动波特率搜索BAUT RATE RESEARCH功能。如果定时监视器被启用,且DP从站检查到DP主站有故障,则本地输出数据被删除或进入规定的安全状态。监视定时器的时基为10ms,其时间范围为10ms~650s。3.3 接收主站输出数据子程序 Profibus-DP主站和SPC3通过默认的服务访问点交换数据,在此过程中SPC3需要完成的任务主要包括以下3步: (1) SPC3将输出数据写入D缓冲区中,且交换D和N缓冲区中的数据; (2) 产生DX-Out中断; (3) 用户通过交换N和U缓冲区中的数据,从U缓冲区中获取输出数据。 第1步由SPC3自动完成,用DPS2_POLL_IND_ DX_OUT( )读SPC3的中断请求寄存器查询中断事件。当为真时,表示SPC3接收到Write_Read_Data报文,并使N缓冲区中的输出数据有效。用宏DPS2_OUTPUT_UPDATE( )更新输出缓冲区,即将N缓冲区中的数据送到U缓冲区中。输出数据中并不包括输出数据的长度,但必须和DPS2_SET_IO_DATA_LEN( )定义的数据长度一致,当长度不一致时,从站将会返回到等待参数赋值状态,输出数据缓冲区的长度在初始化部分程序中。 该部分程序核心代码如下:if (DPS2_POLL_IND_DX_OUT( )){ DPS2_CON_IND_DX_OUT( );user_output_buffer_ptr = DPS2_OUTPUT_UPDATE( );for (i=0; i
[/align]5.2 组建Profibus-DP网络 利用STEP7软件来建立Profibus-DP网络也十分方便,主要包括以下步骤: (1) 进入Hardware组态环境,将使用的各个模块用鼠标拖拉的方式添加到机架相应的位置处; (2) 建立Profibus-DP网络,设定主站,并将各从站挂接到网络上; (3) 设置各主从站的地址; (4) 若一个机架容纳不了所有的模块,应相应地增加机架数目; (5) 选择Station菜单下的Save and Compile命令,若无错误,就可以利用Download命令将硬件组态下载到PLC中。 利用CPU314、PS307/10A、IM365(SEND/RECEIVE)和CP342-2组态得到的Profibus-DP网络示意如图4。 [align=center]
图4 Profibus-DP网络组态示意[/align] 在设定各站地址时应注意有些类型的DP从站不提供用于设置Profibus地址的硬件开关,它们的总线地址是用2类DP主站功能Set_Slave_Add来指定的。由于它是集成的MPI在线接口,故STEP7组态软件能够处理此编址功能,这种地址分配的方法仅适用于支持Set_Slave_Add功能的DP从站设备。此外,从站设备的缺省地址由制造商设定为126。在欧洲标准EN 50170中,此地址已经被保留而不能由Profibus-DP用户使用,但如果此从站是新的从制造商那里直接得来的设备,仍然可以见到此缺省值。6 结束语 开发Profibus-DP从站的硬件设计比较简单,相对复杂的是其软件设计和联机调试。笔者在DP从站开发过程中发现,很多情况下从站未能正常工作均是由于GSD文件编写有问题或网络组态错误造成的。本文针对这些问题进行了探讨,并结合实例给出了解决方案,具有一定的参考价值。在开发DP从站产品的过程中,必须对这些问题给予十分关注。



