-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - peewit

#1741
der ip_control arbeitet absichtlich ohne select, und betreibt die socket-schnittstelle auch im "non-block" mode , damit man halbwegs
vernünftige zykluszeiten zu bekommen.

die meisten code-sample die herum geistern, benutzen die syslibsocket im block-mode, das heisst das eine system-funktion aufgerufen wird, 
und abhängig des aktuellen status dauert es kurz bis ewig bis die ablaufkontrolle wieder an das anwenderprogramm zurückgegeben wird.
darum muss man solche programme als extra-task ausführen, da ansonsten das anwenderprogramm nicht konstant abgearbeitet wird.
(für eine sps eine katatrophe !!!)


was funktioniert bei dir den nun , wie gut oder schlecht ?
und wie gelöst

#1742
hallo

ein kleiner tip

wenn du die tcp-bausteine von 3s verwendest musst du drauf aufpassen, das diese bausteine in einem eigenständigen task ausgerufen werden.
dein anwenderprogramm (zyklisches programm) muss in einem anderen task aufgerufen werden.

die 3s-tcp-bausteine arbeiten im block-mode das heisst es werden bestimmten systemfunktionen aufgerufen, und das anwenderprogramm
kann dann unbestimmte zeit in diesem baustein hängen bleiben (das was man bei einer sps überhaupt nicht braucht !)

vielleicht ist das dein problem, wenn du die bausteine benutzt.

das ist momentan auch mein problem mit der network.lib auf der windows-plattform das ich das im "non-block" modus momentan nicht gebacken bekomme....
 
#1743
1. welches demoprogramm von 3S
2. was hat funktioniert ohne slaves ?
3. was hat die tcp-verbindung mit den profibus-slaves zu tun

ich verstehe noch nicht ganz, was du da machst .....
#1744
hallo

die network.lib für codesys ist auf einer wago 750-841 sps entwickelt und getestet worden, und verwendet die SysLibSockets.lib

bei deinem System "CoDeSys 2.3.9.13; RTE 2.3.7.6; WinXp Professional V2002 SP3" sind theoretisch alle vorraussetzungen gegeben,
jedoch gibt es von system zu system leider immer kleiner funktionelle abweichungen.

Soweit ich es bisher feststellen konnte:

TCP Client (geht nicht, problem beim verbindungdaufbau)
TCP Server (geht)
UDP Client (geht)
UDP Server (geht)

------------

mit dem parameter c_mode gibst du den verbindungsmodus vor

0 = TCP Client (Aktiv)
1 = UDP Client (Aktiv)
2 = TCP Server (Passiv)
3 = UDP Server (Passiv)
somit ist c_mode = 0 für deine Anwendung richtig

c_mode musst du nur einmal beschreiben.
die wertigkeiten im sendbuffer sind auch so richtig , so wie du es angenommen hast,

--------------

in der network_lib sind diverse demo-programme enthalten (zum testen)

problem ist, das es viele diverse ethernet-bibliotheken gibt , die aber immer nur für eine plattform funktionieren, und so muss
man für jedes system immer eine adaptierung machen.

so wie es aussieht liegt es primär bei unserer network.lib am tcp_client problem auf Windows-Plattformen



hast du irgendwelche Demoprogramme für dein system , wo eine tcp kommunikation benutzt wird, und dies auch eindeutig funktioniert
wenn ja, bitte mit schicken....


sowie es aussieht musst du dich leider noch gedulden, bis die gründe gefunden sind....

---------------
noch ein paar tips

du schreibst... du hast einen tcp_server und deine sps soll als tcp_client sich mit diesem verbinden
das heisst dein kommunikationspartner (server) hat die ip-adresse '192.168.001.11'
du hast beim ip_control die adresse des tcp_clients angeben ?
bitte überprüfen

du hast in deinem sps-programm zwei ip-adressen in verwendung ?
es ist nur die ip-adresse des kommunikationspartners relevant, nur die sollte angegeben werden

die portnummer und ip-adresse kannst du über die IP_CONTROL Datenstruktur vorgeben, als auch über den IP_CONTROL direkt.
ich würde es aber so machen....

weiters gibt es in deinem testprogramm kein auswertung auf Datenempfang , kann solltest du auch dies vorgeben
IP_C1.R_OBSERVE:= FALSE; (* Datenempfang überwachen *)

------
IPServer_Adr:=IP4_DECODE('192.168.001.11');
IPClient_Adr:=IP4_DECODE('192.168.001.10');

es reicht wenn du die adresse einmal vor dem senden/empfangen konvertierst und übergibst


