Hallo,
ich hab grad mal mit Hilfe von nmodbus einen Modbus TCP Slave (Server) erstellt.
Mein Problem ist die Abfrage des Events "DataStoreReadFrom", in der Hilfe steht nicht mehr wie diese Zeile die ich unwissender weise einfach mal in mein Programm eingebaut habe:
Sinn des ganzen ist das ich genau Wissen will das ein Master liest und schreibt, was mit den beiden Event funktionieren soll. Nur wie ich die Abfragen soll verstehe ich nicht.
ich hab grad mal mit Hilfe von nmodbus einen Modbus TCP Slave (Server) erstellt.
Mein Problem ist die Abfrage des Events "DataStoreReadFrom", in der Hilfe steht nicht mehr wie diese Zeile die ich unwissender weise einfach mal in mein Programm eingebaut habe:
Sinn des ganzen ist das ich genau Wissen will das ein Master liest und schreibt, was mit den beiden Event funktionieren soll. Nur wie ich die Abfragen soll verstehe ich nicht.
VB.NET-Quellcode
- Imports System
- Imports System.IO.Ports
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Threading
- Imports System.Data
- Imports Modbus
- Imports Modbus.Device
- Imports Modbus.Data
- Imports Modbus.Utility
- Imports Modbus.Extensions
- Public Class Form1
- Public Event DataStoreReadFrom As EventHandler(Of DataStoreEventArgs)
- Public Event DataStoreWrittenTo As EventHandler(Of DataStoreEventArgs)
- Dim slave As Modbus.Device.ModbusTcpSlave
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim slaveID As Byte = 1
- Dim port As Integer = 502
- Dim IPAddresse As IPAddress = IPAddress.Parse("0.0.0.0")
- Dim slaveTcpListener As New TcpListener(IPAddresse, port)
- Try
- slaveTcpListener.Start()
- slave = Device.ModbusTcpSlave.CreateTcp(slaveID, slaveTcpListener)
- slave.DataStore = DataStoreFactory.CreateDefaultDataStore()
- slave.Listen()
- 'Thread.Sleep(Timeout.Infinite)
- Catch
- End Try
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Try
- slave.DataStore.HoldingRegisters.Item(1) = slave.DataStore.HoldingRegisters.Item(1) + 1
- TextBox2.Text = ModbusUtility.GetSingle(slave.DataStore.HoldingRegisters.Item(2), slave.DataStore.HoldingRegisters.Item(3))
- Catch
- End Try
- Try
- 'Ab Register 100 Date & Time
- slave.DataStore.HoldingRegisters.Item(101) = Now.Year.ToString
- slave.DataStore.HoldingRegisters.Item(102) = Now.Month.ToString
- slave.DataStore.HoldingRegisters.Item(103) = Now.Day.ToString
- slave.DataStore.HoldingRegisters.Item(104) = Now.Hour.ToString
- slave.DataStore.HoldingRegisters.Item(105) = Now.Minute.ToString
- slave.DataStore.HoldingRegisters.Item(106) = Now.Second.ToString
- Catch
- End Try
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- SetIEEE(TextBox1.Text)
- End Sub
- Public Function SetIEEE(ByVal Wert As String) As Boolean
- Dim bytes(3) As Byte
- Try
- bytes = BitConverter.GetBytes(CSng(Wert)) ' String --> Single --> Byte-Array
- slave.DataStore.HoldingRegisters.Item(2) = System.BitConverter.ToUInt16(bytes, 2) ' 2-Byte --> UInt16 (1Register)
- slave.DataStore.HoldingRegisters.Item(3) = System.BitConverter.ToUInt16(bytes, 0) ' 2-Byte --> UInt16 (1Register)
- Return True
- Catch
- MsgBox("Falsche Eingabe !")
- Return False
- End Try
- End Function
- End Class