Code Beispiele PLCcom für Modbus
Die Einbindung des PLCcom-Treibers für Modbus ist sehr einfach und benutzerfreundlich.
Die nachfolgenden Beispiele veranschaulichen die wichtigsten Funktionalitäten.
Weiterführende umfangreiche Dokumentationen mit direkt ausführbaren Code-Beispielen finden Sie in der Beispielanwendung in unserem Downloadpaket oder unter dem Button Dokumentation auf der Download-Seite.

using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Master;
class MasterExample
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Master
Class MasterExample
#Region "CreateAndInitDevice"
'Declare the Modbus master Device
Private Device As ModbusMaster = Nothing
Public Sub New()
CreateAndInitDevice()
End Sub
Private Sub CreateAndInitDevice()
Device = New ModbusMaster()
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
Try
'create new interface instance (if not applicable please uncomment)
' "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502)
'or (if not applicable please uncomment)
' "UDP" interface:
'Device.SetConnector_UDP("192.168.1.100",502)
'or (if not applicable please uncomment)
' "RTU" interface:
'Device.SetConnector_RTU("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'or (if not applicable please uncomment)
' "ASCII interface":
'Device.SetConnector_ASCII("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000)
'Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit
'register OnConnectionStateChange event
AddHandler Device.Connector.OnConnectionStateChange, AddressOf Device_OnConnectionStateChange
Catch ex As Exception
Console.WriteLine(ex.Message)
Return
End Try
End Sub
Private Sub Device_OnConnectionStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
End Class
import java.text.DateFormat; import java.util.Calendar; import PLCComMB.*; import PLCComMB.Enums.*; public class MasterExample implements iConnectionStateChangeEvent
Beispiel:
Einfaches Erstellen einer Modbus-Master- Instanz.
Nach dem Erstellen wird ein Connector an den Modbus-Master gebunden, in diesem Beispiel ein TCP-Connector.
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Master;
class MasterExample
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Master
Class MasterExample
#Region "CreateAndInitDevice"
'Declare the Modbus master Device
Private Device As ModbusMaster = Nothing
Public Sub New()
CreateAndInitDevice()
End Sub
Private Sub CreateAndInitDevice()
Device = New ModbusMaster()
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
Try
'create new interface instance (if not applicable please uncomment)
' "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502)
'or (if not applicable please uncomment)
' "UDP" interface:
'Device.SetConnector_UDP("192.168.1.100",502)
'or (if not applicable please uncomment)
' "RTU" interface:
'Device.SetConnector_RTU("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'or (if not applicable please uncomment)
' "ASCII interface":
'Device.SetConnector_ASCII("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000)
'Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit
'register OnConnectionStateChange event
AddHandler Device.Connector.OnConnectionStateChange, AddressOf Device_OnConnectionStateChange
'read data
readModbus()
Catch ex As Exception
Console.WriteLine(ex.Message)
Return
End Try
End Sub
Private Sub Device_OnConnectionStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
#Region "read"
Private Sub readModbus()
Console.WriteLine("start reading modbus")
'declare a ReadRequest object
'and set the request parameters >> read 10 holding register from adress 100
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
Dim myReadRequest As ReadRequest = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F03_Read_Holding_Registers, _
100, _
eDataType.[SHORT], _
10)
'set eventual byte order, standard = eByteOrder.AB_CD;
myReadRequest.ByteOrder = eByteOrder.AB_CD
Console.WriteLine(myReadRequest.ToString())
'read from device
Dim res As ReadResult = Device.Read(myReadRequest)
'evaluate results
Console.WriteLine((DateTime.Now.ToString() & ": ") + res.Message)
If res.Quality = OperationResult.eQuality.GOOD Then
Dim sb As New StringBuilder()
For Each item As ReadValue In res.FetchValues()
sb.Append("Address " & item.Address.ToString() & " / Pos" & item.AddressPosition.ToString())
sb.Append(" >> ")
sb.Append(item.ToString())
sb.Append(Environment.NewLine)
Next
Console.WriteLine(sb.ToString())
End If
Console.WriteLine("end reading modbus")
Console.WriteLine(Environment.NewLine)
End Sub
#End Region
End Class
import java.text.DateFormat; import java.util.Calendar; import PLCComMB.*; import PLCComMB.Enums.*; public class MasterExample implements iConnectionStateChangeEvent
Beispiel:
Einfaches Erstellen einer Modbus-Master- Instanz.
Nach dem Erstellen wird ein Connector an den Modbus-Master gebunden, in diesem Beispiel ein TCP-Connector.
Nachfolgend werden die Rohdaten dem Puffer entnommen.
Weitere Beispiele zum Lesen von bestimmten Datentypen entnehmen Sie bitte der Dokumentation oder der Beispielanwendung aus dem Downloadpaket!
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Master;
class MasterExample
{
#region CreateAndInitDevice
//Declare the Modbus master Device
private ModbusMaster Device = null;
public MasterExample()
{
CreateAndInitDevice();
}
private void CreateAndInitDevice()
{
Device = new ModbusMaster();
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
try
{
//create new interface instance (if not applicable please uncomment)
// "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502);
//or (if not applicable please uncomment)
// "UDP" interface:
//Device.SetConnector_UDP("192.168.1.100",502);
//or (if not applicable please uncomment)
// "RTU" interface:
//Device.SetConnector_RTU("COM1",
// eBaudrate.b9600,
// eDataBits.DataBits8,
// System.IO.Ports.Parity.None,
// System.IO.Ports.StopBits.One,
// System.IO.Ports.Handshake.None);
//or (if not applicable please uncomment)
// "ASCII interface":
//Device.SetConnector_ASCII("COM1",
// eBaudrate.b9600,
// eDataBits.DataBits8,
// System.IO.Ports.Parity.None,
// System.IO.Ports.StopBits.One,
// System.IO.Ports.Handshake.None);
//set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000);
//Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit;
//register OnConnectionStateChange event
Device.Connector.OnConnectionStateChange += new ModbusConnector.ConnectionStateChangeEventHandler(Device_OnConnectionStateChange);
//reading Collection from Modbus
readCollection();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
}
private void Device_OnConnectionStateChange(object sender, eConnectionState e)
{
//do anything
Console.WriteLine("Change PortState ==> " + e.ToString());
}
#endregion
#region Read Collection
private void readCollection()
{
Console.WriteLine("start read request collection from modbus");
//declare a ReadRequest object
ReadRequestCollection RequestCollection = new ReadRequestCollection();
#region Edit Collection
//set request parameter
//declare a ReadRequest object
//and set the request parameters >> reading 6 holding register at adress 10
ReadRequest RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, //Slave ID
eReadFunction.F03_Read_Holding_Registers,//modbus function
10, //Read start adress
eDataType.BOOLEAN, //Target Datatype
6, //quantity of objects to be read
0); //Address of first Bit by reading register
//add Request to Collection
RequestCollection.AddReadRequest("Item1", RequestItem);
Console.WriteLine("add ReadRequest "+ RequestItem.ToString());
//reading 8 holding register at adress 0
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, //Slave ID
eReadFunction.F03_Read_Holding_Registers,//modbus function
0, //Read start adress
eDataType.BYTE, //Target Datatype
8); //quantity of objects to be read
//add Request to Collection
RequestCollection.AddReadRequest("Item2", RequestItem);
Console.WriteLine("add ReadRequest " + RequestItem.ToString());
//reading 2 holding register at adress 12
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, //Slave ID
eReadFunction.F03_Read_Holding_Registers,//modbus function
12, //Read start adress
eDataType.USHORT, //Target Datatype
2); //quantity of objects to be read
//add Request to Collection
RequestCollection.AddReadRequest("Item3", RequestItem);
Console.WriteLine("add ReadRequest " + RequestItem.ToString());
//reading 2 holding register at adress 20
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, //Slave ID
eReadFunction.F01_Read_Coils,//modbus function
2, //Read start adress
eDataType.BOOLEAN, //Target Datatype
20, //quantity of objects to be read
0); //Address of first Bit by reading register
//add Request to Collection
RequestCollection.AddReadRequest("Item4", RequestItem);
Console.WriteLine("add ReadRequest " + RequestItem.ToString());
//reading 8 coils at adress 8
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, //Slave ID
eReadFunction.F01_Read_Coils,//modbus function
8, //Read start adress
eDataType.BOOLEAN, //Target Datatype
8, //quantity of objects to be read
0); //Address of first Bit by reading register
//add Request to Collection
RequestCollection.AddReadRequest("Item5", RequestItem);
Console.WriteLine("add ReadRequest " + RequestItem.ToString());
#endregion
//enable optimize mode
RequestCollection.Optmize = true;
Console.WriteLine(RequestCollection.ToString());
//read from device
ReadResultCollection ResultCollection = Device.Read(RequestCollection);
//evaluate results
Console.WriteLine(DateTime.Now.ToString() + ": " + ResultCollection.Message);
//find itemresult with foreach-loop
StringBuilder sb = new StringBuilder();
foreach (ReadResult res in ResultCollection.GetReadItemResult())
{
sb.Append("Start Item:");
sb.Append(res.RequestKey);
sb.Append(" ");
sb.Append("Quality:");
sb.Append(" ");
sb.Append(res.Quality.ToString());
sb.Append(Environment.NewLine);
if (res.Quality == OperationResult.eQuality.GOOD)
{
Array Values = res.FetchValues();
for (int i = 0; i < Values.Length; i++)
{
sb.Append(Values.GetValue(i).ToString());
sb.Append(Environment.NewLine);
}
sb.Append("End Item:");
sb.Append(res.RequestKey);
}
}
Console.WriteLine(sb.ToString());
Console.WriteLine("end read request collection from modbus");
Console.WriteLine(Environment.NewLine);
}
#endregion
}
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Master
Class MasterExample
#Region "CreateAndInitDevice"
'Declare the Modbus master Device
Private Device As ModbusMaster = Nothing
Public Sub New()
CreateAndInitDevice()
End Sub
Private Sub CreateAndInitDevice()
Device = New ModbusMaster()
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
Try
'create new interface instance (if not applicable please uncomment)
' "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502)
'or (if not applicable please uncomment)
' "UDP" interface:
'Device.SetConnector_UDP("192.168.1.100",502)
'or (if not applicable please uncomment)
' "RTU" interface:
'Device.SetConnector_RTU("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'or (if not applicable please uncomment)
' "ASCII interface":
'Device.SetConnector_ASCII("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000)
'Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit
'register OnConnectionStateChange event
AddHandler Device.Connector.OnConnectionStateChange, AddressOf Device_OnConnectionStateChange
'reading Collection from Modbus
readCollection()
Catch ex As Exception
Console.WriteLine(ex.Message)
Return
End Try
End Sub
Private Sub Device_OnConnectionStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
#Region "Read Collection"
Private Sub readCollection()
Console.WriteLine("start read request collection from modbus")
'declare a ReadRequest object
Dim RequestCollection As New ReadRequestCollection()
'#Region "Edit Collection"
'set request parameter
'declare a ReadRequest object
'and set the request parameters >> reading 6 holding register at adress 10
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
'Address of first Bit by reading register
Dim RequestItem As ReadRequest = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F03_Read_Holding_Registers, _
10, _
eDataType.[BOOLEAN], _
6, _
0)
'add Request to Collection
RequestCollection.AddReadRequest("Item1", RequestItem)
Console.WriteLine("add ReadRequest " & RequestItem.ToString())
'reading 8 holding register at adress 0
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F03_Read_Holding_Registers, _
0, _
eDataType.[BYTE], _
8)
'add Request to Collection
RequestCollection.AddReadRequest("Item2", RequestItem)
Console.WriteLine("add ReadRequest " & RequestItem.ToString())
'reading 2 holding register at adress 12
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F03_Read_Holding_Registers, _
12, _
eDataType.[USHORT], _
2)
'add Request to Collection
RequestCollection.AddReadRequest("Item3", RequestItem)
Console.WriteLine("add ReadRequest " & RequestItem.ToString())
'reading 2 holding register at adress 20
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
'Address of first Bit by reading register
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F01_Read_Coils, _
2, _
eDataType.[BOOLEAN], _
20, _
0)
'add Request to Collection
RequestCollection.AddReadRequest("Item4", RequestItem)
Console.WriteLine("add ReadRequest " & RequestItem.ToString())
'reading 8 coils at adress 8
'Slave ID
'modbus function
'Read start adress
'Target Datatype
'quantity of objects to be read
'Address of first Bit by reading register
RequestItem = RequestBuilder.ReadRequestBuilder.Create(1, _
eReadFunction.F01_Read_Coils, _
8, _
eDataType.[BOOLEAN], _
8, _
0)
'add Request to Collection
RequestCollection.AddReadRequest("Item5", RequestItem)
Console.WriteLine("add ReadRequest " & RequestItem.ToString())
'#End Region
'enable optimize mode
RequestCollection.Optmize = True
Console.WriteLine(RequestCollection.ToString())
'read from device
Dim ResultCollection As ReadResultCollection = Device.Read(RequestCollection)
'evaluate results
Console.WriteLine((DateTime.Now.ToString() & ": ") + ResultCollection.Message)
'find itemresult with foreach-loop
Dim sb As New StringBuilder()
For Each res As ReadResult In ResultCollection.GetReadItemResult()
sb.Append("Start Item:")
sb.Append(res.RequestKey)
sb.Append(" ")
sb.Append("Quality:")
sb.Append(" ")
sb.Append(res.Quality.ToString())
sb.Append(Environment.NewLine)
If res.Quality = OperationResult.eQuality.GOOD Then
Dim Values As Array = res.FetchValues()
For i As Integer = 0 To Values.Length - 1
sb.Append(Values.GetValue(i).ToString())
sb.Append(Environment.NewLine)
Next
sb.Append("End Item:")
sb.Append(res.RequestKey)
End If
Next
Console.WriteLine(sb.ToString())
Console.WriteLine("end read request collection from modbus")
Console.WriteLine(Environment.NewLine)
End Sub
#End Region
End Class
import java.text.DateFormat; import java.util.Calendar; import PLCComMB.*; import PLCComMB.Enums.*; public class MasterExample implements iConnectionStateChangeEvent
Beispiel:
Einfaches Erstellen einer Modbus-Master- Instanz.
Nach dem Erstellen wird ein Connector an den Modbus-Master gebunden, in diesem Beispiel ein TCP-Connector.
Nachfolgend Lesen von Daten mehrerer unterschiedlicher Bereiche aus einer SPS in einem gemeinsamen Zugriff. Hierzu wird eine ReadRequestCollection erzeugt und zum Lesen an das Device übergeben. Die hierzu notwendigen Lesezugriffe werden automatisch auf das Notwendigste reduziert und optimiert. Nachfolgend werden die Daten dem Puffer entnommen.
Weitere Beispiele zum Lesen von bestimmen Datentypen entnehmen Sie bitte der Dokumentation oder der Beispielanwendung aus dem Downloadpaket!
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Master
Class MasterExample
#Region "CreateAndInitDevice"
'Declare the Modbus master Device
Private Device As ModbusMaster = Nothing
Public Sub New()
CreateAndInitDevice()
End Sub
Private Sub CreateAndInitDevice()
Device = New ModbusMaster()
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
Try
'create new interface instance (if not applicable please uncomment)
' "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502)
'or (if not applicable please uncomment)
' "UDP" interface:
'Device.SetConnector_UDP("192.168.1.100",502)
'or (if not applicable please uncomment)
' "RTU" interface:
'Device.SetConnector_RTU("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'or (if not applicable please uncomment)
' "ASCII interface":
'Device.SetConnector_ASCII("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000)
'Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit
'register OnConnectionStateChange event
AddHandler Device.Connector.OnConnectionStateChange, AddressOf Device_OnConnectionStateChange
'write data
writeModbus()
Catch ex As Exception
Console.WriteLine(ex.Message)
Return
End Try
End Sub
Private Sub Device_OnConnectionStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
#Region "Write"
Private Sub writeModbus()
Console.WriteLine("start writing modbus")
'declare a WriteRequest object and
'and set the request parameters >> //write multiple register at adress 100
'Slave ID
'modbus function
'write start adress
Dim myWriteRequest As WriteRequest = RequestBuilder.WriteRequestBuilder.Create(1, _
eWriteFunction.F16_Write_Multiple_Registers, _
100)
'set eventual byte order, standard = eByteOrder.AB_CD;
myWriteRequest.ByteOrder = eByteOrder.AB_CD
'write 4 holding register at adress 100
'add writable data to request
myWriteRequest.AddShortRange(New Short() )
Console.WriteLine(myWriteRequest.ToString())
'write
Dim res As WriteResult = Device.Write(myWriteRequest)
'evaluate results
Console.WriteLine((DateTime.Now.ToString() & ": ") + res.Message)
Console.WriteLine("end writing modbus")
Console.WriteLine(Environment.NewLine)
End Sub
#End Region
End Class
Imports PLCcom
Public Class newClass
Private Device As PLCcomDevice
'see section 'connect' for declare and connect a PLCcom-Device
Private Sub btnWrite_Click(sender As Object, e As EventArgs) Handles btnWrite.Click
'declare a WriteRequest object
Dim myWriteRequest As WriteRequest() = New WriteRequest(0)
myWriteRequest(0) = New WriteRequest()
'set the request parameters
'write 4 bytes in DB100
myWriteRequest(0).Region = eRegion.DataBlock
myWriteRequest(0).DB = 100
myWriteRequest(0).StartByte = 0
'add writable Data here
myWriteRequest(0).setBuffer(New Byte() )
'write
Dim res As WriteResult() = Device.write(myWriteRequest)
'evaluate results
txtMessage.Text = (DateTime.Now.ToString() & ": ") + res(0).Message
If res(0).Quality.Equals(OperationResult.eQuality.GOOD) Then
MessageBox.Show("OK", "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show(res(0).Message, "Result:", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
End Class
import java.text.DateFormat; import java.util.Calendar; import PLCComMB.*; import PLCComMB.Enums.*; public class MasterExample implements iConnectionStateChangeEvent
Beispiel:
Einfaches Erstellen einer Modbus-Master- Instanz.
Nach dem Erstellen wird ein Connector an den Modbus-Master gebunden, in diesem Beispiel ein TCP-Connector.
Nachfolgend Schreiben von Daten.
Weitere Beispiele zum Schreiben von bestimmten Datentypen entnehmen Sie bitte der Dokumentation oder der Beispielanwendung aus dem Downloadpaket!
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Master;
class MasterExample
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Master
Class MasterExample
#Region "CreateAndInitDevice"
'Declare the Modbus master Device
Private Device As ModbusMaster = Nothing
Public Sub New()
CreateAndInitDevice()
End Sub
Private Sub CreateAndInitDevice()
Device = New ModbusMaster()
Device.SetUser("my user name from licence document");
Device.SetSerial("my serial from licence document");
Try
'create new interface instance (if not applicable please uncomment)
' "TCP" interface:
Device.SetConnector_TCP("192.168.1.21", 502)
'or (if not applicable please uncomment)
' "UDP" interface:
'Device.SetConnector_UDP("192.168.1.100",502)
'or (if not applicable please uncomment)
' "RTU" interface:
'Device.SetConnector_RTU("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'or (if not applicable please uncomment)
' "ASCII interface":
'Device.SetConnector_ASCII("COM1", _
' eBaudrate.b9600, _
' eDataBits.DataBits8, _
' System.IO.Ports.Parity.None, _
' System.IO.Ports.StopBits.One, _
' System.IO.Ports.Handshake.None)
'set max idleTime (max idle timespan in milliseconds between open and close interface or connection), Standard = 10000ms
Device.Connector.SetMaxIdleTime(5000)
'Set RegisterMode >> 16bit or 32bit register, settings must match with settings of slave
Device.RegisterMode = eRegisterMode._16Bit
'register OnConnectionStateChange event
AddHandler Device.Connector.OnConnectionStateChange, AddressOf Device_OnConnectionStateChange
'reading diagnostic info (FC8)
modbusDiagnostic()
Catch ex As Exception
Console.WriteLine(ex.Message)
Return
End Try
End Sub
Private Sub Device_OnConnectionStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
#Region "Diagnostic"
Private Sub modbusDiagnostic()
Console.WriteLine("start reading modbus diagnostic")
'declare a ReadRequest object
'and set the request parameters
'Slave ID
'subfunction
Dim myDiagnosticRequest As DiagnosticRequest = RequestBuilder.DiagnosticRequestBuilder.Create(1, 0)
Console.WriteLine(myDiagnosticRequest.ToString())
'execute function
Dim res As DiagnosticResult = Device.GetDiagnostics(myDiagnosticRequest)
'evaluate results
Console.WriteLine((DateTime.Now.ToString() & ": ") + res.Message)
If res.Quality = OperationResult.eQuality.GOOD Then
Dim counter As UShort = 0
Dim sb As New StringBuilder()
For Each value As Object In res.ResultData
sb.Append(counter.ToString("0000"))
sb.Append(" >> ")
sb.Append(value.ToString())
sb.Append(Environment.NewLine)
counter += 1
Next
Console.WriteLine(sb.ToString())
End If
Console.WriteLine("end reading modbus diagnostic")
Console.WriteLine(Environment.NewLine)
End Sub
#End Region
End Class
import java.text.DateFormat; import java.util.Calendar; import PLCComMB.*; import PLCComMB.Enums.*; public class MasterExample implements iConnectionStateChangeEvent
Beispiel:
Einfaches Erstellen einer Modbus-Master- Instanz.
Nach dem Erstellen wird ein Connector an den Modbus-Master gebunden, in diesem Beispiel ein TCP-Connector.
Nachfolgend Lesen der Diagnosedaten
using System;
using System.Collections.Generic;
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Slave;
class SlaveExample : IDisposable
Imports System.Collections.Generic
Imports System.IO.Ports
Imports System.Text
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Slave
Class SlaveExample
Implements IDisposable
Public Sub New()
CreateAndInitDevice()
End Sub
#Region "CreateAndInitDevice"
Private slave As ModbusSlave = Nothing
Private Sub CreateAndInitDevice()
Console.WriteLine("starting modbus slave")
'create new modbus slave with slave id 1
slave = New ModbusSlave("", _
"", _
1)
Console.WriteLine(slave.ToString())
End Sub
#End Region
End Class
import PLCComMB.*; import PLCComMB.Enums.*; import PLCComMB.UnsignedDatatypes.*; public class SlaveExample
Beispiel:
Erstellen einer Modbus-Slave Instanz.
using System;
using System.Collections.Generic;
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Slave;
class SlaveExample : IDisposable
Imports System.Collections.Generic
Imports System.IO.Ports
Imports System.Text
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Slave
Class SlaveExample
Implements IDisposable
Public Sub New()
CreateAndInitDevice()
End Sub
#Region "CreateAndInitDevice"
Private slave As ModbusSlave = Nothing
Private Sub CreateAndInitDevice()
Console.WriteLine("starting modbus slave")
'create new modbus slave with slave id 1
slave = New ModbusSlave("", _
"", _
1)
Console.WriteLine(slave.ToString())
'add TCP listener
slave.AddOrReplaceListener_TCP("listener_tcp1", 502)
'add UDP listener
slave.AddOrReplaceListener_UDP("listener_udp1", 502)
'or add RTU listener
'slave.AddOrReplaceListener_RTU("listener_rtu1",
' "COM1",
' eBaudrate.b9600,
' eDataBits.DataBits8,
' Parity.None,
' StopBits.One,
' Handshake.None)
'or add ASCII listener
'slave.AddOrReplaceListener_ASCII("listener_ascii1",
' "COM2",
' eBaudrate.b9600,
' eDataBits.DataBits8,
' Parity.None,
' StopBits.One,
' Handshake.None)
End Sub
#End Region
#Region "IDisposable Member"
Public Sub Dispose() Implements IDisposable.Dispose
StopSlave()
End Sub
#End Region
End Class
import PLCComMB.*; import PLCComMB.Enums.*; import PLCComMB.UnsignedDatatypes.*; public class SlaveExample
Beispiel:
Nach dem Erstellen einer Modbus-Slave- Instanz werden verschiedene Listener an den Slave gebunden und stellen hiermit verschiedene Kommunikationswege bereit.
using System;
using System.Collections.Generic;
using PLCcomModbus.Core;
using PLCcomModbus.DataAdapter;
using PLCcomModbus.Slave;
class SlaveExample : IDisposable
Imports System.Collections.Generic
Imports System.IO.Ports
Imports System.Text
Imports PLCcomModbus.Core
Imports PLCcomModbus.DataAdapter
Imports PLCcomModbus.Slave
Class SlaveExample
Implements IDisposable
Public Sub New()
CreateAndInitDevice()
End Sub
#Region "CreateAndInitDevice"
Private slave As ModbusSlave = Nothing
Private Sub CreateAndInitDevice()
Console.WriteLine("starting modbus slave")
'create new modbus slave with slave id 1
slave = New ModbusSlave("testuser", "86882-21148-109248-1867141", 1)
'slave = new ModbusSlave("",
' "",
' 1);
Console.WriteLine(slave.ToString())
'register slave events
AddHandler slave.OnPortStateChange, AddressOf slave_OnPortStateChange
'event is triggered by changing state of communication port
AddHandler slave.OnIncomingLogEntry, AddressOf slave_OnIncomingLogEntry
'event is triggered with a new log entry
'register datastore events
AddHandler slave.OnDataStoreItemChange, AddressOf slave_OnDataStoreItemChange
'event is triggered by changing of datastore
AddHandler slave.OnDataStoreItemRead, AddressOf slave_OnDataStoreItemRead
'event is triggered by reading from datastore
'Add one or more listener
'add TCP listener
slave.AddOrReplaceListener_TCP("listener_tcp1", 502)
'add UDP listener
slave.AddOrReplaceListener_UDP("listener_udp1", 502)
'or add RTU listener
'slave.AddOrReplaceListener_RTU("listener_rtu1",
' "COM1",
' eBaudrate.b9600,
' eDataBits.DataBits8,
' Parity.None,
' StopBits.One,
' Handshake.None)
'or add ASCII listener
'slave.AddOrReplaceListener_ASCII("listener_ascii1",
' "COM2",
' eBaudrate.b9600,
' eDataBits.DataBits8,
' Parity.None,
' StopBits.One,
' Handshake.None)
End Sub
Private Sub slave_OnDataStoreItemRead(e As List(Of DataStoreItemReadEventArgs))
'do anything
End Sub
Private Sub slave_OnDataStoreItemChange(e As List(Of DataStoreItemChangeEventArgs))
'do anything
End Sub
Private Sub slave_OnIncomingLogEntry(e As LogEntry())
'do anything
'write LogEntry into listview
For Each le As LogEntry In e
Console.WriteLine(le.ToString())
Next
End Sub
Private Sub slave_OnPortStateChange(sender As Object, e As eConnectionState)
'do anything
Console.WriteLine("Change PortState ==> " & e.ToString())
End Sub
#End Region
#Region "getvalues"
Public Function GetValues(ModBusAddress As UShort, Region As eModbusRegion) As Object
Return slave.GetValue(ModBusAddress, Region)
End Function
#End Region
#Region "setvalues"
Public Sub SetValues(ModBusAddress As UShort, Region As eModbusRegion, Value As Boolean)
'set value of addressed coil to the passed value
slave.SetValue(ModBusAddress, Region, Value)
End Sub
Public Sub SetValues(ModBusAddress As UShort, Region As eModbusRegion, Value As UShort)
'set value of addressed holding register to the passed 16bit value (only in 16bit register mode)
slave.SetValue(ModBusAddress, Region, Value)
End Sub
Public Sub SetValues(ModBusAddress As UShort, Region As eModbusRegion, Value As UInteger)
'set value of addressed holding register to the passed 32bit value
slave.SetValue(ModBusAddress, Region, Value)
End Sub
#End Region
#Region "stop slave"
Public Sub StopSlave()
Console.WriteLine("stop modbus slave")
'unregister Datastore events
RemoveHandler slave.OnDataStoreItemChange, AddressOf slave_OnDataStoreItemChange
RemoveHandler slave.OnDataStoreItemRead, AddressOf slave_OnDataStoreItemRead
'unload existing listener
Dim ModbusListenerItems As New List(Of ModbusListener)(slave.Listener.Values)
For Each ml As ModbusListener In ModbusListenerItems
slave.RemoveListener(ml.Name)
Next
'unregister slave events
RemoveHandler slave.OnIncomingLogEntry, AddressOf slave_OnIncomingLogEntry
RemoveHandler slave.OnPortStateChange, AddressOf slave_OnPortStateChange
slave.Listener.Clear()
'dispose modbus slave
slave.Dispose()
slave = Nothing
End Sub
#End Region
#Region "IDisposable Member"
Public Sub Dispose() Implements IDisposable.Dispose
StopSlave()
End Sub
#End Region
End Class
import java.util.List;
import PLCComMB.*;
import PLCComMB.Enums.*;
import PLCComMB.UnsignedDatatypes.*;
public class SlaveExample implements iConnectionStateChangeEvent,
iIncomingLogEntryEvent, iDataStoreItemChangeEvent,
iDataStoreItemReadEvent
Beispiel:
Code eines einfachen Modbus-Slave mit verschienenen Listenern und der Möglichkeit, Daten direkt in den Datastore zu schreiben oder von ihm zu lesen.


