ModbusIP Master TLM
  SoftPLC    Font size:      

Appendix A

Appendix A: MODBUS.XML DTD

The XML grammar supported by the MODBUS.XML configuration file is given in the following modbusIP.dtd file. The latest version of this file is kept within the topdoc.jar file, and is named modbusIP.dtd:

<?xml version='1.0' encoding='UTF-8'?>
<!--
    DTD for a ModbusTLM

?  Question Mark Optional (zero or one)
*  Asterisk      Zero or more
+  Plus Sign     One or more
-->

<!ELEMENT ModbusTLM (TCPServer|UDPServer)*>
<!ELEMENT TCPServer ( Slave+)>
<!ELEMENT UDPServer ( Slave+)>
<!ELEMENT Slave (ReadInputDiscretes|ReadInputRegisters|ReadMultipleRegisters|
        ReadCoils|WriteSingleRegister|WriteMultipleRegisters| 
        MaskWriteRegister|ForceMultipleCoils|WriteCoil|ReadWriteRegisters)+>
<!ELEMENT ReadInputDiscretes (refNum, toBlock)>
<!ELEMENT ReadInputRegisters (refNum, toBlock+)>
<!ELEMENT ReadMultipleRegisters (refNum, toBlock+)>
<!ELEMENT ReadCoils (refNum, toBlock)>
<!ELEMENT WriteSingleRegister (refNum, fromBlock)>
<!ELEMENT WriteMultipleRegisters (refNum, fromBlock+)>
<!ELEMENT MaskWriteRegister (refNum, andMask, fromBlock)>
<!ELEMENT ForceMultipleCoils (refNum, fromBlock)>
<!ELEMENT WriteCoil (refNum, fromBlock)>
<!ELEMENT ReadWriteRegisters (refNum, toBlock+, refNum, fromBlock+)>

<!--
The bit component of a dest address must be zero.
-->
<!ELEMENT toBlock EMPTY >

<!-- fromBlock: 
When fromBlock source="const", then a <const> element is required. If instead,
when fromBlock source="N7:0" (any address), then the <idle> *may* be present.
The bit component of a source address may be non-zero.
-->
<!ELEMENT fromBlock (const|idle)? >
<!ELEMENT refNum (#PCDATA)>
<!ELEMENT idle (#PCDATA)>
<!-- const elements are used when you want non-variable data written as 
part of a command, namely in an initialization phase when when="start"
-->
<!ELEMENT const (#PCDATA)>
<!ELEMENT andMask (#PCDATA)>


<!ATTLIST ModbusTLM
                        debug           CDATA   #IMPLIED
>                        

<!ATTLIST TCPServer
                        ip              CDATA   #REQUIRED
                        connectTimeout  CDATA   #REQUIRED
                        requestTimeout  CDATA   #IMPLIED                        
>
<!ATTLIST UDPServer
                        ip              CDATA   #REQUIRED
                        requestTimeout  CDATA   #IMPLIED
                        attempts        CDATA   #IMPLIED                          
>       
<!ATTLIST Slave
                        id              CDATA   #REQUIRED
>       
<!ATTLIST ReadInputDiscretes
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>       
<!ATTLIST ReadInputRegisters
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>                       
<!ATTLIST ReadMultipleRegisters 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>
<!ATTLIST ReadCoils 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>
<!ATTLIST WriteSingleRegister 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>       
<!ATTLIST WriteMultipleRegisters 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>       
<!ATTLIST MaskWriteRegister
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>       
<!ATTLIST ForceMultipleCoils 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>               
<!ATTLIST WriteCoil 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>
<!ATTLIST ReadWriteRegisters 
                        when            (run|start) "run"
                        requestTimeout  CDATA   #IMPLIED                        
>
<!ATTLIST toBlock 
                        dest            CDATA           #REQUIRED
                        count           CDATA           #REQUIRED
                        fmt             (i2|bit)        #REQUIRED
>       
<!ATTLIST fromBlock 
                        source          CDATA           #REQUIRED
                        count           CDATA           #REQUIRED
                        fmt             (i2|bit)        #REQUIRED
>