http_get _TwinCat3 Beispiel

Begonnen von KL.Feigling, 19. Mai 2016, 18:56:17

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

KL.Feigling

Hallo Zusammen,
ich habe die Libs BASIC, Network und Building erfolgreich in TwinCAT3 eingebunden und bin derzeit dabei den FB http_Get ans laufen zu bekommen.

Ich möchte gerne mit dem Baustein meine SONOs boxen steuern. Dazu habe ich erfolgreich einen PHP-Server erstellt. Wenn ich in meinem Browser zB.: "http://localhost/SonosLib/index.php?zone=Bad&action=Play" eingebe, wird die Box gestartet.
Jetzt möchte ich gerne diesen Link per TwinCAT mit Hilfe des http_Get-Bausteins ausführen.
Ich bekomme es leider aber nicht hin :-(

Könnte mir jemand vielleicht einen Beispiel code zur ansteuerung des Bausteins posten?


Ich hatte es so probiert: Aber leider ohne Erfolg

PROGRAM MAIN
VAR
   FB_HTTP_GET         : HTTP_GET;
   UrlData                  : URL;
   
   IP_CONTROL1   :IP_CONTROL;
   IP_C1              :IP_C;
   S_BUF1              : NETWORK_BUFFER;
   R_BUF1              : NETWORK_BUFFER;
   send               : BOOL;
END_VAR


IF send THEN
   S_BUF1.BUFFER[0] := BYTE#16#1B;
   S_BUF1.SIZE :=1;
   IP_C1.C_MODE := 3;
   IP_C1.C_ENABLE := TRUE; (* Verbindungsaufbau freigeben *)
   IP_C1.R_OBSERVE := TRUE; (* Datenempfang überwachen *)
   send := FALSE;
END_IF;

UrlData := STRING_TO_URL('http://localhost/SonosLib/index.php?zone=Bad&action=Play','','');

FB_HTTP_GET(
   GET:= send,
   URL_DATA := UrlData,
   IP_C :=IP_C1,
   S_BUF := S_BUF1,
   R_BUF :=R_BUF1);

peewit

hi

du musst den ip_control noch zyklisch aufrufen !
sonst passiert gar nichts

schau doch mal in der network.lib im ordner "demo" rein
lib als projekt öffnen und die ausgeblendeten bausteinen ansehen

KL.Feigling

Danke für deinen Tipp aber leider habe ich das Problem immer noch nicht gelöst. Ich habe das Program nach dem Beispiel aufgebaut, aber leider funktioniert es trotzdem nicht. Die IP-Adresse ist von meinem Computer. Kann dort der Fehler liegen?
Hoffe due kannst mir nochmal einen Tipp geben.
Gruß


PROGRAM Sonos
VAR
   url_text : STRING := 'http://localhost/SonosLib/index.php?zone=Bad&action=Play';
   URL_DATA : URL;
   IP_C: IP_C;
   S_BUF: NETWORK_BUFFER;
   R_BUF: NETWORK_BUFFER;
   IP_CONTROL_1: IP_CONTROL;

   DNS_CLIENT: DNS_CLIENT;
   HTTP_GET: HTTP_GET;
   http_release: BOOL;
   enable: BOOL := TRUE;
   http_status: STRING;
   header_start: UINT;
   header_stop: UINT;
   body_start: UINT;
   body_stop: UINT;
   http_get_done: BOOL;
   http_get_error: DWORD;
   COUNT_DR: COUNT_DR;
   cycles: DWORD;
   TON_1: TON;
   F_TRIG: F_TRIG;
END_VAR



URL_DATA := STRING_TO_URL(url_text,'','');

TON_1(
   IN:= http_get_done,
   PT:= T#1S,
   Q=> http_release
);

f_TRIG(
   CLK:=http_get_done,
   Q=> enable   
);

COUNT_DR(
   UP:=http_get_done,
   CNT=> cycles   
);

IP_CONTROL_1(
   IP:= DWORD_OF_BYTE(   192,168,178,44),
   TIME_OUT := T#4S,
   S_BUF:=S_BUF,
   R_BUF:=   R_BUF,
   IP_C:=IP_C
);

DNS_CLIENT(
   ACTIVATE:= enable,
   DOMAIN:= URL_DATA.DOMAIN,
   IP_C := IP_C,
   S_BUF := S_BUF,
   R_BUF := R_BUF
);

HTTP_GET(
   IP4 :=  DNS_CLIENT.IP4,
   GET :=  DNS_CLIENT.DONE,
   MODE:= 0,
   UNLOCK_BUF:= http_release,
   URL_DATA := URL_DATA,
   IP_C := IP_C,
   S_BUF := S_BUF,
   R_BUF := R_BUF,
   
   HTTP_STATUS => http_status,
   HEADER_START  => header_start,
   HEADER_STOP  => header_stop,
   BODY_START  => body_start,
   BODY_STOP  => body_stop,
   DONE  => http_get_done,
   ERROR  => http_get_error
);

peewit

ersetzte in deiner url den begriff localhost durch deine lokale ip-adresse oder 127.0.0.x je nach anzahl der lokalen schnittstellen

KL.Feigling

Hallo peewit,
ich bekomme es leider einfach nicht hin und mein Wissen reicht nicht aus um selbst den Fehler zu finden.
Ich habe Localhost durch die Locale IP geändert, aber leider tut sich trotzdem nichts.

Ich wäre dir mega Dankbar wenn du mal nachschauen könntest!


peewit

da ich an sich gut bin aber doch kein zauberer oder hellseher brauche ich mehr infos

kannst du zumindest online zustände online stellen
oder einen wireshark mitschnitt machen

hast du denn irgendeine andere ethernet kommunikation mit der lib schon mal am laufen gehabt
es ist ja leicht möglich das es prinzipiell nicht geht und nicht direkt mit deinem programm zu tun hat


Maulwurf

Hallo,
ich versuche gerade auch meine Sonos Boxen mit Twincat3 anzusteuern. Könnte mir jemand vielleicht ein Beispiel-Programm zusenden?
Oder erklären wie ich die Http_Get Demo einbinde/benutze?
Muss ich nur die Ip des DNS Server einstellen und die Lib TCP/IP einbinden oder muss ich noch einen TCP/IP Server erstellen? Wenn ja wie?

Wäre echt Mega nett, wenn mir jemand ein lauffähiges  Beispiel für TwinCat3 schicken könnte.


peewit

öffne mal die lib als projewkt und schaue in den ordner "demo"
dort sind einige beispiel zu finden

hast du denn schon nach gesehen wie das sonos protokoll aufgebaut ist

tcp / udp, port , datenformat  etc...

Nate

@KL.Feigling

Wie hast du die .libs eingebunden in Twincat 3?
Versuche es auch schon seit einigen Tagen.

Die Basic funktioniert einwandfrei, die Building geht nicht...  :'(