PROFINET的GSD文件描述

目录

一、基础介绍:

二、文件命名:

三、文件结构:

 1、根元素:ISO15745Profile

 2、行规头部:ProfileHeader

3、行规体: ProfileBody

3.1、设备标识:DeviceIdentity

3.2、设备功能:DeviceFunction

3.3、应用处理:ApplicationProcess

3.3.2、模块列表:ModuleList

3.3.3、值列表:ValueList

3.3.6、图形列表:GraphicsList

3.3.7、分类列表:CategoryList

3.3.8、外部文本列表:ExternalTextList

附录1:分配ID前缀列表

参考资料:


一、基础介绍:

        1、作用:用来描述PROFINET设备的功能,包含与工程相关的和设备数据交换相关的数据。

        2、描述语言:GSDML(通用站描述标记语言),是一种基于国际标准的PROFINET行业规范,与XML(可扩展标记语言)本身无关,使用标准的XML解析器可解析PROFINET的GSD文件。

        3、内容:描述与通信相关的参数Parameter;通过DAP(Device Access Points-设备访问点)的定义描述整个设备族;描述与模块(Modules)相关的信息,并用于已定义的DAP

二、文件命名:

        PROFINET的GSD文件采用XML语言描述,后缀名为xml。按照约定,PROFINET I/O设备的GSD文件应遵循如下的命名规则:

GSDML-[架构版本]-[制造商名称]-[设备族名称]-[GSD发布日期].xml

下面是一个GSDML文件名示例: 

GSDML-V2.31-Renesas-TPS1-Template-20170222.xml

 

1、架构版本:该版本标识符必须与文件名GSDML-设备行规-[架构版本].xsd的版本标识符一致;

xsi:schemaLocation="http://www.profibus.com/GSDML/2003/11/DeviceProfile ..\xsd\GSDML-DeviceProfile-V2.31.xsd"

2、制造商名称:该名称允许使用连字符和空格。为了防止不同的设备制造商生成相同的文件名,推荐使用PNO-ID(VendorID)作为名称中的一部分,但貌似很多厂家都没有接受这种建议;

3、设备族名称:定义在GSDML中描述的设备族,在该名称中允许使用连字符和空格;

<Family MainFamily="I/O" ProductFamily="Renesas TPS-1 solution board"/>

        很显然瑞萨TPS-1评估板命名与设备族名称不一致,推荐使用ProductFamily作为设备族名称。

4、GSD发布日期:必须以"yyyymmdd"来指定。

三、文件结构:

        GSD文件基于ISO 15745,由行规头部(Profile Header)行规体(Profile Body)组成。

<!--XML特殊声明:文档的声明必须写在第一行第一列-->
<?xml version="1.0" encoding="UTF-8"?>
​
<!--xml:代表此文件是XML文件;
version=“1.0”:代表此文件用的是XML1.0标准;
encoding=“UTF-8”:代表此文件所用的字符集,默认值为utf-8。-->

 以下图表中1,0..1表示的意思如下表格:

 1、根元素:ISO15745Profile

<!--示例-->
<ISO15745Profile xmlns="http://www.profibus.com/GSDML/2003/11/DeviceProfile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.profibus.com/GSDML/2003/11/DeviceProfile ..\xsd\GSDML-DeviceProfile-V2.31.xsd">
    ...
</ISO15745Profile>

 

1、xmlns:表明元素ISO15745Profile的默认命名空间;

2、xmlns:xsi:表明XSD文件的命名空间;

3、xsi:schemaLation:指明XSD文件的路径,不同架构版本的xsd路径不同。

xsi:schemaLocation="http://www.profibus.com/GSDML/2003/11/DeviceProfile ..\xsd\GSDML-DeviceProfile-V2.31.xsd"
xsi:schemaLocation="http://www.profibus.com/GSDML/2003/11/DeviceProfile ..\xsd\GSDML-DeviceProfile-V2.4.xsd"

 2、行规头部:ProfileHeader

        规则头以ProfileHeader元素标记,包括了规则的标识、版本、名称、及ISO15745的相关信息,这个一般不怎么会改变,所以没有对具体内容进行说明。

