MODBUS IPTCP Server

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PIC18F2550
Beiträge: 112
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: MODBUS IPTCP Server

Beitrag 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
;------------------------------------------------------------------------------------
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
mk-soft
Beiträge: 3894
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MODBUS IPTCP Server

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
PIC18F2550
Beiträge: 112
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: MODBUS IPTCP Server

Beitrag von PIC18F2550 »

Pointers = Ja
Strukturen = jein
Threads = NÖ

da werde ich mich wohl noch ein bisschen belesen müssen.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
mk-soft
Beiträge: 3894
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MODBUS IPTCP Server

Beitrag 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
Zuletzt geändert von mk-soft am 21.02.2026 13:57, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Rings
Beiträge: 978
Registriert: 29.08.2004 08:48

Re: MODBUS IPTCP Server

Beitrag von Rings »

Danke mk-soft für den Server,
finde ich sehr praktisch.
ist hier im Stresstest mit mehreren Clients gerade.
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
mk-soft
Beiträge: 3894
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MODBUS IPTCP Server

Beitrag 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.
;)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3894
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MODBUS IPTCP Server

Beitrag 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 ;)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3894
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MODBUS IPTCP Server

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten