oscat.lib > oscat.lib fuer CoDeSys 3

Network.lib

<< < (3/8) > >>

mactoolz:
Hi,

ab wann darf man denn sich Profi nennen :-).
Die Funktionsweise vom "Size" ist mir bekannt, in beide Richtungen.

Aber ich habe ein seltsames Problem. Sobald ich in der gleichen Task das bytes_receveid nehme sozusagen
als Start das Daten im Puffer vorhanden sind, fange ich an die Daten umzukopieren.

Seltsamer weise muss ich die zeitlich versetzt umkopieren. Dann funktioniert es.
Wenn ich z.B. auf den ersten 70 Bytes umkopiere überschreibe ich mir Daten, obwohl ich in der gleichen Task liege.

Arbeiten die Funktionsaufrufe SysSockRecv Synchron oder Asynchron.

Ich kann irgendwie das Problem nicht einkreisen.


MacToolz

peewit:
syssockrcv arbeitet synchron

aber der ip_control arbeitet asynchron zu der restlichen applikation
der ist normalerweise freilaufend im empfang

solange daten empfangen werden und der buffer noch nicht vollgelaufen ist werden die daten im buffer aneinandergereiht.



profi ist man dann wenn man so ein problem nicht hat :-)

ich kenne dein problem nicht , aber bei manchen situationen ist es notwendig den weiteren datenempfang anzuhalten
um in ruhe die empfangsdaten zu verarbeiten um den empfang danach gezielt wieder freizuschalten

ansonsten kann es bei gewissen situationen vorkommen das während des verarbeiten des empfangsbuffer diese noch anwächst


wie das geht siehst du - wie schon erwähnt - im ftp-client und smtp client

mactoolz:
Hi Peewit,

das der IP_Control freilaufend ist das habe ich auch gesehen.

Ok, das mit dem Synchronen Aufruf von SysSockRecv habe ich mir fast gedacht.

Aber das mit dem Datenempfang anhalten, da habe ich nicht den Sinn verstanden, warum man das überhaupt macht.
Kannst du das bitte mal erklären?

Das der Puffer anwächst ist auch ok, soll ja auch so sein. Mein Gedanke ist, das ich eigentlich alles was an Empfangsbytes nach dem Synchronen Aufruf von  SysSockRecv kommt "bytes_received" direkt aus dem Empfangsbuffer zu kopieren.

Das sollte doch rein theoretisch funktionieren. Die Bedingung zu dem ist auch klar, das man auch überwacht das auf Daten aus dem SysSockRecv vorhanden sind, sprich "-1" sind natürlich keine Daten vorhanden.

Kannst du dir das erklären was das für ein Verhalten ist, das ich unbedingt Zeit verzögert erst kopieren kann.
Ich habe mal als Hausnummer eine Zeit herausgefunden, unter t#100ms brauch ich nicht anfangen zu kopieren.

Ich habe keine Ahnung warum.
Halte ich die Zeit ein, funktioniert alles wunderbar. Wie schon erwähnt, ich habe mitgeloggt wie die Daten aus dem SysSockRecv rein kommen.
Um erkennen zu können ob ich auch die richtige Anzahl von Bytes umkopiere. So nach dem Motto, nicht schneller oder eher zu viel direkt aus dem Empfangspuffer kopiere,
wo eigentlich noch keine Daten sind.

Das kann ich von mir aus gesehen ausschließen. !!!


MacToolz

peewit:
ein einfaches beispiel

wenn du per ftp client baustein eine datei von einen ftp-server runterlädst, dann überschwemmt dich der ftp-server mit daten
sobald der datenbuffer voll ist, darfst du den syssockreceive nicht mehr aufrufen denn wohin mit den daten

dann musst du die daten im buffer weiterverarbeiten wie zb daten in datei schreiben

danach machst du r_buf.size = 0 und gibst den empfang wieder frei

wenn du das nicht machst dann wirst du einen grossteil der daten verlieren


eine sps hat sehr beschraenkte möglichkeiten und ressourcen (steinzeitliche handhabung und möglichkeiten)


sowas in hochsprache zu programmieren ist dagegen heutzutage ein kindergeburtstag

mactoolz:
Hi Peewit,

ok das habe ich verstanden. Das heißt ihr bekomme was in dem Empfangspuffer, verarbeite die Daten,
lösche das "Size" wieder ab, muss aber dafür sicher stellen das keine Daten über den Synchaufruf SysSockRecv kommen können.

Was müsste ich denn jetzt in der Oscat Lib dafür tun damit der SysSockRecv nicht mehr aufgerufen wird.

Ist das die Mailbox --> IP_C.MAILBOX[3] ???


Gibt es da schon was das der Empfang geblockt wird. Weil ich würde ja gerne die LIB unberührt lassen,
außer man findet bei einem Profi einen Fehler ;-) ...


MacToolz

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln