<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to IO Drivers</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>Recent changes to IO Drivers</description><language>en</language><lastBuildDate>Sat, 20 Feb 2021 18:47:11 -0000</lastBuildDate><atom:link href="https://forge.codesys.com/forge/wiki/IO%20Drivers/feed" rel="self" type="application/rss+xml"></atom:link><item><title>IO Drivers modified by i-campbell</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -25,7 +25,7 @@
 That the device can be uniquely identified in the device repository on every computer in the world, we need to maintain a few IDs. Please register the ID, which you will be using in the [DeviceDatabase].

 * Device Type: Either use the matching one from the templates, or use XXXXXX.
-* VendorID: Use 0004, as this is reserved for all public domain drivers
+* VendorID: Use 0003, as this is reserved for all public domain drivers
 * DeviceID: Use a unique one, which you added to the [DeviceDatabase]
 * Version: You are free with that, but you should always increase it when you make changes to the device description

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">i-campbell</dc:creator><pubDate>Sat, 20 Feb 2021 18:47:11 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com030ae7818eb51091e6d95f44b94d8bbcd95b6ad3</guid></item><item><title>IO Drivers modified by Ingo</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -180,7 +180,7 @@

 A device can roughly hold two kinds of parameters:

-* configuration parameters, which are inportant to initialize the I/O system
+* configuration parameters, which are important to initialize the I/O system
 * I/O channels, which can be mapped to variables

 Both can be configured with the same structured datatypes.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ingo</dc:creator><pubDate>Tue, 05 Jun 2018 06:36:12 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com9076ac7295bb4580ba649b367c1461b399ca89d5</guid></item><item><title>IO Drivers modified by Ingo</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -178,7 +178,7 @@

 ## Parameter Set

-A device can rughly hold two kinds of parameters:
+A device can roughly hold two kinds of parameters:

 * configuration parameters, which are inportant to initialize the I/O system
 * I/O channels, which can be mapped to variables
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ingo</dc:creator><pubDate>Tue, 05 Jun 2018 06:35:14 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com74f32b33d633385fc0a20956a5b4cf490b19c464</guid></item><item><title>IO Drivers modified by Ingo</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -3,7 +3,7 @@
 [[include ref=IndexMain]]

-A very common way to integrate your own I/O drivers is to use an FB interface inside of a library. A much better way, and much more convenient from the usability is the integration in form of a real I/O driver. This abroach should always been choosen when you decide to share your driver with others.
+A very common way to integrate your own I/O drivers is to use an FB interface inside of a library. A much better way, and much more convenient from the usability is the integration in form of a real I/O driver. This approach should always been choosen when you decide to share your driver with others.

 To implement an I/O driver in CODESYS you need mainly two things:

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ingo</dc:creator><pubDate>Tue, 05 Jun 2018 06:33:54 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.comc8b3e17868ff56019bfd08ccaeb798673f30242a</guid></item><item><title>IO Drivers modified by codesys.com</title><link>https://forge.codesys.com/forge/wiki/IO%2520Drivers/</link><description>&lt;div class="markdown_content"&gt;&lt;div class="toc"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#device-description"&gt;Device Description&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#device-identification"&gt;Device identification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#connector"&gt;Connector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#interfaces"&gt;Interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#parameter-set"&gt;Parameter Set&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#basic-datatypes"&gt;Basic datatypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#structures"&gt;Structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#bit-channels"&gt;Bit Channels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
  
    &lt;div class="markdown_content"&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;General&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="" href="/forge/wiki/User%20Accounts/"&gt;User Accounts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="/forge/wiki/Project%20Maintenance/"&gt;Project Maintenance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../Landing%20Page"&gt;Landing Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../SCM%20Repositories"&gt;Source Code Repositories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../Downloads"&gt;Downloads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../Tickets"&gt;Tickets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../IO%20Drivers"&gt;I/O Drivers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../Contribution"&gt;Contribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HowTos&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="" href="../HowTo%20Project%20Look"&gt;Project Look&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../HowTo%20Project%20Structure"&gt;Project Structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../HowTo%20Project%20Rights"&gt;Project Rights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="" href="../HowTo%20Wiki%20Index"&gt;Wiki Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr/&gt;&lt;/div&gt;
  