(* Login an Server senden *)
IF send THEN
  IP_C1.C_MODE := 0; (* auf SPS den TCP-Client Modus verwenden *)
  IP_C1.C_IP := IP4_DECODE('192.168.001.11'); (* Adresse des kommunikationspartners , in dem fall die des TCP-Servers *)
  IP_C1.C_PORT := 1000;
  IP_C1.C_ENABLE:= TRUE; (* Verbindungsaufbau freigeben *)
  IP_C1.R_OBSERVE:= FALSE; (* Datenempfang überwachen *)
  IP_C1.TIME_RESET:= TRUE;
  S_BUF1.BUFFER[0] := BYTE#16#01;
  S_BUF1.BUFFER[1] := BYTE#16#00;
  S_BUF1.BUFFER[2] := BYTE#16#00;
  S_BUF1.SIZE :=3;
  send := FALSE;
END_IF;

IP_CONTROL1(IP:=0 ,PORT:=0 ,TIME_OUT:=T#10s,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1 );

und in deinem demo-programm kann ich mit folgenden zeilen nichts anfangen

IP_C1.C_STATE;
IP_C1.C_ENABLE;
IP_C1.C_MODE;
IP_C1.ERROR;
IP_C1.FIFO;
IP_C1.R_OBSERVE;
IP_C1.TIME_RESET;


IP_CONTROL1(IP:=IPClient_Adr ,PORT:=1000 ,TIME_OUT:=T#10s,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1 );
IP_CONTROL1.c_enable;
#1745
hallo dtm

in deiner oscat_red3.lib bei der function DAY_OF_MONTH gibt es ein problem mit verschachtelten kommentaren
auch wenn man unter settings die verschachtelten kommentare aktiviert hat

du must einfach den rot markierten text rauslöschen

--------------------------------------------------------

(* calculate the day in the year *)
DAY_OF_MONTH := DAY_OF_YEAR(idate);
(* leap will be set to one for a leap year *)
leap := BOOL_TO_INT(LEAP_OF_DATE(idate));
(* if leap year deduct one from the days of the year *)
DAY_OF_MONTH := DAY_OF_MONTH - leap;
(* search if we are in month december to march ? *)
IF DAY_OF_MONTH > setup.MTH_OFS[9] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[11] THEN
      IF DAY_OF_MONTH > setup.mth_ofs[12] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[12];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[11];
      END_IF;
   ELSE
      IF DAY_OF_MONTH > setup.mth_ofs[10] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[10];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[9];
      END_IF;
   END_IF;
ELSIF DAY_OF_MONTH > setup.MTH_OFS[5] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[7] THEN
      IF DAY_OF_MONTH > setup.mth_ofs[8] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[8];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[7];
      END_IF;
   ELSE
      IF DAY_OF_MONTH > setup.mth_ofs[6] THEN
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[6];
      ELSE
         DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[5];
      END_IF;
   END_IF;
ELSIF DAY_OF_MONTH > setup.MTH_OFS[3] THEN
   IF DAY_OF_MONTH > setup.MTH_OFS[4] THEN
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[4];
   ELSE
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[3];
   END_IF;
ELSE
   (* since now we must be in february or january we need to add leap again *)
   DAY_OF_MONTH := DAY_OF_MONTH + leap;
   IF DAY_OF_MONTH > setup.MTH_OFS[2] THEN DAY_OF_MONTH := DAY_OF_MONTH - setup.mth_ofs[2]; END_IF;
   (* since nothing was true before, day_of_month must already be good *)
END_IF;

(*
(* this was try number one but a loop is too slow *)
(* calculate the day in the year *)
DAY_OF_MONTH := DAY_OF_YEAR(idate);
(* leap will be set to one for a leap year *)
leap := BOOL_TO_INT(LEAP_OF_DATE(idate));
(* if leap year deduct one from the days of the year *)
DAY_OF_MONTH := DAY_OF_MONTH - leap;
(* search if we are in month december to march ? *)
FOR month := 12 TO 3 BY -1 DO
   IF DAY_OF_MONTH > setup.MTH_OFS[month] THEN
      DAY_OF_MONTH := DAY_OF_MONTH - setup.MTH_OFS[month];
      RETURN;
   END_IF;
END_FOR;
(* since now we must be in february or january we need to add leap again *)
DAY_OF_MONTH := DAY_OF_MONTH + leap;
IF DAY_OF_MONTH > setup.MTH_OFS[2] THEN DAY_OF_MONTH := DAY_OF_MONTH - setup.mth_ofs[2]; END_IF;
(* since nothing was true before, day_of_month must already be good *)
*)




(*
Revision history

hm 22.1.2007      rev 1.1
   deleted unused variable day_in_year and day_in_year_begin

hm   1. okt 2007      rev 1.2
   changed code to use day_of_year and leap_of_date
   added compatibility to STEP7

hm   8. oct 2007      rev 1.3
   deleted unused variable yr

hm   8. jan 2008      rev 1.4
   improved performance

hm   25. oct. 2008   rev 2.0
   new code using setup constants
*)
#1746
mit der oscat_red3.lib gibts auch keine probleme

schicke mir dein projekte das sich nicht compilieren lässt als privat nachricht , oder stelle es einfach online...

#1747
hallo

ich glaube das dir noch ein baustein fehlt !

kannst du dein reduziertes projekt online stellen ?
#1748
auf 251 kommt er doch nur wenn eine funktion einen schweren fehler meldet, oder jemand das ENABLE wegnimmt

prüfe mal wieso dieser überhaupt dorthin kommt
#1749
Modulentwicklung / Re:OSCAT und SQL
11. Februar 2010, 15:39:59
bezüglich SQL-Zugriff hat sich nichts getan (keine Zeit)

das wichtigste dabei ist, das man sich informiert, mit welcher Schnittstelle / Protokoll man man einfachsten den zugriff realisieren kann
und das man an die protokoll-doku herankommt
#1750
hallo axalom

beachte aber trotzdem das du die network.lib auf einer nicht getesteten plattform benutzt.

Bekanntes Problem:
Plattform: Codesys SP PLCWinNT 2.4 + syslibsockets.lib
UDP Client + Server = läuft
TCP SERVER = läuft
TCP CLIENT = läuft nicht !

es ist leicht möglich das das auf deiner Plattform auch so ist

Leider sind die verschiedenen Plattformen trotz gleicher syslibsockets.lib nicht voll kompatibel
wir arbeiten an einer lösung .....
#1751
hallo axalom

ich habe dein testprogramm mit kleiner anpassung ausprobiert, es läuft korrekt !!
im anhang sieht du auch den mitschnitt mit etherreal

sag mir mal wie dein netzwerk aussieht

welche ip's hast du in deinem netzwerk
welche hardware/software ?

---------------------------
PROGRAM eeee
VAR
  IP_CONTROL1:IP_CONTROL2;
  IP_C1:IP_C;
  S_BUF1: NETWORK_BUFFER_SHORT;
  R_BUF1: NETWORK_BUFFER_SHORT;
  IP4_Adr:DWORD;
  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 *)
   IP4_Adr:=IP4_DECODE('192.168.001.157');
   send := FALSE;
END_IF;

IP_CONTROL1(IP:=IP4_Adr ,PORT:=1024 ,TIME_OUT:=T#1s,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1 );


[gelöscht durch Administrator]
#1752
was für eine plattform verwendest du genau: software/hardware ?

#1753
hallo axalom

nach dem ich nun mal genauer hingeschaut habe , ist mir dein problem klar geworden

das problem ist der mitunter grosse unterschied zwischen den verschiedene iec plattformen

das was du in der doku siehst ist ein programmier-beispiel für pcworx/multiprog (da die network-lib auf dieser plattform entwickelt wurde)

dort ist es so, das alle in_out var nach aufruf des bausteins wieder manuell rückgeführt werden müssen
(was eigentlich ziemlicher schmarrn ist, ist aber so)

das brauchst du bei codesys natürlich nicht !
da reicht es wenn du folgendes schreibst

IP_FIFO1(FIFO:=IP_C1.FIFO,STATE:=IP_STATE,ID:=IP_ID);

wir werden in der nächsten doku-release diesen unterschied vermerken...

(schau dir die demo-programm in der lib auch an !!)

mfg peewit
#1754
problem durch demo-modus ?

nein , hier wird nur ab 8 Byte I/O Daten kein Programm fertig kompiliert



du wirst sehen, wenn du pcworx auf einen anderen pc installiert, du wird es sich auch richtig verhalten

hast du irgenwelche Antivirus-programme laufen, die jeden filezugriff bremsen.


ich habe selber pcworx 5 und pcworx 6 auf windows7 laufen , jedoch im XP-MODE auf Win7
das heisst unter Win7 wird ein vollwertiges WinXP System betrieben (Virtualisiert), und auch hier läuft alles zeitgerecht ab !

http://www.microsoft.com/windows/virtual-pc/download.aspx
#1755
schön wenn es jetzt klappt.


Projekt erzeugen:

alles was über 30 sek drüber hinaus geht ist eher nicht normal !

pcworx ist zwar für vista freigegeben, jedoch nicht offiziell für windows 7

dein projekt liegt auf einer festplatte und nicht auf einen netzlaufwerk, oder usb-stick oder ähnliches ?