Network.lib mit CoDeSys V2.3.8.0 od. V2.3.9.3

Begonnen von IL_Duce, 29. April 2011, 10:30:04

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

IL_Duce

Hallo,

Ich versuche gerad die Oscat Network Lib 'codesys_network_112.lib' in einem bestehendes Projekt in CoDeSys V2.3.8.0 zu verwenden.
Ziel ist es, im Falle einer Störung eine E-Mail an definierte E-Mail Adressen zu senden.

Leider bekomme ich 110 Fehler! Unter anderem: - " Fehler 3747: (3): Unbekannte Stringlänge: 'STRING_LENGTH' "
                                                                - " Fehler 3740: (3): Unbekannter Typ 'COUNT_BR' "
                                                                - " Fehler 3740: (8): Unbekannter Typ 'GEN_SIN' "
                                                                - " Fehler 3740: (3): Unbekannter Typ 'COUNT_BR' "
                                                                - und viele mehr

In der Doku zur Lib steht:
Benötigt die Bibliothek „SysLibFile.lib“ und „SysLibSockets.lib“
Lauffähig auf
WAGO 750-841
CoDeSys SP PLCWinNT V2.4

Bibliotheken sind drin. Kann es sein dass es nun an der CoDeSys Version liegt dass ich diese Störmeldungen bekomme?

Hat vielleicht jemand schon Erfahrung mit der Network Lib und CoDeSys V2.3.8.0 oder V2.3.9.3?

Mit Freundlichen Grüßen

Duke

Wer Rechtschreibfehler findet, darf sie behalten! :-)

franklin

hallo duke,

string_length => als globale constante deklarieren ( STRING_LENGTH : INT := 250 ; )

die anderen fehler bekommst du weg, indem du die oscat bibliotheken mit in dein projekt einbindest.

gruss frank

IL_Duce

Hallo Frank,

Danke für den Tip. Das funktioniert mal schon.
Wenn ich aber die Oscat_basic_332.lib hinzu füge, bekomme ich folgendes Problem:
Warnung 1904: Die Konstante 'STRING_LENGTH' verschattet eine gleichnamige Konstante in der Bibliothek
und
Fehler3803: (20): Speicher für globale Variablen aufgebraucht. Variable 'DLOG_FILE_TO_SMTP', 22500 Byte.

Irgendwelche tips?

peewit

Warnung 1904: Die Konstante 'STRING_LENGTH' verschattet eine gleichnamige Konstante in der Bibliothek

schau mal ob die oscat_basic mehrmals als bibliothek eingebunden ist


der andere fehler hat wahrscheinlich etwas mit der baustein anazahl zu tun


hierzu gibt es im forum schon einige tips, wie man damit umgeht

IL_Duce

So habe jetzt mal Probehalber nicht nur die Maximale Anzahl an Bausteinen (wie im Forum beschrieben, jedoch leider erfolglos) sondern auch den Speicher für Global auf 16#80000 gesetzt.
Ob das nachher mit dem Zielsystem noch klappt werden wir noch sehen.
Ich hab leider nicht mehr im allgemeinen Forum darüber gefunden.

Jetzt läuft das Kompilieren durch mit 2 übrigen Fehlern.

Fehler 4001: IP_CONTROL(136): Variable 'Socket_FD_SETSIZE' nicht deklariert
Fehler 4001: IP_CONTROL2(136): Variable 'Socket_FD_SETZIZE' nicht deklariert

Muss ich diese Variable selber deklarieren, und wenn ja wie sollte sie aussehen, oder sollten die in einer LIB vorhanden sein?
Die 'oscat_basic_332.lib' ist eingebunden!

Habe außerdem schon versucht die Network LIB etwas ab zu specken. Jedoch kann ich nicht kompillieren da mir die Bibliothek
oscat.lib 2.2.11 20:48:25
fehlt.

Kann ich mir die wo laden?

peewit

siehe doku kapitel: 2.3. Testumgebung und Voraussetzungen

du lädst dier ganz normal die oscat_basic 332 herunter , und gibst diese dort als bibliothek an


Fehler 4001: IP_CONTROL(136): Variable 'Socket_FD_SETSIZE' nicht deklariert
Fehler 4001: IP_CONTROL2(136): Variable 'Socket_FD_SETZIZE' nicht deklariert

du musst die network.lib öffnen und dort unter bibliotheken die notwendigen bibliotheken mit korrekten zugriffpfad angeben !



solltest du auf twincat arbeiten , dann benötigst du noch TwinCAT TCP/IP Connection Server


so wie es aussieht hast du die ''oscat_basic_332.lib' manuell eingebunden, und denn vorhandenen bibliotheksverweis auf
oscat.lib drinnengelassen.

