目录
一、基础介绍:
二、文件命名:
三、文件结构:
1、根元素:ISO15745Profile
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"
规则头以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>
- MainFamily(主系列):可选项
Drives,Encoders,Gateway,I/O,Sensors
;
- 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前缀列表
参考资料:
- Profinet从站开发(1)- 初识ERTEC200P
- PROFINET工业以太网教程(16)-GSDML文件详解
- XSD文件详解
- Profinet GSD Checker: PN-IO设备的GSD文件xml语法检查器
- profinet协议开发文件
- GSDML / GSDX Specification for PROFINET v2.352
- 西门子GSDML文件用户手册
- 《PROFINET工业通信》[德] Manfred Popp著
注:原文链接
致谢:PROFINET的GSD文件描述 - 知乎 (zhihu.com)