<!--示例-->
<ProfileHeader>
    <ProfileIdentification>PROFINET Device Profile</ProfileIdentification>
    <ProfileRevision>1.00</ProfileRevision>
    <ProfileName>Device Profile for PROFINET Devices</ProfileName>
    <ProfileSource>PROFIBUS Nutzerorganisation e. V. (PNO)</ProfileSource>
    <ProfileClassID>Device</ProfileClassID>
    <ISO15745Reference>
        <ISO15745Part>4</ISO15745Part>
        <ISO15745Edition>1</ISO15745Edition>
        <ProfileTechnology>GSDML</ProfileTechnology>
    </ISO15745Reference>
</ProfileHeader>

3、行规体: ProfileBody

        规则体包含了PROFINET I/O设备(子站)的实际数据,由三个部分组成:

1、Device Identity(设备标识块):包含了用于确认该设备的标识信息;

2、Device Function(设备功能块):包含了用于描述设备功能的数据;

3、Application Process(应用过程块):这是整个通用站描述文件的主要部分,包含了设备访问点列表、模块列表、子模块列表、值列表等PROFINET I/O设备的数据。

3.1、设备标识:DeviceIdentity

         包括了该PROFINET I/O设备的供应商ID、设备ID及描述等信息。

<!--示例-->
<DeviceIdentity VendorID="0x02C7" DeviceID="0x1234">
    <InfoText TextId="TOK_DevIdent_InfoText"/>
    <VendorName Value="Renesas Electronics"/>
</DeviceIdentity>

1、VendorID(供应商标识):16Bit,由制造商向PI协会申请授权;

2、DeviceID(设备标识):16Bit,用于IO现场设备的详细区分,由制造商定义,不需要向PI协会申请授权;

3、InfoText(描述信息):用于描述产品信息;

4、VendorName(供应商名字):可以自己修改,根据公司名字填写。

3.2、设备功能:DeviceFunction

<!--示例-->
<DeviceFunction>
    <Family MainFamily="I/O" ProductFamily="Renesas TPS-1 solution board"/>
</DeviceFunction>

 

  1. MainFamily(主系列):可选项Drives,Encoders,Gateway,I/O,Sensors
  2. ProductFamily(产品系列):可以自己修改。

3.3、应用处理:ApplicationProcess

        包括了设备访问点列表,模块列表,子模块列表,值列表,通道诊断列表,单元诊断列表,图形列表,分类列表,外部文本列表。

 3.3.1、设备访问点列表:DeviceAccessPointList

 

        DeviceAccessPointItem,这部分是PROFINET I/O设备访问接口的描述,可以理解为分布式I/O的接口模块,一个GSD文件中可以包括多个接口模块的描述。 

<!--示例-->
<DeviceAccessPointList>
    <!--0.DeviceAccessPointItem-->
    <DeviceAccessPointItem ID="DAP 3" PhysicalSlots="0..64" ModuleIdentNumber="0x00000003" MinDeviceInterval="4" ImplementationType="ERTEC200P" DNS_CompatibleName="Hengxin-PN-w200" FixedInSlots="0" ObjectUUID_LocalIndex="1" MultipleWriteSupported="true" SharedDeviceSupported="true" DeviceAccessSupported="true" NumberOfDeviceAccessAR="1" MaxSupportedRecordSize="8192" NameOfStationNotTransferable="true" ParameterizationSpeedupSupported="true" LLDP_NoD_Supported="true" ResetToFactoryModes="2" CheckDeviceID_Allowed="true" PowerOnToCommReady="490" IOXS_Required="false" RequiredSchemaVersion="V2.31" PNIO_Version="V2.31" AddressAssignment="LOCAL;DCP">
        <!--1.ModuleInfo-->
        <ModuleInfo CategoryRef="ID_IO_Module">
            <Name TextId="TOK_Standard_MRP"/>
            <InfoText TextId="TOK_ModInfo_InfoTextId_DAP3"/>
            <VendorName Value="NingBo HengXin"/>
            <OrderNumber Value="Hengxin-PN-w200-v1.0"/>
        </ModuleInfo>
        <!--2.CertificationInfo-->
        <CertificationInfo ConformanceClass="C" ApplicationClass="Isochronous;HighPerformance" NetloadClass="III"/>
        <!--3.SubslotList-->
        <SubslotList>
            <SubslotItem SubslotNumber="32768" TextId="TOK_Subslot_8000"/>
            <SubslotItem SubslotNumber="32769" TextId="TOK_Subslot_8001"/>
            <SubslotItem SubslotNumber="32770" TextId="TOK_Subslot_8002"/>
        </SubslotList>
        <!--4.IOConfigData-->
        <IOConfigData MaxInputLength="2048" MaxOutputLength="2048"/>
        <!--5.UseableModules-->
        <UseableModules>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_Weight"        AllowedInSlots="1" FixedInSlots="1"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_Status"        AllowedInSlots="2" FixedInSlots="2"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_Gross_Weight"  AllowedInSlots="3" FixedInSlots="3"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_Flow"          AllowedInSlots="4" FixedInSlots="4"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_Division"      AllowedInSlots="5" FixedInSlots="5"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Read_FullScale"     AllowedInSlots="6" FixedInSlots="6"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Write_Division"     AllowedInSlots="7" FixedInSlots="7"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Write_FullScale"    AllowedInSlots="8" FixedInSlots="8"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Write_Status"       AllowedInSlots="9" FixedInSlots="9"/>
            <ModuleItemRef ModuleItemTarget="ID_Mod_Write_Calibration"  AllowedInSlots="10" FixedInSlots="10"/>
        </UseableModules>
        <!--6.VirtualSubmoduleList-->
        <VirtualSubmoduleList>
            <VirtualSubmoduleItem ID="DAP 3" SubmoduleIdentNumber="0x0001" Writeable_IM_Records="1 2 3 4" IM5_Supported="true" MayIssueProcessAlarm="false">
                <IOData/>
                <ModuleInfo>
                    <Name TextId="TOK_Standard_MRP"/>
                    <InfoText TextId="TOK_ModInfo_InfoTextId_DAP3"/>
                </ModuleInfo>
            </VirtualSubmoduleItem>
        </VirtualSubmoduleList>
         <!--7.SystemDefinedSubmoduleList-->
        <SystemDefinedSubmoduleList>
            <InterfaceSubmoduleItem ID="IDS_3I" SubslotNumber="32768" SubmoduleIdentNumber="0x0002" IsochroneModeSupported="true" IsochroneModeInRT_Classes="RT_CLASS_3" SupportedRT_Classes="RT_CLASS_1;RT_CLASS_3" TextId="TOK_DAP_InterfaceModule" SupportedProtocols="SNMP;LLDP" NetworkComponentDiagnosisSupported="true" PTP_BoundarySupported="true" DCP_BoundarySupported="true" MulticastBoundarySupported="true" DCP_HelloSupported="true" MaxFrameStartTime="1600" MinNRT_Gap="960" DelayMeasurementSupported="true" Writeable_IM_Records="1 2 3 4" IM5_Supported="true">
                <RT_Class3Properties ForwardingMode="Absolute;Relative" MaxBridgeDelay="2088" MaxBridgeDelayFFW="1024" MaxRangeIR_FrameID="1024" MaxNumberIR_FrameData="1024" StartupMode="Legacy;Advanced" MaxDFP_Frames="1" MaxDFP_Feed="340" AlignDFP_Subframes="false" FragmentationType="Dynamic" MaxRedPeriodLength="4000" MinFSO="1760" MinRTC3_Gap="1120" MinYellowTime="10240" YellowSafetyMargin="160" DFP_OutboundTruncationSupported="false" MaxRetentionTime="30000"/>
                <SynchronisationMode SupportedRole="SyncSlave" MaxLocalJitter="300" T_PLL_MAX="1000" SupportedSyncProtocols="PTCP" PeerToPeerJitter="250"/>
                <ApplicationRelations NumberOfAR="4" StartupMode="Legacy;Advanced" NumberOfAdditionalInputCR="0" NumberOfAdditionalMulticastProviderCR="0" NumberOfAdditionalOutputCR="0" NumberOfMulticastConsumerCR="0" PullModuleAlarmSupported="true">
                    <TimingProperties ReductionRatio="1 2 4 8 16 32 64 128 256 512" SendClock="8 16 32 64 128"/>
                    <RT_Class3TimingProperties ReductionRatioPow2="2 4 8 16" SendClock="4 6 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128" ReductionRatio="1"/>
                </ApplicationRelations>
                <MediaRedundancy SupportedRole="Client" MRPD_Supported="true"/>
            </InterfaceSubmoduleItem>
            <PortSubmoduleItem ID="IDS_3P1" SubslotNumber="32769" SubmoduleIdentNumber="0x0003" TextId="TOK_Port1" MaxPortRxDelay="198" MaxPortTxDelay="6" IsDefaultRingport="true" MAUType="100BASETXFD" MAUTypes="16" PortDeactivationSupported="true" LinkStateDiagnosisCapability="Up+Down" ShortPreamble100MBitSupported="true" CheckMAUTypeSupported="true" CheckMAUTypeDifferenceSupported="true" Writeable_IM_Records="1 2 3 4" IM5_Supported="true">
                <MAUTypeList>
                    <MAUTypeItem Value="16" AdjustSupported="true"/>
                </MAUTypeList>
            </PortSubmoduleItem>
            <PortSubmoduleItem ID="IDS_3P2" SubslotNumber="32770" SubmoduleIdentNumber="0x0003" TextId="TOK_Port2" MaxPortRxDelay="198" MaxPortTxDelay="6" IsDefaultRingport="true" MAUType="100BASETXFD" MAUTypes="16" PortDeactivationSupported="true" LinkStateDiagnosisCapability="Up+Down" ShortPreamble100MBitSupported="true" CheckMAUTypeSupported="true" CheckMAUTypeDifferenceSupported="true" Writeable_IM_Records="1 2 3 4" IM5_Supported="true">
                <MAUTypeList>
                    <MAUTypeItem Value="16" AdjustSupported="true"/>
                </MAUTypeList>
            </PortSubmoduleItem>
        </SystemDefinedSubmoduleList>
        <!--8.Graphics-->
        <Graphics>
            <GraphicItemRef Type="DeviceSymbol" GraphicItemTarget="ID_Graph_3"/>
        </Graphics>
    </DeviceAccessPointItem>
