| | |
|
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
>