plcopen/tc6_xml_v201.xsd
author Edouard Tisserant <edouard@beremiz.fr>
Fri, 13 Sep 2024 14:26:55 +0200
changeset 4012 6337c9c2c379
parent 814 5743cbdff669
permissions -rw-r--r--
MQTT: add JSON payload corresponding to IEC Structured types

- uses https://github.com/cesanta/frozen
- frozen.c is added as a resulting c file in generat_C (fix toolchain_gcc.py as it was breaking dependency checking)
- structured types are converted to C #define, in turn generating json_scanf and json_printf statements
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:ppx="http://www.plcopen.org/xml/tc6_0201" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:ns1="http://www.plcopen.org/xml/tc6.xsd" targetNamespace="http://www.plcopen.org/xml/tc6_0201" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xsd:element name="project">
		<xsd:annotation>
			<xsd:documentation>The complete project</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="fileHeader">
					<xsd:complexType>
						<xsd:attribute name="companyName" type="xsd:string" use="required"/>
						<xsd:attribute name="companyURL" type="xsd:anyURI" use="optional"/>
						<xsd:attribute name="productName" type="xsd:string" use="required"/>
						<xsd:attribute name="productVersion" type="xsd:string" use="required"/>
						<xsd:attribute name="productRelease" type="xsd:string" use="optional"/>
						<xsd:attribute name="creationDateTime" type="xsd:dateTime" use="required"/>
						<xsd:attribute name="contentDescription" type="xsd:string" use="optional"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="contentHeader">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="Comment" type="xsd:string" minOccurs="0"/>
							<xsd:element name="coordinateInfo">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="pageSize" minOccurs="0">
											<xsd:complexType>
												<xsd:attribute name="x" type="xsd:decimal" use="required"/>
												<xsd:attribute name="y" type="xsd:decimal" use="required"/>
											</xsd:complexType>
										</xsd:element>
										<xsd:element name="fbd">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="scaling">
														<xsd:complexType>
															<xsd:attribute name="x" type="xsd:decimal" use="required"/>
															<xsd:attribute name="y" type="xsd:decimal" use="required"/>
														</xsd:complexType>
													</xsd:element>
												</xsd:sequence>
											</xsd:complexType>
										</xsd:element>
										<xsd:element name="ld">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="scaling">
														<xsd:complexType>
															<xsd:attribute name="x" type="xsd:decimal" use="required"/>
															<xsd:attribute name="y" type="xsd:decimal" use="required"/>
														</xsd:complexType>
													</xsd:element>
												</xsd:sequence>
											</xsd:complexType>
										</xsd:element>
										<xsd:element name="sfc">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="scaling">
														<xsd:complexType>
															<xsd:attribute name="x" type="xsd:decimal" use="required"/>
															<xsd:attribute name="y" type="xsd:decimal" use="required"/>
														</xsd:complexType>
													</xsd:element>
												</xsd:sequence>
											</xsd:complexType>
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
							<xsd:element name="addDataInfo" type="ppx:addDataInfo" minOccurs="0"/>
							<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						</xsd:sequence>
						<xsd:attribute name="name" type="xsd:string" use="required"/>
						<xsd:attribute name="version" type="xsd:string" use="optional"/>
						<xsd:attribute name="modificationDateTime" type="xsd:dateTime" use="optional"/>
						<xsd:attribute name="organization" type="xsd:string" use="optional"/>
						<xsd:attribute name="author" type="xsd:string" use="optional"/>
						<xsd:attribute name="language" type="xsd:language" use="optional">
							<xsd:annotation>
								<xsd:documentation>Documentation language of the project e.g. "en-US"</xsd:documentation>
							</xsd:annotation>
						</xsd:attribute>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="types">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="dataTypes">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="dataType" minOccurs="0" maxOccurs="unbounded">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="baseType" type="ppx:dataType"/>
													<xsd:element name="initialValue" type="ppx:value" minOccurs="0"/>
													<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
													<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
														<xsd:annotation>
															<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
														</xsd:annotation>
													</xsd:element>
												</xsd:sequence>
												<xsd:attribute name="name" type="xsd:string" use="required"/>
											</xsd:complexType>
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
							<xsd:element name="pous">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="pou" minOccurs="0" maxOccurs="unbounded">
											<xsd:complexType>
												<xsd:sequence>
													<xsd:element name="interface" minOccurs="0">
														<xsd:complexType>
															<xsd:sequence>
																<xsd:element name="returnType" type="ppx:dataType" minOccurs="0"/>
																<xsd:choice minOccurs="0" maxOccurs="unbounded">
																	<xsd:element name="localVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="tempVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="inputVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="outputVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="inOutVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="externalVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="globalVars">
																		<xsd:complexType>
																			<xsd:complexContent>
																				<xsd:extension base="ppx:varList"/>
																			</xsd:complexContent>
																		</xsd:complexType>
																	</xsd:element>
																	<xsd:element name="accessVars" type="ppx:varList"/>
																</xsd:choice>
																<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
																<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
																	<xsd:annotation>
																		<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
																	</xsd:annotation>
																</xsd:element>
															</xsd:sequence>
														</xsd:complexType>
													</xsd:element>
													<xsd:element name="actions" minOccurs="0">
														<xsd:complexType>
															<xsd:sequence>
																<xsd:element name="action" minOccurs="0" maxOccurs="unbounded">
																	<xsd:complexType>
																		<xsd:sequence>
																			<xsd:element name="body" type="ppx:body"/>
																			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
																			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
																				<xsd:annotation>
																					<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
																				</xsd:annotation>
																			</xsd:element>
																		</xsd:sequence>
																		<xsd:attribute name="name" type="xsd:string" use="required"/>
																		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
																	</xsd:complexType>
																</xsd:element>
															</xsd:sequence>
														</xsd:complexType>
													</xsd:element>
													<xsd:element name="transitions" minOccurs="0">
														<xsd:complexType>
															<xsd:sequence>
																<xsd:element name="transition" minOccurs="0" maxOccurs="unbounded">
																	<xsd:complexType>
																		<xsd:sequence>
																			<xsd:element name="body" type="ppx:body"/>
																			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
																			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
																				<xsd:annotation>
																					<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
																				</xsd:annotation>
																			</xsd:element>
																		</xsd:sequence>
																		<xsd:attribute name="name" type="xsd:string" use="required"/>
																		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
																	</xsd:complexType>
																</xsd:element>
															</xsd:sequence>
														</xsd:complexType>
													</xsd:element>
													<xsd:element name="body" type="ppx:body" minOccurs="0" maxOccurs="unbounded"/>
													<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
													<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
														<xsd:annotation>
															<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
														</xsd:annotation>
													</xsd:element>
												</xsd:sequence>
												<xsd:attribute name="name" type="xsd:string" use="required"/>
												<xsd:attribute name="pouType" type="ppx:pouType" use="required"/>
												<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
											</xsd:complexType>
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="instances">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="configurations">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="configuration" minOccurs="0" maxOccurs="unbounded">
											<xsd:complexType>
												<xsd:annotation>
													<xsd:documentation>Represents a group of resources and global variables</xsd:documentation>
												</xsd:annotation>
												<xsd:sequence>
													<xsd:element name="resource" minOccurs="0" maxOccurs="unbounded">
														<xsd:complexType>
															<xsd:annotation>
																<xsd:documentation>Represents a group of programs and tasks and global variables</xsd:documentation>
															</xsd:annotation>
															<xsd:sequence>
																<xsd:element name="task" minOccurs="0" maxOccurs="unbounded">
																	<xsd:complexType>
																		<xsd:annotation>
																			<xsd:documentation>Represents a periodic or triggered task</xsd:documentation>
																		</xsd:annotation>
																		<xsd:sequence>
																			<xsd:element name="pouInstance" type="ppx:pouInstance" minOccurs="0" maxOccurs="unbounded"/>
																			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
																			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
																				<xsd:annotation>
																					<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
																				</xsd:annotation>
																			</xsd:element>
																		</xsd:sequence>
																		<xsd:attribute name="name" type="xsd:string" use="required"/>
																		<xsd:attribute name="single" type="xsd:string" use="optional"/>
																		<xsd:attribute name="interval" type="xsd:string" use="optional">
																			<xsd:annotation>
																				<xsd:documentation>Vendor specific: Either a constant duration as defined in the IEC or variable name.</xsd:documentation>
																			</xsd:annotation>
																		</xsd:attribute>
																		<xsd:attribute name="priority" use="required">
																			<xsd:simpleType>
																				<xsd:restriction base="xsd:integer">
																					<xsd:minInclusive value="0"/>
																					<xsd:maxInclusive value="65535"/>
																				</xsd:restriction>
																			</xsd:simpleType>
																		</xsd:attribute>
																		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
																	</xsd:complexType>
																</xsd:element>
																<xsd:element name="globalVars" type="ppx:varList" minOccurs="0" maxOccurs="unbounded"/>
																<xsd:element name="pouInstance" type="ppx:pouInstance" minOccurs="0" maxOccurs="unbounded"/>
																<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
																<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
																	<xsd:annotation>
																		<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
																	</xsd:annotation>
																</xsd:element>
															</xsd:sequence>
															<xsd:attribute name="name" type="xsd:string" use="required"/>
															<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
														</xsd:complexType>
													</xsd:element>
													<xsd:element name="globalVars" type="ppx:varList" minOccurs="0" maxOccurs="unbounded"/>
													<xsd:element name="accessVars" type="ppx:varListAccess" minOccurs="0"/>
													<xsd:element name="configVars" type="ppx:varListConfig" minOccurs="0"/>
													<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
													<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
														<xsd:annotation>
															<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
														</xsd:annotation>
													</xsd:element>
												</xsd:sequence>
												<xsd:attribute name="name" type="xsd:string" use="required"/>
												<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
											</xsd:complexType>
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
				<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
					<xsd:annotation>
						<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="dataType">
		<xsd:annotation>
			<xsd:documentation>A generic data type</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:group ref="ppx:elementaryTypes"/>
			<xsd:group ref="ppx:derivedTypes"/>
			<xsd:group ref="ppx:extended"/>
		</xsd:choice>
	</xsd:complexType>
	<xsd:complexType name="rangeSigned">
		<xsd:annotation>
			<xsd:documentation>Defines a range with signed bounds</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="lower" type="xsd:string" use="required"/>
		<xsd:attribute name="upper" type="xsd:string" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="rangeUnsigned">
		<xsd:annotation>
			<xsd:documentation>Defines a range with unsigned bounds</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="lower" type="xsd:string" use="required"/>
		<xsd:attribute name="upper" type="xsd:string" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="value">
		<xsd:annotation>
			<xsd:documentation>A generic value</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="simpleValue">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Value that can be represented as a single token string </xsd:documentation>
					</xsd:annotation>
					<xsd:attribute name="value" type="xsd:string" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="arrayValue">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Array value consisting of a list of occurrances - value pairs</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence minOccurs="0" maxOccurs="unbounded">
						<xsd:element name="value">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:value">
										<xsd:attribute name="repetitionValue" type="xsd:string" use="optional" default="1"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="structValue">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Struct value consisting of a list of member - value pairs</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence minOccurs="0" maxOccurs="unbounded">
						<xsd:element name="value">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:value">
										<xsd:attribute name="member" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:complexType>
	<xsd:complexType name="body">
		<xsd:annotation>
			<xsd:documentation>Implementation part of a POU, action or transistion</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:choice>
				<xsd:element name="IL" type="ppx:formattedText"/>
				<xsd:element name="ST" type="ppx:formattedText"/>
				<xsd:element name="FBD">
					<xsd:complexType>
						<xsd:choice minOccurs="0" maxOccurs="unbounded">
							<xsd:group ref="ppx:commonObjects"/>
							<xsd:group ref="ppx:fbdObjects"/>
						</xsd:choice>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="LD">
					<xsd:complexType>
						<xsd:choice minOccurs="0" maxOccurs="unbounded">
							<xsd:group ref="ppx:commonObjects"/>
							<xsd:group ref="ppx:fbdObjects"/>
							<xsd:group ref="ppx:ldObjects"/>
						</xsd:choice>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="SFC">
					<xsd:complexType>
						<xsd:choice minOccurs="0" maxOccurs="unbounded">
							<xsd:group ref="ppx:commonObjects"/>
							<xsd:group ref="ppx:fbdObjects"/>
							<xsd:group ref="ppx:ldObjects"/>
							<xsd:group ref="ppx:sfcObjects"/>
						</xsd:choice>
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Additional userspecific information to the element</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="WorksheetName" type="xsd:string" use="optional"/>
		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="varList">
		<xsd:annotation>
			<xsd:documentation>List of variable declarations that share the same memory attributes (CONSTANT, RETAIN, NON_RETAIN, PERSISTENT)</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="ppx:varListPlain">
				<xsd:attribute name="name" type="xsd:string" use="optional"/>
				<xsd:attribute name="constant" type="xsd:boolean" use="optional" default="false"/>
				<xsd:attribute name="retain" type="xsd:boolean" use="optional" default="false"/>
				<xsd:attribute name="nonretain" type="xsd:boolean" use="optional" default="false"/>
				<xsd:attribute name="persistent" type="xsd:boolean" use="optional" default="false"/>
				<xsd:attribute name="nonpersistent" type="xsd:boolean" use="optional" default="false"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="varListPlain">
		<xsd:annotation>
			<xsd:documentation>List of variable declarations without attributes</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Declaration of a variable</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="type" type="ppx:dataType"/>
						<xsd:element name="initialValue" type="ppx:value" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:string" use="required"/>
					<xsd:attribute name="address" type="xsd:string" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="varListAccess">
		<xsd:annotation>
			<xsd:documentation>List of access variable declarations</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="accessVariable" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Declaration of an access variable</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="type" type="ppx:dataType"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="alias" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>Name that is visible to the communication partner</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="instancePathAndName" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>Variable name including instance path inside the configuration</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="direction" type="ppx:accessType" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="varListConfig">
		<xsd:annotation>
			<xsd:documentation>List of VAR_CONFIG variables</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="configVariable" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Declaration of an access variable</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="type" type="ppx:dataType"/>
						<xsd:element name="initialValue" type="ppx:value" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="instancePathAndName" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>Variable name including instance path</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="address" type="xsd:string" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="position">
		<xsd:annotation>
			<xsd:documentation>Defines a graphical position in X, Y coordinates</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="x" type="xsd:decimal" use="required"/>
		<xsd:attribute name="y" type="xsd:decimal" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="connection">
		<xsd:annotation>
			<xsd:documentation>Describes a connection between the consumer element (eg. input variable of a function block) and the producer element (eg. output variable of a function block). It may contain a list of positions that describes the path of the connection.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="position" type="ppx:position" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>All positions of the directed connection path. If any positions are given, the list has to contain the first (input pin of the consumer element) as well as the last (output pin of the producer element).</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
		<xsd:attribute name="refLocalId" type="xsd:unsignedLong" use="required">
			<xsd:annotation>
				<xsd:documentation>Identifies the element the connection starts from.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="formalParameter" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation>If present:
	  This attribute denotes the name of the VAR_OUTPUT / VAR_IN_OUTparameter of the pou block that is the start of the connection.
	  If not present:
	  If the refLocalId attribute refers to a pou block, the start of the connection is the first output of this block, which is not ENO.
	  If the refLocalId attribute refers to any other element type, the start of the connection is the elements single native output. </xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="connectionPointIn">
		<xsd:annotation>
			<xsd:documentation>Defines a connection point on the consumer side</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="relPosition" type="ppx:position" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Relative position of the connection pin. Origin is the anchor position of the block.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:choice minOccurs="0">
				<xsd:element name="connection" type="ppx:connection" maxOccurs="unbounded"/>
				<xsd:element name="expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>The operand is a valid iec variable e.g. avar[0] or an iec expression or multiple token text e.g. a + b (*sum*). An iec 61131-3 parser has to be used to extract variable information.</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="connectionPointOut">
		<xsd:annotation>
			<xsd:documentation>Defines a connection point on the producer side</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="relPosition" type="ppx:position" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Relative position of the connection pin. Origin is the anchor position of the block.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="expression" type="xsd:string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The operand is a valid iec variable e.g. avar[0].</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="pouInstance">
		<xsd:annotation>
			<xsd:documentation>Represents a program or function block instance either running with or without a task</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
			<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
		<xsd:attribute name="typeName" type="xsd:string" use="required"/>
		<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="formattedText">
		<xsd:annotation>
			<xsd:documentation>Formatted text according to parts of XHTML 1.1</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:any namespace="http://www.w3.org/1999/xhtml" processContents="lax"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="addData">
		<xsd:annotation>
			<xsd:documentation>Application specific data defined in external schemata </xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="data" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:any namespace="##any" processContents="lax"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:anyURI" use="required">
						<xsd:annotation>
							<xsd:documentation>Uniquely identifies the additional data element.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="handleUnknown" use="required">
						<xsd:annotation>
							<xsd:documentation>Recommended processor handling for unknown data elements.
Specifies if the processor should try to preserve the additional data element, dismiss the element (e.g. because the data is invalid if not updated correctly) or use the processors default behaviour for unknown data.</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:restriction base="xsd:NMTOKEN">
								<xsd:enumeration value="preserve"/>
								<xsd:enumeration value="discard"/>
								<xsd:enumeration value="implementation"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="addDataInfo">
		<xsd:annotation>
			<xsd:documentation>List of additional data elements used in the document with description</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="info" minOccurs="0" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="description" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:anyURI" use="required">
						<xsd:annotation>
							<xsd:documentation>Unique name of the additional data element.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="version" type="xsd:decimal">
						<xsd:annotation>
							<xsd:documentation>Version of additional data, eg. schema version.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="vendor" type="xsd:anyURI" use="required">
						<xsd:annotation>
							<xsd:documentation>Vendor responsible for the definition of the additional data element.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:group name="elementaryTypes">
		<xsd:annotation>
			<xsd:documentation>Collection of elementary IEC 61131-3 datatypes</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="BOOL"/>
			<xsd:element name="BYTE"/>
			<xsd:element name="WORD"/>
			<xsd:element name="DWORD"/>
			<xsd:element name="LWORD"/>
			<xsd:element name="SINT"/>
			<xsd:element name="INT"/>
			<xsd:element name="DINT"/>
			<xsd:element name="LINT"/>
			<xsd:element name="USINT"/>
			<xsd:element name="UINT"/>
			<xsd:element name="UDINT"/>
			<xsd:element name="ULINT"/>
			<xsd:element name="REAL"/>
			<xsd:element name="LREAL"/>
			<xsd:element name="TIME"/>
			<xsd:element name="DATE"/>
			<xsd:element name="DT"/>
			<xsd:element name="TOD"/>
			<xsd:element name="string">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>The single byte character string type</xsd:documentation>
					</xsd:annotation>
					<xsd:attribute name="length" type="xsd:string" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="wstring">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>The wide character (WORD) string type</xsd:documentation>
					</xsd:annotation>
					<xsd:attribute name="length" type="xsd:string" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="ANY"/>
			<xsd:element name="ANY_DERIVED"/>
			<xsd:element name="ANY_ELEMENTARY"/>
			<xsd:element name="ANY_MAGNITUDE"/>
			<xsd:element name="ANY_NUM"/>
			<xsd:element name="ANY_REAL"/>
			<xsd:element name="ANY_INT"/>
			<xsd:element name="ANY_BIT"/>
			<xsd:element name="ANY_STRING"/>
			<xsd:element name="ANY_DATE"/>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="derivedTypes">
		<xsd:annotation>
			<xsd:documentation>Collection of derived IEC 61131-3 datatypes</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="array">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="dimension" type="ppx:rangeSigned" maxOccurs="unbounded"/>
						<xsd:element name="baseType" type="ppx:dataType"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="derived">
				<xsd:annotation>
					<xsd:documentation>Reference to a user defined datatype or POU. Variable declarations use this type to declare e.g. function block instances.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>The user defined alias type</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:string" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="enum">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="values">
							<xsd:complexType>
								<xsd:sequence maxOccurs="unbounded">
									<xsd:element name="value">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>An enumeration value used to build up enumeration types</xsd:documentation>
											</xsd:annotation>
											<xsd:attribute name="name" type="xsd:string" use="required"/>
											<xsd:attribute name="value" type="xsd:string" use="optional"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="baseType" type="ppx:dataType" minOccurs="0"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="struct" type="ppx:varListPlain"/>
			<xsd:element name="subrangeSigned">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="range" type="ppx:rangeSigned"/>
						<xsd:element name="baseType" type="ppx:dataType"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="subrangeUnsigned">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="range" type="ppx:rangeUnsigned"/>
						<xsd:element name="baseType" type="ppx:dataType"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="extended">
		<xsd:annotation>
			<xsd:documentation>Collection of datatypes not defined in IEC 61131-3</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="pointer">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="baseType" type="ppx:dataType"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="commonObjects">
		<xsd:annotation>
			<xsd:documentation>Collection of objects which have no direct iec scope and can be used in any graphical body.</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="comment">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="content" type="ppx:formattedText"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="required"/>
					<xsd:attribute name="width" type="xsd:decimal" use="required"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="error">
				<xsd:complexType mixed="false">
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a conversion error. Used to keep information which can not be interpreted by the importing system</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="content" type="ppx:formattedText"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="required"/>
					<xsd:attribute name="width" type="xsd:decimal" use="required"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="connector">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable, literal or expression used as r-value</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>The operand is a valid iec variable e.g. avar[0]</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="continuation">
				<xsd:annotation>
					<xsd:documentation>Counterpart of the connector element</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable, literal or expression used as r-value</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="name" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>The operand is a valid iec variable e.g. avar[0]</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="actionBlock">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="action" minOccurs="0" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:annotation>
									<xsd:documentation>Association of an action with qualifier</xsd:documentation>
								</xsd:annotation>
								<xsd:sequence>
									<xsd:element name="relPosition" type="ppx:position">
										<xsd:annotation>
											<xsd:documentation>Relative position of the action. Origin is the anchor position of the action block.</xsd:documentation>
										</xsd:annotation>
									</xsd:element>
									<xsd:element name="reference" minOccurs="0">
										<xsd:annotation>
											<xsd:documentation>Name of an action or boolean variable.</xsd:documentation>
										</xsd:annotation>
										<xsd:complexType>
											<xsd:attribute name="name" type="xsd:string" use="required"/>
										</xsd:complexType>
									</xsd:element>
									<xsd:element name="inline" type="ppx:body" minOccurs="0">
										<xsd:annotation>
											<xsd:documentation>Inline implementation of an action body.</xsd:documentation>
										</xsd:annotation>
									</xsd:element>
									<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
									<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
									<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
								</xsd:sequence>
								<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
								<xsd:attribute name="qualifier" use="optional" default="N">
									<xsd:simpleType>
										<xsd:restriction base="xsd:NMTOKEN">
											<xsd:enumeration value="P1"/>
											<xsd:enumeration value="N"/>
											<xsd:enumeration value="P0"/>
											<xsd:enumeration value="R"/>
											<xsd:enumeration value="S"/>
											<xsd:enumeration value="L"/>
											<xsd:enumeration value="D"/>
											<xsd:enumeration value="P"/>
											<xsd:enumeration value="DS"/>
											<xsd:enumeration value="DL"/>
											<xsd:enumeration value="SD"/>
											<xsd:enumeration value="SL"/>
										</xsd:restriction>
									</xsd:simpleType>
								</xsd:attribute>
								<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
								<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
								<xsd:attribute name="duration" type="xsd:string" use="optional"/>
								<xsd:attribute name="indicator" type="xsd:string" use="optional"/>
								<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
									<xsd:annotation>
										<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
									</xsd:annotation>
								</xsd:attribute>
								<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="vendorElement">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a call statement</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position">
							<xsd:annotation>
								<xsd:documentation>Anchor position of the box. Top left corner excluding the instance name.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="alternativeText" type="ppx:formattedText">
							<xsd:annotation>
								<xsd:documentation>An alternative text to be displayed in generic representation of unknown elements.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="inputVariables" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>The list of used input variables (consumers)</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes an inputVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointIn" type="ppx:connectionPointIn"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="inOutVariables" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>The list of used inOut variables</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes a inOutVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
												<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="outputVariables" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>The list of used output variables (producers)</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes a outputVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData">
							<xsd:annotation>
								<xsd:documentation>Additional, vendor specific data for the element. Also defines the vendor specific meaning of the element.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="fbdObjects">
		<xsd:annotation>
			<xsd:documentation>Collection of objects which are defined in fbd. They can be used in all graphical bodies.</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="block">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a call statement</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position">
							<xsd:annotation>
								<xsd:documentation>Anchor position of the box. Top left corner excluding the instance name.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="inputVariables">
							<xsd:annotation>
								<xsd:documentation>The list of used input variables (consumers)</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes an inputVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointIn" type="ppx:connectionPointIn"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="inOutVariables">
							<xsd:annotation>
								<xsd:documentation>The list of used inOut variables</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes a inOutVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
												<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="outputVariables">
							<xsd:annotation>
								<xsd:documentation>The list of used output variables (producers)</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
										<xsd:complexType>
											<xsd:annotation>
												<xsd:documentation>Describes a outputVariable of a Function or a FunctionBlock</xsd:documentation>
											</xsd:annotation>
											<xsd:sequence>
												<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
												<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
											</xsd:sequence>
											<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
											<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
											<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
											<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
											<xsd:attribute name="hidden" type="xsd:boolean" use="optional" default="false"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="typeName" type="xsd:string" use="required"/>
					<xsd:attribute name="instanceName" type="xsd:string" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="inVariable">
				<xsd:annotation>
					<xsd:documentation>Expression used as producer</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable, literal or expression used as r-value</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="expression" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>The operand is a valid iec variable e.g. avar[0].</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="outVariable">
				<xsd:annotation>
					<xsd:documentation>Expression used as consumer</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable or expression used as l-value</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="expression" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>The operand is a valid iec variable e.g. avar[0].</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="inOutVariable">
				<xsd:annotation>
					<xsd:documentation>Expression used as producer and consumer</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable which can be used as l-value and r-value at the same time</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="expression" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>The operand is a valid iec variable e.g. avar[0].</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="negatedIn" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edgeIn" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storageIn" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="negatedOut" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edgeOut" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storageOut" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="label">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a jump label</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="label" type="xsd:string" use="required"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="jump">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a jump statement</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="label" type="xsd:string" use="required"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="return">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing areturn statement</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="ldObjects">
		<xsd:annotation>
			<xsd:documentation>Collection of objects which are defined in ld and are an extension to fbd. They can be used in ld and sfc bodies</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="leftPowerRail">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a left powerrail</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointOut" minOccurs="0" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointOut">
										<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="rightPowerRail">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a right powerrail</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0" maxOccurs="unbounded"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="coil">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a boolean variable which can be used as l-value and r-value at the same time</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="variable" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>The operand is a valid boolean  iec variable e.g. avar[0]</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="contact">
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Describes a graphical object representing a variable which can be used as l-value and r-value at the same time</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="variable" type="xsd:string">
							<xsd:annotation>
								<xsd:documentation>The operand is a valid boolean iec variable e.g. avar[0]</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="edge" type="ppx:edgeModifierType" use="optional" default="none"/>
					<xsd:attribute name="storage" type="ppx:storageModifierType" use="optional" default="none"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="sfcObjects">
		<xsd:annotation>
			<xsd:documentation>Collection of objects which are defined in sfc. They can only be used in sfc bodies</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="step">
				<xsd:annotation>
					<xsd:documentation>A single step in a SFC Sequence. Actions are associated with a step by using an actionBlock element with a connection to the step element</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:annotation>
						<xsd:documentation>Contains actions</xsd:documentation>
					</xsd:annotation>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" minOccurs="0">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointOut">
										<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="connectionPointOutAction" minOccurs="0">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointOut">
										<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="name" type="xsd:string" use="required"/>
					<xsd:attribute name="initialStep" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="macroStep">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="body" type="ppx:body" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="name" type="xsd:string" use="optional"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="jumpStep">
				<xsd:annotation>
					<xsd:documentation>Jump to a step, macro step or simultaneous divergence. Acts like a step. Predecessor should be a transition.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="targetName" type="xsd:string" use="required"/>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="transition">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="condition" minOccurs="0">
							<xsd:complexType>
								<xsd:choice>
									<xsd:element name="reference">
										<xsd:complexType>
											<xsd:attribute name="name" type="xsd:string" use="required"/>
										</xsd:complexType>
									</xsd:element>
									<xsd:element name="connectionPointIn" type="ppx:connectionPointIn"/>
									<xsd:element name="inline">
										<xsd:complexType>
											<xsd:complexContent>
												<xsd:extension base="ppx:body">
													<xsd:attribute name="name" type="xsd:string" use="required"/>
												</xsd:extension>
											</xsd:complexContent>
										</xsd:complexType>
									</xsd:element>
								</xsd:choice>
								<xsd:attribute name="negated" type="xsd:boolean" use="optional" default="false"/>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="priority" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>The priority of a transition is evaluated, if the transition is connected to a selectionDivergence element.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="executionOrderId" type="xsd:unsignedLong" use="optional">
						<xsd:annotation>
							<xsd:documentation>Used to identify the order of execution. Also used to identify one special block if there are several blocks with the same name.</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="selectionDivergence">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" minOccurs="0" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointOut">
										<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="selectionConvergence">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" minOccurs="0" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointIn"/>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="simultaneousDivergence">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0"/>
						<xsd:element name="connectionPointOut" minOccurs="0" maxOccurs="unbounded">
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="ppx:connectionPointOut">
										<xsd:attribute name="formalParameter" type="xsd:string" use="required"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="name" type="xsd:string" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="simultaneousConvergence">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="position" type="ppx:position"/>
						<xsd:element name="connectionPointIn" type="ppx:connectionPointIn" minOccurs="0" maxOccurs="unbounded"/>
						<xsd:element name="connectionPointOut" type="ppx:connectionPointOut" minOccurs="0"/>
						<xsd:element name="addData" type="ppx:addData" minOccurs="0"/>
						<xsd:element name="documentation" type="ppx:formattedText" minOccurs="0"/>
					</xsd:sequence>
					<xsd:attribute name="localId" type="xsd:unsignedLong" use="required"/>
					<xsd:attribute name="height" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="width" type="xsd:decimal" use="optional"/>
					<xsd:attribute name="globalId" type="xsd:ID" use="optional"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:simpleType name="edgeModifierType">
		<xsd:annotation>
			<xsd:documentation>Defines the edge detection behaviour of a variable</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="none"/>
			<xsd:enumeration value="falling"/>
			<xsd:enumeration value="rising"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="storageModifierType">
		<xsd:annotation>
			<xsd:documentation>Defines the storage mode (S/R) behaviour of a variable</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="none"/>
			<xsd:enumeration value="set"/>
			<xsd:enumeration value="reset"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="accessType">
		<xsd:annotation>
			<xsd:documentation>Defines the different access types to an accessVariable</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:NMTOKEN">
			<xsd:enumeration value="readOnly"/>
			<xsd:enumeration value="readWrite"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="pouType">
		<xsd:annotation>
			<xsd:documentation>Defines the different types of a POU</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:NMTOKEN">
			<xsd:enumeration value="function"/>
			<xsd:enumeration value="functionBlock"/>
			<xsd:enumeration value="program"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>