write coils and registers over modbus master

130 views
Skip to first unread message

ruedi...@bluewin.ch

unread,
Apr 18, 2007, 11:13:45 AM4/18/07
to NModbus
I made a connection between my vb.net program and a robot controler.
On the robotcontroler I've defined the following Modbus IO's:
8 Bits Input
8 Bits Output
1 Word Input
1 Word Output.

I can read the Inputs in my Vb.net program, but I can't write Outputs.
This is my program:

Imports Modbus
Imports Modbus.Device
Imports Modbus.Util
Imports Modbus.IO
Imports log4net
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports System.IO.Ports
Imports System.Collections.Generic
Imports Microsoft.VisualBasic
Imports Microsoft.VisualStudio.VCProjectEngine


Public Class Form1
Dim instance As VCConfiguration
Dim value As eSqlClrPermissionLevel
Dim ModbusTcpSlave As Modbus.Device.ModbusTcpSlave
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
value = eSqlClrPermissionLevel.eSafe

Dim slaveID As Byte = 1
Dim port As Integer = 502

'Master start
Dim localAddr As IPAddress = IPAddress.Parse("192.168.0.201")
Dim masterTcpClient As TcpClient = New
TcpClient(localAddr.ToString, port)
Dim master As ModbusTcpMaster =
ModbusTcpMaster.CreateTcp(masterTcpClient)

'Decleration of the Variables
Dim numInputsB As UShort = 8
Dim numInputsW As UShort = 1
Dim startAddressIW As UShort = 1
Dim startAddressOW As UShort = 0
Dim startAddressIB As UShort = 8
Dim startAddressOB As UShort = 0
Dim outputsB(8) As Boolean
Dim outputsW As UShort
outputsB(0) = True
outputsB(1) = False
outputsB(2) = True
outputsB(3) = False
outputsB(2) = True
outputsB(4) = False
outputsB(5) = True
outputsB(6) = False
outputsB(7) = True
outputsW = 1234

'Read Inputs
Dim inputsB As Boolean() = master.ReadInputs(slaveID,
startAddressIB, numInputsB)
Dim inputsW As UShort() = master.ReadInputRegisters(slaveID,
startAddressIW, numInputsW)

'Write Outputs
master.WriteMultipleCoils(slaveID, startAddressOB, outputsB)
master.WriteSingleRegister(slaveID, startAddressOW, outputsW)
'Control the Inputs
Label1.Text = "inputsB(0)" & inputsB(0) & " inputsB(1)" &
inputsB(1) & "inputsW" & inputsW(0)
End Sub
End Class


In the line: master.WriteMultipleCoils(slaveID, startAddressOB,
outputsB) I receive the Exception: "Modbus.SlaveException" in
Modbus.dll, Function Code: 15, Exception Code: 9
And in the line: master.WriteSingleRegister(slaveID, startAddressOW,
outputsW): "Modbus.SlaveException" in Modbus.dll, Function Code: 6
Exception Code: 9.
Does a list exist of the different Function and Exception codes?

Thanks for your help.

Greets rudl

sja...@gmail.com

unread,
Apr 18, 2007, 2:17:23 PM4/18/07
to NModbus
Interesting. In the modbus spec I used for implementation (http://
modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf) the exception
code 9 not documented, though it is noted as being reserved...

Does anyone have any information on the Modbus exception code 9?

It may be worth contacting the manufacturer.

Good luck and let me know if I can help.

Scott

Reply all
Reply to author
Forward
0 new messages