Abfrage Wechselrichter

Anfängerfragen zum Programmieren mit PureBasic.
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Abfrage Wechselrichter

Beitrag von SMaag »

Modbus lässt sich kinderleicht mit PB umsetzen (hab ich vor ein paar Jahren gemacht), da braucht's kein Pascal Geraffel.
Ich hab es mal kurz angefangen und wieder aufgegeben, da man aus den diversen Codes, die ich gefunden habe die Essenz nicht rauslesen kann.
Man muss sich wohl zuerst mit den ModBus Spezifikationen beschäftigen - das hab ich bisher noch nicht gemacht.

Was bedeuted "kinderleicht"? Ein einfacher Register-Read auf einen Slave oder die Komplette Umsetzung von Modbus Master und Slave, so dass ich einen Datenaustausch in beide Richtungen mit SPS-CPU's hinbekomme (d.h. die SPS lese- und Schreibbefehle auf den PC ausführen kann)!

" da braucht's kein Pascal Geraffel."
ja, das braucht's nicht! Aber dort ist es eben für Industriezwecke komplett umgesetzt (aber im Detail schwer zu verstehen)!
Leider ist Pascal (wie Delphi oder Lazarus) mittlerweile extrem komplex.
Nikolaus Wirth hat selbst gesagt, dass man Programmiersprachen mit viel weniger Komplexität braucht - und deshalb Oberon entwickelt, was weit weniger komplex ist!

PureBasic bietet genau die niedrige Komplexität von der Wirth spricht, so dass eine Person theoretisch in der Lage ist, das ganze System zu verstehen (pratkisch ist das bei PB Fred).
Ich habe lange darüber gebrütet, meine Projekte mit Lazarus oder PureBasic umzusezen. Letzlich aus vielfältigen Gründen für PureBasic entschieden.

... aber ganz ehrlich: das ist jetzt hier voll die Anfängerfrage, oder?
ja, sieht nach Anfängerfrage aus! Ist es aber in der Umsetzung leider nicht!
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Abfrage Wechselrichter

Beitrag von mk-soft »

Modbus/TCP ist wirklich easy. Ich such dir was raus
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Abfrage Wechselrichter

Beitrag von HeX0R »

Ich hatte keinen Master gebraucht, nur einen Client, der unterstützte aber alles was Modbus so zu bieten hat.
Read/Write von Holding Register, Analog Input Registern (dann natürlich nur lesen), Coils, exception Handling,...

Es war zwar "nur" Modbus RTU, aber TCP ist quasi nix anderes als ein kleiner Prefix vor dem RTU Packet, und natürlich Sockets dann anstatt COM.
Hatte TCP damals sogar optional eingebunden, aber mangels Devices nie ausprobiert.

Kann Dir aber leider nichts davon zukommen lassen, das ganze war als Plugin-DLL konzipiert für ein anderes Projekt von mir.
So nutzt Dir das nicht viel.

Ach ja, wenn Du die Spezifikationen suchst, das hier ist sehr praktisch:
https://www.simplymodbus.ca/index.html

Und wenn Du einen Mastersimulator brauchst, kannst Du z.B. das hier nehmen:
https://forumautomation.com/t/free-modb ... lator/5649

Bei uns in der Firma wird sehr viel Modbus genutzt, ganz einfach weil es ein Protokoll mit sehr kleinen Paketen ist und es sich auf das wesentliche konzentriert.
Gibt fast nix schnelleres.

[Edit]
Ich war nicht ganz auf der Höhe gestern, tatsächlich müsstest Du überall in meinem Text "Master" und "Client" tauschen :freak:
Der, der Register anfrägt ist natürlich der Master, und das ist was ich erstellt hatte.
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Abfrage Wechselrichter

Beitrag von SMaag »

@HexOr
Danke für die Info, werd mich nochmals damit beschäftigen und das dann auch veröffentlichen.
Wird dann Teil des Frameworks für Purebasic, das ich vor einiger Zeit angefangen habe.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Abfrage Wechselrichter

Beitrag von mk-soft »

All word are Hi Lo byte Notation. Use bswap16

Code: Alles auswählen

;- Struktur Modbus Query und Response 

Structure udtQuery
  TransactionID.w
  ProtocolID.w
  DataLen.w
  UnitID.a
  Functioncode.a
  Register.w
  Count.w
  ByteCount.a
  wData.w[128]
EndStructure

Structure udtResponse
  TransactionID.w
  ProtocolID.w
  DataLen.w
  UnitID.a
  Functioncode.a
  ByteCount.a
  wData.w[128]
EndStructure
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Abfrage Wechselrichter

Beitrag von HeX0R »

Hier noch eine Checksummenberechnung für Modbus RTU, einfach den Buffer und die Länge übergeben:

Code: Alles auswählen

#CRC16POLY = $A001
Procedure CRC16(*MEMStart.BYTE, L)                                                      ;Modbus uses CRC16 to check integrity of the data (when in RS232 mode!)
	Protected P, k, MyCRC = $FFFF
	;
	While L
		P = *MEMStart\b & $FF
		For k = 1 To 8
			If (P ! MyCRC) & 1 = 1
				MyCRC >> 1
				MyCRC ! #CRC16POLY
				MyCRC & $FFFF
			Else
				MyCRC >> 1
			EndIf
			P >> 1
		Next
		*MEMStart + 1
		L - 1
	Wend

	ProcedureReturn MyCRC
EndProcedure
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Abfrage Wechselrichter

Beitrag von mk-soft »

Für Modbus/TCP wird die CRC nicht benötigt. Ist entfernt im Protokoll, da diese vom TCP/IP erledigt wird
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Abfrage Wechselrichter

Beitrag von HeX0R »

ähm ja, daher stand da ja auch Modbus RTU
Antworten