&lt;/div&gt;


&lt;p&gt;A very common way to integrate your own I/O drivers is to use an FB interface inside of a library. A much better way, and much more convenient from the usability is the integration in form of a real I/O driver. This abroach should always been choosen when you decide to share your driver with others.&lt;/p&gt;
&lt;p&gt;To implement an I/O driver in CODESYS you need mainly two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A device description&lt;/li&gt;
&lt;li&gt;An FB, implementing the I/O driver interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the following you will find some general rules to follow while implementing your driver. Beside this guide, you should check out the different templates for different kinds of drivers to start from. Because in detail the implementation will be diffferent if you implement an SPI driver or you read a value from a sensor using a REST API.&lt;/p&gt;
&lt;p&gt;But independent of the kind of driver, which you plan to implement. If you are not routined in writing such software, it is a good idea to prove the access of the hardware directly in an application.&lt;/p&gt;
&lt;h1 id="device-description"&gt;Device Description&lt;/h1&gt;
&lt;p&gt;Every device, which you can add to your CODESYS project, is described in an XML format inside of a Device Description.&lt;/p&gt;
&lt;p&gt;For finetuning and to get a deeper understanding of the format, please check out the schema file. In the following we will just explain the basics to enable you to write your first description.&lt;/p&gt;
&lt;h2 id="device-identification"&gt;Device identification&lt;/h2&gt;
&lt;p&gt;That the device can be uniquely identified in the device repository on every computer in the world, we need to maintain a few IDs. Please register the ID, which you will be using in the &lt;span&gt;[DeviceDatabase]&lt;/span&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Device Type: Either use the matching one from the templates, or use XXXXXX.&lt;/li&gt;
&lt;li&gt;VendorID: Use 0004, as this is reserved for all public domain drivers&lt;/li&gt;
&lt;li&gt;DeviceID: Use a unique one, which you added to the &lt;span&gt;[DeviceDatabase]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Version: You are free with that, but you should always increase it when you make changes to the device description&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: The combination of all IDs, described above has to be globally unique. Official versions of a driver with the same IDs, but different content shall never exist.&lt;/p&gt;
&lt;h2 id="connector"&gt;Connector&lt;/h2&gt;
&lt;p&gt;A device or module, which you can add to the device tree in CODESYS contains at least one connector. This connector is used to attach the module to a parent device.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"8023"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"Common.PCI"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt; &lt;span class="na"&gt;explicit=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;connectorId=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt; &lt;span class="na"&gt;hostpath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;InterfaceName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:PCI"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;PCI-Bus&lt;span class="nt"&gt;&amp;lt;/InterfaceName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/Slot&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;moduletype: use 8000 + the DeviceID. This way you make sure, that you have no conflicts with other public domain drivers.&lt;/li&gt;
&lt;li&gt;interface: For submodules, like SPI, I2C, or similar, use the interface from the template. For all others, you can use Common.PCI. This interface can be easily attached to most PLCs.&lt;/li&gt;
&lt;li&gt;ConnectorID: simply enumerate the connectors within your modules. This ID is only used to specify the so called "host path"&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="interfaces"&gt;Interfaces&lt;/h2&gt;
&lt;p&gt;Interfaces are symbolic names to match compatible connectors, so to find compatible devices or modules. We have some different concepts to configure our device tree in CODESYS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Variable Connectors&lt;br/&gt;
You don't see anything in the device tree. But when you click on "Add Device" you get a list of all devices, which are providing an interface, that is compatible to the interfaces of the parent. The number of allowed devices which can be added to a variable connector can be varied.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"8023"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"OpenSource:Internal"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt; &lt;span class="na"&gt;explicit=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;connectorId=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;hostpath=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;InterfaceName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:internal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Internal&lt;span class="nt"&gt;&amp;lt;/InterfaceName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Var&lt;/span&gt; &lt;span class="na"&gt;max=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/Var&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Fix connectors&lt;br/&gt;
Fix connectors are very similar to Variable connectors, but the devices are added implicitely and can't be changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"8023"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"OpenSource:FixConnectorInterface"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt; &lt;span class="na"&gt;explicit=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;connectorId=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;hostpath=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;InterfaceName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:internal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Internal&lt;span class="nt"&gt;&amp;lt;/InterfaceName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Fixed&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- This is an example of a fixed module specified in the same file --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;LocalModuleId&amp;gt;&lt;/span&gt;8023&lt;span class="nt"&gt;&amp;lt;/LocalModuleId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- This is an example of a fixed module specified by DeviceIdentification. The defininition of this module is in another *.devdesc.xml --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;DeviceIdentification&lt;/span&gt; &lt;span class="na"&gt;deviceType=&lt;/span&gt;&lt;span class="s"&gt;"40107"&lt;/span&gt; &lt;span class="na"&gt;deviceId=&lt;/span&gt;&lt;span class="s"&gt;"0001 bcde"&lt;/span&gt; &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"3.5.9.0"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Fixed&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Slots&lt;br/&gt;
Slots are again similar to variable slots. But the user can see the slot in the device tree. Because every slot has a fix place in the tree, and because the user can plug and remove the devices, the specialty for the driver is, that there can be empty slots.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This was a huge preamble for an easy topic. But it was important that you get an idea of how the result will look like.&lt;/p&gt;
&lt;p&gt;Interfaces are easy. You define one interface per child connector and one for every parent connector. There are no fix restrictions for the interface names. But it is an unofficial rule, that they should be prefixed with a short or full name of the vendor.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;      &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.A"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"40101"&lt;/span&gt;
                 &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.B"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"40102"&lt;/span&gt;
                 &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"16"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
