MODBUS IPTCP Server
Verfasst: 11.02.2026 17:28
Hallo,
ich suche ein beispiel wie ich einen Server für dieses protokoll aufbauen Muss damit ich 4Byte Daten abfragen kann.
Ich weis das ich dem server eine Registeradresse z.B. 30865 und einige Paarameter übergeben muss.
Zu sendende Daten
ich suche ein beispiel wie ich einen Server für dieses protokoll aufbauen Muss damit ich 4Byte Daten abfragen kann.
Ich weis das ich dem server eine Registeradresse z.B. 30865 und einige Paarameter übergeben muss.
Zu sendende Daten
Code: Alles auswählen
PokeB(*b+0 , 0) ; H-Transaktionskennung
PokeB(*b+1 , 1) ; L-Transaktionskennung
PokeB(*b+2 , 0) ; immer 0
PokeB(*b+3 , 0) ; immer 0
PokeB(*b+4 , 0) ; H-Länge
PokeB(*b+5 , 6) ; L-Länge
PokeB(*b+6 , 5) ; Geräteadresse
PokeB(*b+7 , 3) ; Funktionscode
; PokeB(*b+8 , $78) ; H-Registeradresse Batterieladezustand
; PokeB(*b+9 , $7d) ; L-Registeradresse Batterieladezustand
PokeB(*b+10, 0) ; H-benötigte Register
PokeB(*b+11, 1) ; L-benötigte Register
Code: Alles auswählen
;------------------------------------------------------------------------------------
Ip$ = "127.0.0.1"
Port = 8123
GerAdr = 200
;------------------------------------------------------------------------------------
If OpenWindow(0, 100, 200, 320, 40, "MOD-BUS Server v0.0 ("+Ip$+":"+Port+")")
TextGadget(0, 10, 10, 300, 30, "Server Start.")
*Buffer = AllocateMemory(10000)
If *Buffer
If CreateNetworkServer(0, Port, #PB_Network_IPv4 | #PB_Network_TCP, Ip$)
SetGadgetText(0, "Wait of client.")
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Event = 0
ServerEvent = NetworkServerEvent()
If ServerEvent
ClientID = EventClient()
Select ServerEvent
Case #PB_NetworkEvent_Connect ; New client connected
SetGadgetText(0, "New client "+ClientID+"connected !")
Case #PB_NetworkEvent_Disconnect ; Client has closed the connection
SetGadgetText(0, "Client "+ClientID+" NetworkEvent_Disconnect.")
Case #PB_NetworkEvent_Data
SetGadgetText(0, "Client "+ClientID+" NetworkEvent_Data.")
RequestLength = ReceiveNetworkData(ClientID, *Buffer, 2000)
;***************************************************************************************************************************************
If PeekB(*Buffer+4) = 0 And PeekB(*Buffer+5) = 6 And PeekB(*Buffer+6) = GerAdr And PeekB(*Buffer+7) = 3 And PeekB(*Buffer+10) = 0 And PeekB(*Buffer+11) = 1
Reg = PeekB(*Buffer+8)*256+PeekB(*Buffer+9)
Select reg
Case $787d
SetGadgetText(0, "Client "+ClientID+" NetworkEvent_Data." + $787d)
EndSelect
EndIf
;***************************************************************************************************************************************
EndSelect
Else
Delay(20)
EndIf
Until Quit = 1
CloseNetworkServer(0)
Else
MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
Else
MessageRequester("Error", "Memory to smal.", 0)
EndIf
Else
MessageRequester("Error", "Windows not create.", 0)
EndIf
End
;------------------------------------------------------------------------------------