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 ,…

$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

Hallo zusammen,

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

Gruß

Hi mactoolz,

Da hier soviel Resonanz besteht :frowning:

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

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 :mad: …

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

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. :confused: Liegt aber auch an mir :smiley:

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ß

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 … :wink:

Xaver

ja …

ja sind gleich und passen perfekt …

sind im Ascii Format, sprich lesbare Zeichen …

der IPS Befehl

$Sended = RegVar_SendText($InstRegVar, $Senddata4);		

bekommt keine Länge der zu sendenden Daten …

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 .

die SPS bekommt über den Client ein Empfangs-Meldung die Länge mitgeteilt …

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

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

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ß