...
   &lt;span class="nt"&gt;&amp;lt;Modules&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;ModuleId&amp;gt;&lt;/span&gt;1701&lt;span class="nt"&gt;&amp;lt;/ModuleId&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;DeviceInfo&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Name1704"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Digital Input&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Desc1704"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Vendor&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:3S"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3S-Smart Software Solutions&lt;span class="nt"&gt;&amp;lt;/Vendor&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OrderNumber/&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/DeviceInfo&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.A"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"41101"&lt;/span&gt;
                    &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;HostParameterSet&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BIT"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;
                              &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:in1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;in1&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/HostParameterSet&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;ModuleId&amp;gt;&lt;/span&gt;1702&lt;span class="nt"&gt;&amp;lt;/ModuleId&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;DeviceInfo&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Name1705"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Digital Output&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Desc1705"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Vendor&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:3S"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3S-Smart Software Solutions&lt;span class="nt"&gt;&amp;lt;/Vendor&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OrderNumber/&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/DeviceInfo&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.A"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"41102"&lt;/span&gt;
                    &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;HostParameterSet&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BIT"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;
                              &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:in1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;in1&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/HostParameterSet&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;ModuleId&amp;gt;&lt;/span&gt;1703&lt;span class="nt"&gt;&amp;lt;/ModuleId&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;DeviceInfo&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Name1705"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Digital Output&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Desc1705"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Vendor&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:3S"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3S-Smart Software Solutions&lt;span class="nt"&gt;&amp;lt;/Vendor&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OrderNumber/&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/DeviceInfo&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.B"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"41103"&lt;/span&gt;
                    &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;HostParameterSet&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BIT"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;
                              &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:in1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;in1&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/HostParameterSet&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Module&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;ModuleId&amp;gt;&lt;/span&gt;1704&lt;span class="nt"&gt;&amp;lt;/ModuleId&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;DeviceInfo&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Name1706"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;PWM Output&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:Desc1706"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Vendor&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"localStrings:3S"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3S-Smart Software Solutions&lt;span class="nt"&gt;&amp;lt;/Vendor&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;OrderNumber/&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/DeviceInfo&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;Connector&lt;/span&gt; &lt;span class="na"&gt;ConnectorId=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt; &lt;span class="na"&gt;HostPath=&lt;/span&gt;&lt;span class="s"&gt;"-1"&lt;/span&gt; &lt;span class="na"&gt;interface=&lt;/span&gt;&lt;span class="s"&gt;"MyCompany.B"&lt;/span&gt; &lt;span class="na"&gt;moduleType=&lt;/span&gt;&lt;span class="s"&gt;"41104"&lt;/span&gt;
                    &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Slot&lt;/span&gt; &lt;span class="na"&gt;allowEmpty=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;count=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/Connector&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Module&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/Modules&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="parameter-set"&gt;Parameter Set&lt;/h2&gt;
