|
|
|
| Info | Support | Contact | About | ||
|
How to integrate the Protocol in your ApplicationUsing Serial ProtocolsLet's assume we want to talk to a Modbus slave device with slave address 1.The registers for reading are in the reference range 4:00100 to 4:00119 and the registers for writing are in the range 4:00200 to 4:00219. The discretes for reading are in the reference range 0:00010 to 0:00019 and the discretes for writing are in the range 0:00020 to 0:00029. 1. Import the library packages uses MbusRtuMasterProtocol, BusProtocolExceptions; 2. Device data profile definition Define the data sets which reflects the slave's data profile by type and size: var readRegSet: array[1..20] of word; writeRegSet: array[1..10] of word; readBitSet: array[1..10] of boolean; writeBitSet: array[1..10] of boolean; If you are using floats instead of 16-bit words define: var readFloatSet: array[1..10] of single; writeFloatSet: array[1..10] of single; If you are using 32-bit ints instead of 16-bit words define: var readLongSet: array[1..10] of integer; writeLongSet: array[1..10] of integer; 3. Declare and instantiate a protocol object var TMbusRtuMasterProtocol mbusProtocol; 4. Instantiate and open the protocol try mbusProtocol := TMbusRtuMasterProtocol.Create(nil); mbusProtocol.portName := 'COM1'; mbusProtocol.baudRate := 9600; mbusProtocol.openProtocol; except on e: Exception do begin writeln('Error opening protocol: ', e.message, '!'); halt(1); end; end; 5. Perform the data transfer functions
6. Close the protocol port if not needed any more mbusProtocol.closeProtocol; 7. Error Handling Serial protocol errors like slave device failures, transmission failures, checksum errors and time-outs throw an exception. The following code snippet can handle and report these errors:
try mbusProtocol.readMultipleRegisters(1, 100, dataSetArray); except on e: EBusProtocolException do writeln(e.message, '!'); on e: Exception do begin writeln('Fatal error: ', e.message, '!'); halt(1); end; end; An automatic retry mechanism is available and can be enabled with mbusProtocol.setRetryCnt(3) before opening the protocol port. Using MODBUS/TCP ProtocolLet's assume we want to talk to a Modbus slave device with unit address 1 and IP address 10.0.0.11.The registers for reading are in the reference range 4:00100 to 4:00119 and the registers for writing are in the range 4:00200 to 4:00219. The discretes for reading are in the reference range 0:00010 to 0:00019 and the discretes for writing are in the range 0:00020 to 0:00029. 1. Import the library package uses MbusTcpMasterProtocol, BusProtocolExceptions; 2. Device data profile definition Define the data sets which reflects the slave's data profile by type and size: var readRegSet: array[1..20] of word; writeRegSet: array[1..10] of word; readBitSet: array[1..10] of boolean; writeBitSet: array[1..10] of boolean; If you are using floats instead of 16-bit words define: var readFloatSet: array[1..10] of single; writeFloatSet: array[1..10] of single; If you are using 32-bit ints instead of 16-bit words define: var readLongSet: array[1..10] of integer; writeLongSet: array[1..10] of integer; 3. Declare and instantiate a protocol object var TMbusTcpMasterProtocol mbusProtocol; 4. Open the protocol mbusProtocol.hostName := ' 10.0.0.11'; mbusProtocol.openProtocol; 5. Perform the data transfer functions
6. Close the protocol port if not needed any more mbusProtocol.closeProtocol; 7. Error Handling TCP/IP protocol errors like slave failures, TCP/IP connection failures and time-outs return an error code. The following code snippet can handle these errors:
try mbusProtocol.readMultipleRegisters(1, 100, dataSetArray); except on e: EBusProtocolException do writeln(e.message, '!'); on e: Exception do begin writeln('Fatal error: ', e.message, '!'); halt(1); end; end; If the method throws EConnectionWasClosed, it signals that the the TCP/IP connection was lost or closed by the remote end. Before using further data and control functions the connection has to be re-opened succesfully. Examples |
|||||||||||||||||||||||||||||||
| Back | Top of page | Info | Support | Contact | About | ||
|
Information in this document is subject to change without notice.
Copyright © 2000-2013 proconX Pty Ltd.
All rights reserved.
All product and brand names mentioned on this page may be trademarks or registered trademarks of their respective owners. |