Seite 2 von 2

Re: MODBUS IPTCP Server

Verfasst: 16.02.2026 17:34
von PIC18F2550
gibt einen 16Bit Zufalswert zurück. :mrgreen:

:bounce:

Code: Alles auswählen

;------------------------------------------------------------------------------------
Ip$ =   "127.0.0.1"
Port = 502
GerAdr = 10
Funktionscode = 3
;Register = 1
;------------------------------------------------------------------------------------
*Buffer = AllocateMemory(1600)
If CreateNetworkServer(0, Port, #PB_Network_IPv4 | #PB_Network_TCP, Ip$)
  Repeat
    ServerEvent = NetworkServerEvent()
    If ServerEvent
      ClientID = EventClient()
      If ServerEvent = #PB_NetworkEvent_Data
        RequestLength = ReceiveNetworkData(ClientID, *Buffer, 1600)
        If PeekB(*Buffer+4) = 0 And PeekB(*Buffer+5) = 6 And PeekB(*Buffer+6) = GerAdr And PeekB(*Buffer+7) = Funktionscode And PeekB(*Buffer+10) = 0 And PeekB(*Buffer+11) = 1 ; Register
          If PeekB(*Buffer+8)*256+PeekB(*Buffer+9) = $0001
            PokeB(*Buffer+ 4,      0)
            PokeB(*Buffer+ 5,      5)
            PokeB(*Buffer+ 6, GerAdr)
            PokeB(*Buffer+ 7, Funktionscode)
            PokeB(*Buffer+ 8,      2)
            PokeB(*Buffer+ 9,    Random(255,0))
            PokeB(*Buffer+10,    Random(255,0))
            SendNetworkData(ClientID, *Buffer, 11)
          EndIf
        EndIf
      Else
        Delay(20)
      EndIf
    EndIf
  Until a=3
EndIf
End
;------------------------------------------------------------------------------------

Re: MODBUS IPTCP Server

Verfasst: 16.02.2026 20:10
von mk-soft
Fehlt zwar noch ein Haufen von Auswertungen, aber schon mal etwas verstanden ;)

Alles mit Peek und Poke in Bytes zu machen, ist nicht gerade hilfsreich und unübersichtlich.
Ich hoffe das du mit Strukturen und Pointers bei PB klar kommst. Und mit Threads ...
Ohne geht es nicht.

Mal Schauen of ich heute schon so weit bin. Muss nur noch etwas aufräumen.

Re: MODBUS IPTCP Server

Verfasst: 16.02.2026 22:01
von PIC18F2550
Pointers = Ja
Strukturen = jein
Threads = NÖ

da werde ich mich wohl noch ein bisschen belesen müssen.

Re: MODBUS IPTCP Server

Verfasst: 17.02.2026 20:21
von mk-soft
Update v1.01.4

Ich habe mal einen Simple Modus Server Code auf GitHub abgelegt.
Link: https://github.com/mk-soft-65/modbus-server-tcpip

Ändere nichts an den Code der ModbusFunction.pb. Den habe ich neu geschrieben und getestet.
5000 HoldingRegister, 5000 InputsRegisters , sowie 8000 Coils und DiscreteInputs sollten reichen.

Deine Daten für den Modbus Server programmierst du im Code von DataSource.pb

Re: MODBUS IPTCP Server

Verfasst: 19.02.2026 12:05
von Rings
Danke mk-soft für den Server,
finde ich sehr praktisch.
ist hier im Stresstest mit mehreren Clients gerade.

Re: MODBUS IPTCP Server

Verfasst: 19.02.2026 23:56
von mk-soft
Update v1.01.5
- Added Function 23: Read and Write Holding Registers

@Rings,
Danke fürs testen

Funktion 23 hatte ich vergessen. Ist Gute 15 Jahre here das ich für eine Siemens S7-300 einen Modbus-Server geschrieben habe.
Sollte so stimmen. Habe allerdings zur zeit keinen Modbus-Client um die Funktion 23 zu testen.

Was ich noch Plane ist für verschiedene UnitID verschiedene Speicherbereiche anzulegen.
Meine alte Modbus-Bridge (Als Dienst) unterstützt nur Inputs und Holdings Register.
;)

Re: MODBUS IPTCP Server

Verfasst: 21.02.2026 01:48
von mk-soft
Update v1.02.1
- Multi UnitID

Für jede UnitID legt man einen eigenen Modbus Datenbereich an und füllt diese in verschiedene Threads auf.
Jede UnitID hat seinen eigenen Mutex um die Daten Konsistent zu gewährleisten.

Die Version v1.01.5 gibt es weiter mit nur einen Modbus Datenbereich ;)

Re: MODBUS IPTCP Server

Verfasst: 21.02.2026 13:55
von mk-soft
Der Code liegt jetzt auf GitHub und nicht mehr auf den OneDrive.

Link: https://github.com/mk-soft-65/modbus-server-tcpip