lösche einfach den verweis oscat.lib raus, sonst hast du eine einbindung zuviel angegeben..

'oscat.lib' ist nur ein versions neutraler bilbiotheksverweis auf die oscat_basic.lib

IL_Duce

Habe es nun mit allen möglichen Bibliotheken versucht.
Erhalte immernoch die selben 2 Meldungen bezüglich SOCKET_FD_SETSIZE wenn ich die Network.lib öffne.

Was ist das für eine Variable? Dann kann ich sie selber deklarieren.

Ich arbeite übrigens nicht auf TwinCAT, zumindest nicht dass ich wüsste.

peewit

du brauchst gar nichts selber deklarieren, es reicht wenn du in der network.lib schaust das du benötigten libs verfügbar machst

siehe bild


[gelöscht durch Administrator]

IL_Duce

Hmmmm ich scheine wohl zu doof zu sein. Irgendwas mach ich falsch.

Bei mir sieht es folgendermaßen aus. -> Siehe Bild.

Wenn du Zeit und Lust hast gebe ich dir gerne Remote Zugriff.
Dann kannst du es dir an meinem Rechner ansehen.

MFG

Duke

[gelöscht durch Administrator]

peewit

wenn du die syslibsockets.lib einbindest, dann bekommst du automatisch von dieser bibliothek neue globale variablen
und eine davon ist die was dir abgeht

schau mal nach unter dieser bibliothek -> globale variablen
dort findest du das alles

das muss aber schon vorhanden sein !!!!!!

hast du viellecht ein problem mit dem speicher/bausteinanzahl etc... ?


siehe bild

VAR_GLOBAL CONSTANT
   SOCKET_INVALID:DINT:=-1;

   (* AddressFamily *)
   SOCKET_AF_UNSPEC:INT:=   0;         (* unspecified *)
   SOCKET_AF_LOCAL:INT:=   1;            (* local to host (pipes, portals) *)
   SOCKET_AF_UNIX:INT:=SOCKET_AF_LOCAL;      (* backward compatibility *)
   SOCKET_AF_INET:INT:=2;               (* internetwork: UDP, TCP, etc. *)
   SOCKET_AF_IMPLINK:INT:=3;            (* arpanet imp addresses *)
   SOCKET_AF_PUP:INT:=4;               (* pup protocols: e.g. BSP *)
   SOCKET_AF_CHAOS:INT:=5;            (* mit CHAOS protocols *)
   SOCKET_AF_NS:INT:=6;               (* XEROX NS protocols *)
   SOCKET_AF_ISO:INT:=7;               (* ISO protocols *)
   SOCKET_AF_OSI:INT:=SOCKET_AF_ISO;
   SOCKET_AF_ECMA:INT:=8;            (* european computer manufacturers *)
   SOCKET_AF_DATAKIT:INT:=9;            (* datakit protocols *)
   SOCKET_AF_CCITT:INT:=10;            (* CCITT protocols, X.25 etc *)
   SOCKET_AF_SNA:INT:=11;               (* IBM SNA *)
   SOCKET_AF_DECnet:INT:=12;            (* DECnet *)
   SOCKET_AF_DLI:INT:=13;               (* DEC Direct data link interface *)
   SOCKET_AF_LAT:INT:=   14;               (* LAT *)
   SOCKET_AF_HYLINK:INT:=15;            (* NSC Hyperchannel *)
   SOCKET_AF_APPLETALK:INT:=16;      (* Apple Talk *)
   SOCKET_AF_ROUTE:INT:=17;            (* Internal Routing Protocol *)
   SOCKET_AF_LINK:INT:=18;            (* Link layer interface *)
   SOCKET_pseudo_AF_XTP:INT:=19;      (* eXpress Transfer Protocol (no AF) *)
   SOCKET_AF_COIP:INT:=20;            (* connection-oriented IP, aka ST II *)
   SOCKET_AF_CNT:INT:=21;            (* Computer Network Technology *)
   SOCKET_pseudo_AF_RTIP:INT:=22;      (* Help Identify RTIP packets *)
   SOCKET_AF_IPX:INT:=23;               (* Novell Internet Protocol *)
   SOCKET_AF_SIP:INT:=24;               (* Simple Internet Protocol *)
   SOCKET_pseudo_AF_PIP:INT:=25;      (* Help Identify PIP packets *)
   SOCKET_AF_MAX:INT:=26;
   SOCKET_AF_INET_BSD:INT:=100;      (* BSD-specific INET af *)
   SOCKET_AF_INET_STREAMS:INT:=101;   (* STREAMS-specific INET af *)

   (* Level number for (get/set)sockopt() to apply to socket itself. *)
   SOCKET_SOL:WORD:=16#ffff;

   (* Socket options *)
   SOCKET_SO_DEBUG:DINT:=16#0001;         (* turn on debugging info recording *)
   SOCKET_SO_ACCEPTCONN:DINT:=16#0002;   (* socket has had listen() *)
   SOCKET_SO_REUSEADDR:DINT:=16#0004;   (* allow local address reuse *)
   SOCKET_SO_KEEPALIVE:DINT:=16#0008;      (* keep connections alive *)
   SOCKET_SO_DONTROUTE:DINT:=16#0010;   (* just use interface addresses *)
   SOCKET_SO_BROADCAST:DINT:=16#0020;   (* permit sending of broadcast msgs *)
   SOCKET_SO_USELOOPBACK:DINT:=16#0040;   (* bypass hardware when possible *)
   SOCKET_SO_LINGER:DINT:=16#0080;         (* linger on close if data present *)
   SOCKET_SO_OOBINLINE:DINT:=16#0100;      (* leave received OOB data in line *)
   SOCKET_SO_REUSEPORT:DINT:=16#0200;   (* allow local address & port reuse *)
   SOCKET_SO_SNDBUF:DINT:=16#1001;      (* send buffer size *)
   SOCKET_SO_RCVBUF:DINT:=   16#1002;      (* receive buffer size *)
   SOCKET_SO_SNDLOWAT:DINT:=16#1003;   (* send low-water mark *)
   SOCKET_SO_RCVLOWAT:DINT:=16#1004;   (* receive low-water mark *)
   SOCKET_SO_SNDTIMEO:DINT:=16#1005;   (* send timeout *)
   SOCKET_SO_RCVTIMEO:DINT:=16#1006;   (* receive timeout *)
   SOCKET_SO_ERROR:DINT:=16#1007;      (* get error status and clear *)
   SOCKET_SO_TYPE:DINT:=16#1008;         (* get socket type *)
   SOCKET_SO_PROTOTYPE:DINT:=16#1009;   (* get/set protocol type *)
   (* TCPIP socket options *)
   SOCKET_TCP_NODELAY:DINT:=16#01;   (* don't delay send to coalesce packets *)
   SOCKET_TCP_MAXSEG:DINT:=16#02;   (* set maximum segment size *)

   (* Socket types *)
   SOCKET_STREAM:DINT:=1;         (* stream socket *)
   SOCKET_DGRAM:DINT:=2;         (* datagram socket *)
   SOCKET_RAW:DINT:=3;            (* raw-protocol interface *)
   SOCKET_RDM:DINT:=4;            (* reliably-delivered message *)
   SOCKET_SEQPACKET:DINT:=5;      (* sequenced packet stream *)

   (* Inet address definitions *)
   SOCKET_INADDR_ANY:UDINT:=16#00000000;
   SOCKET_INADDR_LOOPBACK:UDINT:=16#7f000001;
   SOCKET_INADDR_BROADCAST:UDINT:=16#ffffffff;
   SOCKET_INADDR_NONE:UDINT:=16#ffffffff;

   (* Protocols *)
   SOCKET_IPPROTO_IP:DINT:=0;         (* dummy for IP *)
   SOCKET_IPPROTO_ICMP:DINT:=1;      (* control message protocol *)
   SOCKET_IPPROTO_IGMP:DINT:=2;      (* group management protocol *)
   SOCKET_IPPROTO_GGP:DINT:=3;      (* gateway^2 (deprecated) *)
   SOCKET_IPPROTO_TCP:DINT:=6;      (* tcp *)
   SOCKET_IPPROTO_PUP:DINT:=12;      (* pup *)
   SOCKET_IPPROTO_UDP:DINT:=17;      (* user datagram protocol *)
   SOCKET_IPPROTO_IDP:DINT:=22;      (* xns idp *)
   SOCKET_IPPROTO_ND:DINT:=77;      (* UNOFFICIAL net disk proto *)
   SOCKET_IPPROTO_RAW:DINT:=255;   (* raw IP packet *)
   SOCKET_IPPROTO_MAX:DINT:=256;

   (* Flags *)
   SOCKET_MSG_OOB:DINT:=16#1;         (* process out-of-band data *)
   SOCKET_MSG_PEEK:DINT:=16#2;         (* peek at incoming message *)
   SOCKET_MSG_DONTROUTE:DINT:=16#4;   (* send without using routing tables *)

   (* Ioctl commands *)
   SOCKET_FIONREAD:DINT:=1;            (* get num chars available to read *)
   SOCKET_FIONBIO:DINT:=2;               (* set to non-blocking *)

   (* For SysSockSelect() descriptors *)
   SOCKET_FD_SETSIZE :DINT :=   64;
   MAX_SOCKET_FD_SETSIZE : DINT := 63;