&lt;p&gt;A device can rughly hold two kinds of parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuration parameters, which are inportant to initialize the I/O system&lt;/li&gt;
&lt;li&gt;I/O channels, which can be mapped to variables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both can be configured with the same structured datatypes.&lt;/p&gt;
&lt;p&gt;They can be located globally on device level, then they are called DeviceParameters. If they are part of the device that the user adds to the tree, then, they are called HostParameters and attached to one of its connectors.&lt;/p&gt;
&lt;p&gt;You can use virtually every datatype for a parameter, which can be used in IEC61131. This includes especially arrays and structures.&lt;br/&gt;
But you have to be aware that you need to define those datatypes consistently twice (in your driver library and your device description). There is no extra check. If they don't match between your device description and your code, it will just not work, crash, or whatever...&lt;/p&gt;
&lt;p&gt;Some examples...&lt;/p&gt;
&lt;h3 id="basic-datatypes"&gt;Basic datatypes&lt;/h3&gt;
&lt;p&gt;Basic datatypes don't need a declaration. They can be used with the namespace prefix "std". So "std:BOOL" is the equivalent of a BOOL datatype in IEC.&lt;/p&gt;
&lt;p&gt;DevDesc:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;        &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:DWORD"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"write"&lt;/span&gt; &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN.Desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Description&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3 id="structures"&gt;Structures&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;IEC:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;TYPE DUT :
STRUCT
    BYTE1 : BYTE;
    BYTE2 : BYTE;
    BYTE3 : BYTE;
    BYTE4 : BYTE;
END_STRUCT
END_TYPE
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;DevDesc:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;   &lt;span class="nt"&gt;&amp;lt;StructType&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Channel4Byte"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte0"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BYTE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte0&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte1"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BYTE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte1&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte2"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BYTE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte2&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte3"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BYTE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte3&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/StructType&amp;gt;&lt;/span&gt;
    ...
        &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Channel4Byte"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"write"&lt;/span&gt; &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN.Desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Description&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3 id="bit-channels"&gt;Bit Channels&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;IEC:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;TYPE DUT :
STRUCT
    BYTE1 : BYTE;
    BYTE2 : BYTE;
    BYTE3 : BYTE;
    BYTE4 : BYTE;
END_STRUCT
END_TYPE
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;DevDesc:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nt"&gt;&amp;lt;BitfieldType&lt;/span&gt; &lt;span class="na"&gt;basetype=&lt;/span&gt;&lt;span class="s"&gt;"std:BYTE"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Bitfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit0"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit0&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit1"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit1&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit2"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit2&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit3"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit3&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit4"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit4&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit5"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit5&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit6"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit6&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Bit7"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"std:BOOL"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield.Bit7"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bit7&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/BitfieldType&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;StructType&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Channel4Byte"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte0"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte0&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte1"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte1&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte2"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte2&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Component&lt;/span&gt; &lt;span class="na"&gt;identifier=&lt;/span&gt;&lt;span class="s"&gt;"Byte3"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Bitfield"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Default&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;VisibleName&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:Byte3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Byte3&lt;span class="nt"&gt;&amp;lt;/VisibleName&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/StructType&amp;gt;&lt;/span&gt;
    ...
        &lt;span class="nt"&gt;&amp;lt;Parameter&lt;/span&gt; &lt;span class="na"&gt;ParameterId=&lt;/span&gt;&lt;span class="s"&gt;"1000"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"local:Channel4Byte"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Attributes&lt;/span&gt; &lt;span class="na"&gt;channel=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="na"&gt;download=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;functional=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;offlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"write"&lt;/span&gt; &lt;span class="na"&gt;onlineaccess=&lt;/span&gt;&lt;span class="s"&gt;"readwrite"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Default&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/Default&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Name&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;Description&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"local:DWIN.Desc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;DWORD Input&lt;span class="nt"&gt;&amp;lt;/Description&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Parameter&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">codesys.com</dc:creator><pubDate>Thu, 04 Jan 2018 15:21:06 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.comdfdf1c7cdf2da3f2847654f5d95df3729eacbcb1</guid></item></channel></rss>