Kann WAGO 750-841 mit Delphi auslesen aber nicht ändern
spacer
Autor Nachricht
einheit141
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 22.03.11 13:18 
Hallo zusammen!

Ich bin eigentlich kompletter SPS Neuling. Wir haben bei uns einen WAGO 750-841, der bei uns Haustechnik steuert. Das ganze System ist von einer Fa. eingebaut und eingerichtet worden. Lediglich die GUI zur Steuerung ist sehr gewöhnungsbedürftig und nicht wirklich auf unsere Bedürfnisse angepasst. Da ich mich mit SPS Programmierung (CoDeSys ist vorhanden) nicht wirklich auskenne, sondern mein Wissen sich eher auf Delphi bezieht, habe ich mich schlau gemacht, wie man eine eigenes Programm mit eigener GUI realisieren kann. Die benötigte MBT.dll von Wago ist auch vorhanden und ich habe die Verbindung zu unserem WAGO Knoten herstellen können. Auch das Auslesen der Momentanzustände funktioniert. Lediglich wenn ich einen Binärwert von 0 auf 1 setzen möchte, funktioniert das nicht. Die Anweisung läuft praktisch ins Leere. Ist das irgendwie eine Frage der Berechtigung zum schreiben auf dem Controller oder eine Konfigurationseinstellung? Wäre schön, wenn mir da jemand helfen könnte, der sich auch etwas mit der Kommunikation Wago <-> Delphi auskennt. Kann euch auch gerne den Quelltext mal posten. Hat jemand von euch sowas schon mal selbst geschrieben?

Grüße einheit141
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Rogi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 31.05.11 08:25 
Hi hier ist die Code:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
{------------------------------------------------------------------------------}
{ Procedure: Ausgang einschalten }
{------------------------------------------------------------------------------}
procedure TForm1.Setzen(Ausgang:Integer); // Ausgang setzen
begin
WriteBuffer[0] := 1; // wenn 1 setzen wenn 0 zurücksetzen

If (MBTWriteCoils(hSocket, Ausgang, 1, @WriteBuffer, nil, 0) <> S_OK) then
begin // wenn es nicht geklappt hat Fehlermeldung generieren
Application.MessageBox('Es ist ein Fehler beim WagoI/O aufgetreten !', 'write error', MB_OK);
end;
end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Voxe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win XP, Win 7
Delphi 7 prof
BeitragVerfasst: So 05.06.11 18:15 
Hallo,

eine dumme Frage, welches Betriebssystems des PC's setzt du ein. Meine Erfahrungen mit Win7 sind, das es ein Zufallsprodukt ist. Aussage von Wago, die DLL unterstützt Win7 nicht. Meine Erfahrung, stimmt. Mit XP kein Problem.

Liebe Grüße
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15841
Erhaltene Danke: 741

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: So 05.06.11 18:53 
Kompatibilitätseinstellungen? XPMode? Geht das alles nicht?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rogi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 07.06.11 16:34 
Hallo,

ich hab XP. demnächst will ich mit Win7 zugriff auf WagoI/O programmieren. Und noch was die Ausgang ist eine Konstante und Deklaration sieht so aus:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
const
{ Einstellung WagoI/O System with TCP-IP Protokol }
DEFAULT_SERVER_NAME : array[0..15] of Char = '192.168.1.2'; // ip-adress
DEFAULT_PORT : Word = 502; // modbusport

DEFAULT_PROTOCOL : Boolean = True; // True=tcp, False=udp
DEFAULT_REQUEST_TIMEOUT : LongWord = 1000; // in ms

{ Engänge difination }
Eingang1: Byte = 0; //
Eingang2: Byte = 1; //
Eingang3: Byte = 2; //
Eingang4: Byte = 3; //
Eingang5 : Byte = 4; // Reserve
Eingang6 : Byte = 5; // Reserve
Eingang7 : Byte = 6; // Reserve
Eingang8 : Byte = 7; // Reserve

{ Ausgänge difination }
Ausgang1 : Byte = 0; // Reserve
Ausgang2 : Byte = 1; // Reserve
Ausgang3 : Byte = 2; // Reserve
Ausgang4 : Byte = 3; // Reserve
Ausgang5 : Byte = 4; // Reserve
Ausgang6 : Byte = 5; // Reserve


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rogi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 08.06.11 15:42 
Hi Leute,

unter Win7 funktioniert es auch.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ggeiser
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mo 15.08.11 23:15 
Hallo!

Ich versuche mich momentan auch damit, eine WAGO 750-841 mittels Delphi auszulesen bzw. zu beschreiben. Ich scheitere aber leider schon am Auslesen. Bis zum Verbindungsaufbau funktioniert alles wunderbar. Ich kann auch die Schreib- bzw. Lesebefehle aus der mbt.dll ohne Fehlermeldung ausführen. Nur passiert bei den Schreibbefehlen nichts und beim Lesen ändert sich die Variable nicht.

Ich bin leider noch kompletter Anfänger mit der WAGO und wäre daher sehr dankbar, wenn mir jemand ein kurzes und simples Programm zur Verfügung stellen könnte, aus welchem ich den richtigen Einsatz der Befehle aus der mbt.dll ableiten könnte.

Vielen Dank im Voraus!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Rogi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 30.09.11 15:01 
Hi,

hier ist die Code:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function TForm1.Eingang(AdrEingang:Integer):Boolean; // Eingang lesen
var
ReadBuffer : array[0..250] of Byte;
begin
If (MBTReadCoils(hSocket, MODBUSTCP_TABLE_OUTPUT_COIL,AdrEingang, 1, @ReadBuffer, nil, 0) = S_OK) then
begin
Case ReadBuffer[0] of
0: Eingang := False; // Engang ist nicht gesetzt
1: Eingang := True; // Eingang ist gesätzt
end;
end else begin // wenn es nicht geklappt hat Fehlermeldung generieren
Application.MessageBox('Es ist ein Fehler beim WagoI/O aufgetreten !', 'write error', MB_OK);
end;
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
BigAl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 31

XP, Vista, 7, 2000+ Server
RAD Studio XE / XE2 EP/Prof., C#, MSSQL, HTML, PHP, Step 7...
BeitragVerfasst: Di 04.10.11 11:47 
Hallo zusammen,

bin gerade etwas verwirrt. Ich nutze auch schon seit ein paar Jahren die WAGO-Module mit Delphi. Das Ganze mach ich auch über die mbt.dll (Modbus). Weiterhin nutze ich die MBT.PAS (Schnittstelle zur DLL) und die MBTObj.pas (objektorientierte Schale zu MBT.pas). Mit Sockets usw. muss ich mich - dank der MBTObj.pas) nicht rumärgern. Die Deklaration von ReadCoils sieht z.B. so aus:

TModBusConnection.ReadCoils(Address, Count: Cardinal; var Value: Boolean): Cardinal;

oder um mehrere Eingänge zu lesen:

TModBusConnection.ReadCoils(Address, Count: Cardinal; var Data: TDynBoolArray): Cardinal;

Das Objekt hat natürlich die gesamte Funktionalität um Werte zu lesen, zu schreiben usw.. Ich nutze neben den digitalen auch die analogen Funktionen. Die analogen Funktionen sind in meiner Applikation momentan aber nur lesend... Habe die in der Vergangenheit aber auch schon geschrieben...

Gruß
Alex
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home