END_VAR



[gelöscht durch Administrator]

IL_Duce

Das sieht doch mal gut aus. Danke!

In meiner SysLibSockets.lib Variablen Deklaration fehlt der Eintrag
   (* For SysSockSelect() descriptors *)
   SOCKET_FD_SETSIZE :DINT :=   64;
   MAX_SOCKET_FD_SETSIZE : DINT := 63;

Ich schätze mal ich hab unter Umständen eine zu alte Version dieser Lib.
Werde das gleich überprüfen.

Ich danke dir vielmals für deine kompetente und rasche Hilfe.

Liebe Grüße
Duke

peter_f

Auch wenn ich weiß, dass es eher schlechter Stil ist, auf ein altes Thema noch mit aufzuspringen, bleibt mir nichts anderes übrig.

Erst mal zur Einleitung, ich bin ein blutiger Anfänger und brauche deshalb für alles eine idiotensichere Beschreibung :-)

Ich habe das selbe Problem, wie der Themenstarter, ich bekomme beim Upload ca 65 mal die Fehlermeldung "unbekannte Stringlänge". Deine Erklärung weshalb das passiert, und wie die Lösung aussieht, leuchtet mir ein. Meine Frage ist jetz, wo deklariere ich Konstanten? Wenn ich die Deklaration bei den globalen Variablen eingebe, ändert das nichts. Allerdings weiss selbst ich, dass Variablen keine Konstanten sind. Was mich zudem verunsichert ist, dass beim Auftreten des Fehlers auch die Stelle angegeben wird, wo er auftritt. Das sind Bausteine, die ich überhaupt nicht verwende.

Ein weiterer Fehler, für den ich keinen Grund sehe ist die Meldung "unbekannter Typ byte_to_bits". Fehlt mir da eine lib, die Konvertierungen enthält?

Gruß
Peter


peewit

du öffnest die syslibsocket.lib als projekt und koierst die einträge bei den globalen variablen dazu.

solltest du es nicht schaffen, könntest du zumindest deine syslibsocket.lib hier online stellen, dann kann man sich die ansehen, ob hier wirklich das problem besteht, und mit den infos ergänzen

peter_f

#13
Hallo Peewit,
erstmal vielen Dank für Deine schnelle Antwort. Der Fehler lag an einer anderen Stelle. Offensichtlich muss zur Nutzung der Oscat Network.lib auch die Standart.lib eingebunden sein. Das ging nicht, weil zu viele Bausteine. An anderer Stelle hier im Forum hast Du beschrieben, dass man im Projekt die Anzahl der möglichen Bausteine erhöhen kann. Genau das habe ich gemacht, dann die Standart.lib auch noch eingebunden und alles war gut.
Jetzt hänge ich an einer anderen Stelle. Ich versuche eine CSV-Datei zu schreiben, Dazu habe ich die Beispielvorlage aus der Beschreibung zur Network.lib verwendet und auf meine Bedingungen hin geändert. Es wird kein CSV erzeugt.
Ich habe mal mein Programm angehängt, vielleicht hast Du Zeit und Lust mal draufzuschauen, wahrscheinlich ist es mal wieder nur ein dummer kleiner Fehler mit einer falsch deklarierten Variablen oder so.
Ich habe vergessen zu erwähnen, dass ich mit der SoftwarePLC von 3s arbeite. Ziel der Übung soll sein, dass ich Zählerstände (3-Phasenmessklemme von Wago) per Netzwerkvariablen auf einem PC sammle und erstens visualisiere (Das habe ich hinbekommen) und zweitens zur weiteren Auswertung in einem für alle lesbaren Format abspeichere.

[gelöscht durch Administrator]

peewit

#14
hallo

die wichtigsten funktionen des datenlogger sind zeitgesteuert bzw. zeitabhängig
wenn du aber dem DLOG_STORE_CSV keine aktueller Zeit übergibt beim parameter "DTI" dann wird auch nichts passieren !
bei dir ist immer und ewig die zeit 1.1.1970 0:00:00 und der baustein wartet halt auf die nächste sekunde und das dauert .......


die network.lib hat im ordner "demo" viele verschiedenen demo programme enthalten
wie z.b. dlog_file_csv das solltest du mal auf deiner sps testen , und dann erst mit eigenen versuchen weiter machen

du musst die network.lib als projekt öffnen und in den baustein ordner "demo" nachschauen