﻿<?xml version="1.0" encoding="utf-8"?>
<DeviceDescription xmlns="http://www.3s-software.com/schemas/DeviceDescription-1.0.xsd" xmlns:ts="http://www.3s-software.com/schemas/TargetSettings-0.1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Types namespace="localTypes">
    <EnumType basetype="std:BYTE" name="FunctionCodeType">
      <Enum identifier="Func01">
        <Value>1</Value>
        <VisibleName name="local:Func01">Read Coils(1)</VisibleName>
      </Enum>
	  <Enum identifier="Func02">
        <Value>2</Value>
        <VisibleName name="local:Func02">Read Discrete Inputs(2)</VisibleName>
      </Enum>
	  <Enum identifier="Func03">
        <Value>3</Value>
        <VisibleName name="local:Func03">Read Holding Registers(3)</VisibleName>
      </Enum>
	  <Enum identifier="Func04">
        <Value>4</Value>
        <VisibleName name="local:Func04">Read Input Registers(4)</VisibleName>
      </Enum>
	  <!--
	  <Enum identifier="Func05">
        <Value>5</Value>
        <VisibleName name="local:Func05">Write Single Coil(5)</VisibleName>
      </Enum>
	  <Enum identifier="Func06">
        <Value>6</Value>
        <VisibleName name="local:Func06">Write Single Register(6)</VisibleName>
      </Enum>
	  <Enum identifier="Func15">
        <Value>15</Value>
        <VisibleName name="local:Func15">Write Multiple Coils(15)</VisibleName>
      </Enum>
	  <Enum identifier="Func16">
        <Value>16</Value>
        <VisibleName name="local:Func16">Write Multiple Registers(16)</VisibleName>
      </Enum>
	  -->
    </EnumType>
	<EnumType basetype="std:BOOL" name="TriggerType">
      <Enum identifier="Cycle">
        <Value>TRUE</Value>
        <VisibleName name="local:Cycle">Cycle</VisibleName>
      </Enum>
      <Enum identifier="RisingEdge">
        <Value>FALSE</Value>
        <VisibleName name="local:RisingEdge">RisingEdge</VisibleName>
      </Enum>
    </EnumType> 
	
	<BitfieldType basetype="std:WORD" name="WORD_Bit">
	  <Component identifier="Bit0" type="std:BOOL">
	    <Default />
        <VisibleName name="local:WORD_Bit.Bit0">Bit0</VisibleName>
	  </Component>
	  <Component identifier="Bit1" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit1">Bit1</VisibleName>
	  </Component>
	  <Component identifier="Bit2" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit2">Bit2</VisibleName>
      </Component>
	  <Component identifier="Bit3" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit3">Bit3</VisibleName>
	  </Component>
      <Component identifier="Bit4" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit4">Bit4</VisibleName>
	  </Component>
	  <Component identifier="Bit5" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit5">Bit5</VisibleName>
	  </Component>
	  <Component identifier="Bit6" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit6">Bit6</VisibleName>
	  </Component>
	  <Component identifier="Bit7" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit7">Bit7</VisibleName>
	  </Component>
	  <Component identifier="Bit8" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit8">Bit8</VisibleName>
	  </Component>
	  <Component identifier="Bit9" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit9">Bit9</VisibleName>
	  </Component>
	  <Component identifier="Bit10" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit10">Bit10</VisibleName>
	  </Component>
	  <Component identifier="Bit11" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit11">Bit11</VisibleName>
	  </Component>
	  <Component identifier="Bit12" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit12">Bit12</VisibleName>
	  </Component>
	  <Component identifier="Bit13" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit13">Bit13</VisibleName>
	  </Component>
	  <Component identifier="Bit14" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit14">Bit14</VisibleName>
	  </Component>
	  <Component identifier="Bit15" type="std:BOOL">
	    <Default />
	    <VisibleName name="local:WORD_Bit.Bit15">Bit15</VisibleName>
	  </Component>
   </BitfieldType>
   
    <StructType name="MAP_WORD">
      <Component identifier="Word0" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word0">Word0</VisibleName>
	  </Component>
	  <Component identifier="Word1" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word1">Word1</VisibleName>
	  </Component>
	  <Component identifier="Word2" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word2">Word2</VisibleName>
	  </Component>
	  <Component identifier="Word3" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word3">Word3</VisibleName>
	  </Component>
	  <Component identifier="Word4" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word4">Word4</VisibleName>
	  </Component>
	  
	  <Component identifier="Word5" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word5">Word5</VisibleName>
	  </Component>
	  <Component identifier="Word6" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word6">Word6</VisibleName>
	  </Component>
	  <Component identifier="Word7" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word7">Word7</VisibleName>
	  </Component>
	  <Component identifier="Word8" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word8">Word8</VisibleName>
	  </Component>
	  <Component identifier="Word9" type="localTypes:WORD_Bit">
         <Default />
		 <VisibleName name="local:WORD_Bit.Word9">Word9</VisibleName>
	  </Component>
	  
    </StructType> 
	
	<RangeType basetype="std:WORD" name="CycleTimeType"> 
	  <Min>10</Min>
	  <Max>65535</Max>
	  <Default>100</Default>
	</RangeType>
	
  </Types> 

  <Strings namespace="local">
    <Language lang="en">
      <String identifier="ModelName">ModbusSlaveReadChannel</String>  
      <String identifier="DeviceDescription"></String>
      <String identifier="VendorName">HCFA</String>
      <String identifier="typedescription">Modbus RTU slave read channel</String>
    </Language>
  </Strings>
  
  <Device hideInCatalogue="false">  
    <DeviceIdentification>
      <Type>32832</Type>
      <Id>16c7 0001</Id>  
      <Version>1.0.0.0</Version>   
    </DeviceIdentification>
    <DeviceInfo>
      <Name name="local:ModelName">ModbusSlaveReadChannel</Name>  
      <Description name="local:DeviceDescription">Modbus slave read channel for communication</Description>
      <Vendor name="local:VendorName">HCFA</Vendor>
      <OrderNumber>-</OrderNumber>  	 
    </DeviceInfo>
	
    <!--Child Connector Description,child connectors should always be defined as slot and the slot count must be 1--> 	  
    <Connector connectorId="1" moduleType="32831" interface="Local.MBRTUSlave" role="child" explicit="false" hostpath="-1">
      <InterfaceName name="local:MBRTUSlave">ModbusReadChannel</InterfaceName>
      <Slot count="1" allowEmpty="false"></Slot>  
	  <DriverInfo needsBusCycle="true"></DriverInfo>
	  <HostParameterSet>
	    <Parameter ParameterId="41200" type="localTypes:FunctionCodeType">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>1</Default>
          <Name name="local:Parameter.FunctionCode">FunctionCode</Name>
          <Description name="local:Parameter.FunctionCode">Function code of modbus slave read channel</Description>
        </Parameter>
		
		<Parameter ParameterId="41201" type="std:WORD">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>0</Default>
          <Name name="local:Parameter.addr">addr</Name>
          <Description name="local:Parameter.addr">Read address of the function code</Description>
        </Parameter>
		
		<Parameter ParameterId="41202" type="std:WORD">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>0</Default>
          <Name name="local:Parameter.length">length</Name>
          <Description name="local:Parameter.length">Read length of the function code</Description>
        </Parameter>
		
	    <Parameter ParameterId="41203" type="localTypes:TriggerType">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>TRUE</Default>
          <Name name="local:Parameter.Trigger">Trigger</Name>
          <Description name="local:Parameter.Trigger">Trigger the communication</Description>
        </Parameter>
		
		<Parameter ParameterId="41204" type="localTypes:CycleTimeType">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>100</Default>
          <Name name="local:Parameter.CycleTime">CycleTime</Name>
		  <Unit name="local:Parameter.CycleTime">ms</Unit>
          <Description name="local:Parameter.CycleTime">only used when the cyclical trigger</Description>
        </Parameter>	
		
		<Parameter ParameterId="41205" type="std:BYTE">
          <Attributes offlineaccess="readwrite" onlineaccess="read" download="true" functional="false" />
          <Default>1</Default>
          <Name name="local:Parameter.RetryTimes">RetryTimes</Name>
          <Description name="local:Parameter.RetryTimes">number of retries when communication failed</Description>
        </Parameter>
		
		<!--I/O maping--> 
		<Parameter ParameterId="41206" type="std:BOOL">
          <Attributes channel="output" offlineaccess="readwrite" onlineaccess="readwrite" download="true" functional="false" />
          <Default>FALSE</Default>
          <Name name="local:Parameter.TriggerVar">TriggerVar</Name>
          <Description name="local:Parameter.TriggerVar">only used when the rising edge trigger</Description>
        </Parameter>
		
		<Parameter ParameterId="41207" type="localTypes:MAP_WORD">  
          <Attributes channel="input" offlineaccess="readwrite" onlineaccess="readwrite" download="true" functional="false" />
          <Default>0</Default>
          <Name name="local:output">input</Name>
        </Parameter>
		
	  </HostParameterSet>
    </Connector> 	
  </Device>
 
</DeviceDescription>