</DeviceAccessPointList>

3.3.2、模块列表:ModuleList

 

        该部分是PROFINET I/O设备中包含的模块的描述,它可以是一种可选择插入的模块(比如模块化的I/O设备),也可以是一种永久集成在I/O设备中的模块。

        ModuleItem,这部分是PROFINET I/O设备模块的描述,一个GSD文件中可以包括多个设备模块的描述。

<!--示例1-->
<ModuleList>
    <ModuleItem ID="ID_Mod_Read_Weight" ModuleIdentNumber="0x00001001">
        <!--1.ModuleInfo-->
        <ModuleInfo>
            <Name TextId="TOK_Mod_Read_Weight"/>
            <InfoText TextId="TOK_Info_Read_Weight"/>
        </ModuleInfo>
        <!--2.VirtualSubmoduleList-->
        <VirtualSubmoduleList>
            <VirtualSubmoduleItem ID="1001" SubmoduleIdentNumber="0x0001" FixedInSubslots="1" API="0" MayIssueProcessAlarm="false">
                <IOData>
                    <Input Consistency="All items consistency">
                        <DataItem DataType="Unsigned32" TextId="TOK_Read_Weight" UseAsBits="false"/>
                    </Input>
                </IOData>
                <ModuleInfo>
                    <Name TextId="TOK_Mod_Read_Weight"/>
                    <InfoText TextId="TOK_Info_Read_Weight"/>
                </ModuleInfo>
                <PROFIenergy ProfileVersion="V1.0"/>
            </VirtualSubmoduleItem>
        </VirtualSubmoduleList>
    </ModuleItem>
</ModuleList>
 <!--示例2-->
