oscat.lib > oscat.lib fuer CoDeSys 3
Network.lib
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