《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 解决方案 > PROFIBUS-DP总线I/O设备的开发

PROFIBUS-DP总线I/O设备的开发

——基于XGate-DPS10的应用——下篇(软件设计)
2010-11-03
作者:广州致远
关键词: SOC PROFIBUS-DP I/O

    如果说硬件是设备的躯体,那么软件则是设备的灵魂。上期文章中详细介绍了基于XGate-DPS10的总线I/O设备硬件设计,至此,已构建了一个完整的设备躯体。但是,这个设备还不能正常运行,因为它还没有灵魂,不知道自己该做什么,怎么做。本期文章将介绍如何使用XGate-DPS软件库设计设备软件,通过下面的介绍,您可以快速地让您的设备具有思想,最终成为一个功能完整的设备。
1 XGate-DPS软件库结构
    XGate-DPS系列模块都提供了软件库,用户使用该软件库可以快速开发出设备软件。图 1是该软件库的结构图,整个软件架构将XGate-DPS的资源展示给用户,这些资源包括输入数据、输出数据、用户参数数据、配置数据、诊断数据等等。图中,灰色背景部分表示需要用户编程。软件库针对8051、ARM平台做了硬件相关的接口驱动,一般不需要做任何更改,如果使用新的硬件平台, 用户需要修改UART驱动。

    软件库自行完成UART数据传输控制、命令发送和接收及相关分析处理,即图中的“XGate数据处理”部分;在“XGate数据处理”的上层,提供了用户接口函数API,用户使用这些函数完成对XGate-DPS的操作;一些基于事件的操作,如DP-V1的读写和数据传输请求,“XGate数据处理”将通过回调方式获取应答和处理;用户应用程序APP可以直接访问XGate资源,但是,必须使用API来更新这些资源。
2 XGate-DPS软件设计步骤
    用户使用该软件库对XGate-DPS10的操作其实就是完成回调函数、使用API更新资源、访问资源数据。整个设计遵循图2所示的5个步骤,每个步骤需要完成的工作在图中作了注释,其中,大多数场合不需要步骤3;在不使用DP-V1的情况下步骤4几乎也是可以忽略的。

3 总线I/O设备的GSD文件
    GSD文件是设备描述文件,当一个设备确定了其功能和参数后,GSD文件也就确定了。设备的GSD文件一般是通过修改示例GSD文件生成,示例GSD文件中的大部分关键字和参数已经确定而不需要修改。本例中修改示例如下:
    Vendor_Name="ZY Ltd. Co.";//公司名,用户自行修改
    Model_Name="总线I/O";//设备名称,也是组态时该产品的名称
    OrderNumber="I/O20100801";//产品序列号,可按用户名修改
    Module= "DO8 LEDs" 0x20;//模块描述,组态数据0x20
表示1个字节输出,对应了8位输出开关量
    1
    Ext_Module_Prm_Data_Len=1
    Ext_User_Prm_Data_Ref(0)=2
    EndModule
    ……
    修改的内容一部分是设备的名称、序列号等信息,另一部分是设备组态数据和用户参数数据部分。设备组态数据指示了设备的输入输出大小,决定了通信数据结构,组态数据的设置可以查看XGate-DPS10数据手册的附录;用户参数数据是为了限定或指示设备数据的范围或意义的,更详细的信息请参考《XGate-DPS10数据手册》。
4 APP设计及回调函数
    软件库提供了demo示例代码,一个软件库基础操作单元如图3所示。

    在使用软件包前,首先要配置cfg.h头文件的宏定义,这包括与硬件相关的寄存器、缓冲区大小、设备属性等的定义。
    使用软件包,用户没有必要去考虑如何与模块通信,也不必了解PROFIBUS技术细节,只需要关心设备功能的实现及如何组织数据。一个典型的前后台用户程序框图如图4所示。

    软件包中有两个非常重要的函数DataUpdate()和RecvProcess(),调用这两个函数实现数据的交换。接收到的交换数据在sys.Out_data[]数组中,要发送的数据需要放到sys.In_data[]中。例如:
    sys.In_data[0] = redDI();//将数字量输入读回放到
sys.In_data缓冲区中
    DataUpdate();//上传输入数据
    RecvProcess();//获取输出数据
    DriveDO(sys.Out_data[0]);//将来自主站的输出数据DO
输出到开关输出
    放到sys数组中的数据顺序与GSD文件描述的设备信息顺序是一致的。在本例中,8位开关输入量在sys.In_data[0]中,而16位(2 B)计数器占用sys.In_data[1…2];8位开关输出在sys.Out_data[0]中。来自主站的用户参数数据放在sys.User_para[]数组中,用户可以根据这些数据的意义设置设备相关功能。
    XGate-DPS10支持用户诊断,用户可以调用SetDiag_Channel()、SetDiag_Identifier()、SetDiag_Device()等函数来完成用户诊断的发送,在发送这些诊断前,需要将诊断信息赋值到定义好的结构体中,例如:
    STRUCT_Diag_Channel diag_channel;//通道相关诊断
    diag_channel.Channel_ByteType=ChannelByte_In;//字节、
输入通道
    diag_channel.Channel_Number=2;//通道号
    diag_channel.Channel_Type=ChannelTpye_byte;//类型为字节
    diag_channel.EerrType=STATUS_OVERVOLTAGE;
//错误为过压
    diag_channel.Module_Number=2;//通道所属模块
    SetDiag_Channel(0, &Diagbuf, &diag_channel);
//发送诊断数据
    当XGate-DPS收到DP-V1读写请求,也将产生一个中断,软件库将调用相应的回调函数。在这些回调函数中应首先判断访问的slot_num、index的合法性,基本格式如下:
    switch(slot_num)
    {
    case允许的:
        允许的处理;//在这里使用同样格式进一步对
index的合法性判断;完全合法则应答请求数据
    break;
    case不允许的:
        返回访问错误;
    break;
    }
    PROFIBUS-DP从站应用广泛,使用通信接口模块来开发总线I/O设备可以有效地缩短开发周期、节省成本投入,并在可靠性上得到保障。XGate-DPS10符合大多数应用场合,其高可靠性、方便性、低成本性使其成为开发DP从站设备的首选。
    广州致远电子有限公司致力于嵌入式系统、工业通信网络的技术研发与应用推广,自主研发了一系列PROFIBUS-DP网络产品,包括嵌入式模块、通讯卡、调试工具、PC软件、OPC服务器等,并提供基于PROFIBUS总线的整套组网方案及应用集成。

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。