<ModuleList>
    <ModuleItem ID="ID_Mod_ControlStatus" ModuleIdentNumber="0x00001901">
        <!--1.ModuleInfo-->
        <ModuleInfo>
            <Name TextId="TOK_TextId_ControStatus"/>
            <InfoText TextId="TOK_InfoTextId_ControlStatus"/>
        </ModuleInfo>
        <!--2.VirtualSubmoduleList-->
        <VirtualSubmoduleList>
            <VirtualSubmoduleItem ID="1901" SubmoduleIdentNumber="0x0001" FixedInSubslots="1" API="0" MayIssueProcessAlarm="false">
                <IOData>
                </IOData>
                <RecordDataList>
                    <ParameterRecordDataItem Index="1" Length="8" TransferSequence="0">
                        <Name TextId="TOK_GeneralParm"/>
                        <Const Data="0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00" ByteOffset="0"/>
                        <Ref ValueItemTarget="Modbus_Write_Mode" DataType="Bit" ByteOffset="0" BitOffset="3" DefaultValue="0" AllowedValues="0..1" Changeable="true" Visible="true" TextId="IDT_MODBUS_WRITE_MODE"/>
                        <Ref ValueItemTarget="Retans_En" DataType="Bit" ByteOffset="0" BitOffset="7" DefaultValue="0" AllowedValues="0..1" Changeable="true" Visible="true" TextId="IDT_RETANS_EN"/>
                        <Ref ValueItemTarget="Modbus_Baudrate" DataType="Unsigned8" ByteOffset="1" BitOffset="0" DefaultValue="15" AllowedValues="11 13 15 16 17 18 19 20" Changeable="true" Visible="true" TextId="IDT_MODBUS_BAUDRATE"/>
                        <Ref ValueItemTarget="Modbus_DataLen" DataType="Unsigned8" ByteOffset="2" BitOffset="0" DefaultValue="8" AllowedValues="8" Changeable="true" Visible="true" TextId="IDT_MODBUS_DATALEN"/>
                        <Ref ValueItemTarget="Modbus_Parity" DataType="Unsigned8" ByteOffset="3" BitOffset="0" DefaultValue="0" AllowedValues="0..2" Changeable="true" Visible="true" TextId="IDT_MODBUS_PARITY"/>
                        <Ref ValueItemTarget="Modbus_StopBit" DataType="Unsigned8" ByteOffset="4" BitOffset="0" DefaultValue="1" AllowedValues="1..2" Changeable="true" Visible="true" TextId="IDT_MODBUS_STOPBIT"/>
                        <Ref ValueItemTarget="Modbus_Reply_Time" DataType="Unsigned8" ByteOffset="5" BitOffset="0" DefaultValue="20" AllowedValues="1 2 3 4 5 10 20 30 40 50 60 70 80 90 100 200 255" Changeable="true" Visible="true" TextId="IDT_MODBUS_REPLY_TIME"/>
                        <Ref ValueItemTarget="Modbus_Idle_Time" DataType="Unsigned8" ByteOffset="6" BitOffset="0" DefaultValue="10" AllowedValues="1 2 3 4 5 10 20 30 40 50 60 70 80 90 100 200" Changeable="true" Visible="true" TextId="IDT_MODBUS_IDLE_TIME"/>
                    </ParameterRecordDataItem>
                </RecordDataList>
                <ModuleInfo>
                    <Name TextId="TOK_TextId_ControStatus"/>
                    <InfoText TextId="TOK_InfoTextId_ControlStatus"/>
                </ModuleInfo>
                <PROFIenergy ProfileVersion="V1.0"/>
            </VirtualSubmoduleItem>
        </VirtualSubmoduleList>
    </ModuleItem>
</ModuleList>

 

3.3.3、值列表:ValueList

        该部分包含了字段设备的单个参数具体值和关联文本之间的赋值。

 <!--示例1-->
<ValueList>
    <ValueItem ID="SubstitutionMode">
        <Assignments>
            <Assign TextId="Replacement value" Content="1"/>
            <Assign TextId="Last value" Content="0"/>
        </Assignments>
    </ValueItem>
</ValueList>  
 <!--示例2-->
<ValueList>
    <ValueItem ID="Modbus_Write_Mode">
        <Assignments>
            <Assign Content="0" TextId="Polling_Send"/>
            <Assign Content="1" TextId="Different_Send"/>
        </Assignments>
    </ValueItem>
</ValueList>

3.3.4、通道诊断列表:ChannelDiagList 

        该部分包含了通道的诊断信息,即通道的错误编号及其描述。

 

 3.3.5、单元诊断列表:UnitDiagTypeList

        该部分包含了该PROFINET I/O设备的诊断信息。

 

3.3.6、图形列表:GraphicsList

        该部分是GSD文件的图形列表,即在组态工具中显示的图形(图标)。

3.3.7、分类列表:CategoryList

        该部分包含了GSD文件的分类信息,比如DI、DQ、AI等模块的分类;

3.3.8、外部文本列表:ExternalTextList

附录1:分配ID前缀列表

 

参考资料:

  1. Profinet从站开发(1)- 初识ERTEC200P
  2. PROFINET工业以太网教程(16)-GSDML文件详解
  3. XSD文件详解
  4. Profinet GSD Checker: PN-IO设备的GSD文件xml语法检查器
  5. profinet协议开发文件
  6. GSDML / GSDX Specification for PROFINET v2.352
  7. 西门子GSDML文件用户手册
  8. 《PROFINET工业通信》[德] Manfred Popp著

注:原文链接

致谢:PROFINET的GSD文件描述 - 知乎 (zhihu.com) 

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值