+ Antworten
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Standard RegisterVariable mehrere Datenblöcke

    Hallo zusammen,

    ich wende für den Datenaustausch mit meiner SPS eine Tcp Server/Client Kommunikation an.
    Jetzt ist es so das ich Blockweise die Daten an die SPS sende und nicht alles in einem TCP Stream packe.

    Momentan sende ich die Daten so ,..

    Code:
    $SleepTime = 200;
    
    $Sended = FALSE;
    $Sended = RegVar_SendText($InstRegVar, $Senddata1);
    
    if ($Sended)
    {	
    	$Sended = FALSE;
    	IPS_Sleep($SleepTime);	
    	$Sended = RegVar_SendText($InstRegVar, $Senddata2);
    	
    	if ($Sended)
    	{
    		$Sended = FALSE;		
    		IPS_Sleep($SleepTime);		
    		$Sended = RegVar_SendText($InstRegVar, $Senddata3);
    		
    		if ($Sended)
    		{	
    			IPS_Sleep($SleepTime);					
    			$Sended = RegVar_SendText($InstRegVar, $Senddata4);									
    		}				
    	}
    }
    Frage ist ob ich mehrere Server Sockets bereit stellen soll, das ist meine Idee oder doch alles in einem Block senden.

    Wobei ich gemerkt habe das ich auf der SPS Seite irgendwie am Ende des Streams mir Byte Informationen fehlen.
    Kann momentan das nicht ausfindig machen wo das Problem auf der SPS Seite liegt,
    daher die Frage wie man sowas auch am besten lösen könnte bzw. vielleicht anders und oder auch besser.


    Gruß
    MacToolz
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

  2. #2
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Hallo zusammen,

    hat jemand eine Idee zu diesem Problem bzw. einen Ansatz wie man sowas
    am besten umsetzt.


    Gruß
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

  3. #3
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    155

    Hi mactoolz,

    Da hier soviel Resonanz besteht :-(

    SPS kenne ich nun ganz und gar nicht. Wenn ich es recht verstehe Kommt ein ganzes packet nicht / bzw mit fehlern an?
    Darum machst du das splitting der Daten in Blöcke ist das soweit korrekt von mir erkannt?

    wie ist diese SPS verbunden ? USB / Seriell / Wandler Serial auf USB
    es wäre möglich das die SPS nicht schnell genug sind... ich warte mal auf deine Antwort
    Xaver

  4. #4
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Hi,

    ist ja kein reines SPS Thema, sondern wie oben beschrieben geht es um ein TcpIP Server/Client Socket Verbindung.

    Daher ist es nicht relevant sich grundlegend über das SPS Thema zu kümmern.
    Aber grundlegend ist die SPS sehr schnell. Ist eine Beckhoff SPS und läuft mit einer 4ms Task.
    Ich hätte besser das Schlagwort SPS nicht erwähnt ...

    Daher für mich grundlegend die Frage, würde man mehrere Verbindungen öffnen oder so wie ich die Datenblöcke versende über eine einzige Verbindung.

    Von der Sache her hast du es richtig erkannt.


    Gruß
    MacToolz
    Geändert von mactoolz (02.09.19 um 20:03 Uhr)
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

  5. #5
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    155

    Zitat Zitat von mactoolz Beitrag anzeigen
    Hi,
    ist ja kein reines SPS Thema, sondern wie oben beschrieben geht es um ein TcpIP Server/Client Socket Verbindung.
    Hallo Thomans
    Der TcpServer ist der SPS und IPS verbunden über einen ClientSocket ? oder umgekehrt ?

    wie groß sind die Daten b/kb/mb ?

    Kommen die Daten immer falsch an oder nur gelegentlich

    ist etwas undurchsichtig für mich. Liegt aber auch an mir
    Geändert von Tierfreund (02.09.19 um 14:14 Uhr)

  6. #6
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Hi,

    der Server ist IPS und der Client dann die SPS.

    Die Daten die ich sind noch im Byte Bereich. Aus der SPS sende ich ca. 2100Byte und die SPS erhält ca. 700 Byte.

    Aus der Sicht der SPS an IPS senden ist unproblematisch, nur das die 700 Byte nicht vollständig
    ankommen ist komisch. Es fehlt nichts mitten drin sondern es fehlen ein paar Byte am Ende.

    Gruß
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

  7. #7
    Registriert seit
    Jul 2014
    Ort
    Hannover
    Beiträge
    155

    Dann ist die Register Variable an einen ServerSocket gekoppelt.

    SInd die daten die du sendest im ServerSocket Debug log identisch mit den Datenblöcken oder dem Datenblock den du sendest?
    Wie stellst du die sende Daten zusammen, reine TXT daten "1,2,3,4.." oder Binärdaten bzw hex daten ?
    Der ServerSocket sendet alles was er bekommt, sprich die länge des übergegeben Strings, daher vermute ich ein problem der convertierung der Daten in den String?
    sind alle blöcke gleich oder einfach nur ..teile des strings?

    Seltsam finde ich es tatsächlich das bei den wenigen bytes die letzten fehlen, wenn du die blöcke einzeln sendest jedoch nicht.
    Erwartet der SBS daten in blöcken bzw fester länge, oder EOF zeichen?

    Immerhin funktioniert dein script ja erstmal ....

    Xaver

  8. #8
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Zitat Zitat von Tierfreund Beitrag anzeigen
    Dann ist die Register Variable an einen ServerSocket gekoppelt.
    ja ...

    Zitat Zitat von Tierfreund Beitrag anzeigen
    SInd die daten die du sendest im ServerSocket Debug log identisch mit den Datenblöcken oder dem Datenblock den du sendest?
    ja sind gleich und passen perfekt ...

    Zitat Zitat von Tierfreund Beitrag anzeigen
    Wie stellst du die sende Daten zusammen, reine TXT daten "1,2,3,4.." oder Binärdaten bzw hex daten ?
    sind im Ascii Format, sprich lesbare Zeichen ...

    Zitat Zitat von Tierfreund Beitrag anzeigen
    Der ServerSocket sendet alles was er bekommt, sprich die länge des übergegeben Strings, daher vermute ich ein problem der convertierung der Daten in den String?
    der IPS Befehl

    Code:
    $Sended = RegVar_SendText($InstRegVar, $Senddata4);
    bekommt keine Länge der zu sendenden Daten ...

    Zitat Zitat von Tierfreund Beitrag anzeigen
    sind alle blöcke gleich oder einfach nur ..teile des strings?
    sind Teilstrings, die habe ich so zerlegt bzw. zusammen gesetzt das es passt ...
    konnte bis dato nicht erkennen wo die Grenze der Anzahl der Bytes ist.
    Was aber klar ist das die Teilstrings unterschiedlich lang sind .

    Zitat Zitat von Tierfreund Beitrag anzeigen
    Seltsam finde ich es tatsächlich das bei den wenigen bytes die letzten fehlen, wenn du die blöcke einzeln sendest jedoch nicht.
    Erwartet der SBS daten in blöcken bzw fester länge, oder EOF zeichen?
    die SPS bekommt über den Client ein Empfangs-Meldung die Länge mitgeteilt ...

    Zitat Zitat von Tierfreund Beitrag anzeigen
    Immerhin funktioniert dein script ja erstmal ....

    so an und für sich ja ...


    Ich frage mal andersherum. Kann ich über IPS unendlich viele Bytes über die RegisterVariable versenden?
    Oder soll ich mehrere Ports zur SPS öffnen ?


    Würde mich mal interessieren was andere dazu sagen


    Gruß
    MacToolz
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

  9. #9
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,190

    Solange die TCP Verbindung besteht braucht es keine weiter Verbinden über weitere Sockets oder Ports.
    Du kannst so lange senden, bis eine Seite die Verbindung schließt.
    Im Fall vom Serversocket von IPS passiert das normalerweise aber nicht von IPS Seite, sondern nur auf Anforderung des Clients.
    Wenn die Verbindung geschlossen wird, siehst du das im Logfile / Meldungsfenster.
    Einen sleep oder ähnliches braucht es eigentlich auch nicht. TCP hat dafür eine Funktion um Daten erst dann zu senden wenn die Gegenseite sie auch empfangen kann.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  10. #10
    Registriert seit
    Dec 2012
    Ort
    Großraum Stuttgart ...
    Beiträge
    768

    Hi,

    ja so kenne ich das Prozedere auch. Aber irgendwie klappt das senden der Daten momentan nur so
    das ich Teildatenblöcke senden muss.


    Mhh .....

    ok dann wäre erstmal kein anderes Verhalten was den TcpIP Server/Client angeht.

    Dann muss ich doch wohl eher nochmal auf der SPS Seite schauen wo das Problem liegt.


    Gruß
    Win10 IPS 5.0, ZWave (Fibaro), ZigBee (Osram), EnOcean (Eltako), Homematic, Philips, Beckhoff CX2030, W&T Ethernet/RS485 ...

Ähnliche Themen

  1. RegisterVariable
    Von Axel37 im Forum Allgemeine Diskussion
    Antworten: 1
    Letzter Beitrag: 30.05.17, 19:49
  2. RegisterVariable Problem
    Von madru im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 18.02.15, 15:49
  3. RegisterVariable Fragen
    Von Magmaster im Forum Skripte, PHP, SQL
    Antworten: 14
    Letzter Beitrag: 24.09.09, 19:13
  4. Registervariable
    Von RWN im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 1
    Letzter Beitrag: 04.05.09, 22:35
  5. Registervariable
    Von jheinz im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 06.09.06, 18:43