Forum: PC-Programmierung CANoe / CAPL wie verwende ich RS232ByteCallback()


von CAPL-User (Gast)


Lesenswert?

Hallo Zusammen,

ich wüßte gerne wie ich die Callback-Funktion "RS232ByteCallback()" in 
CAPL richtig einsetze. Diese Funktion wird laut Handbuch aufgerufen, 
sobald ein Event (Zeihen gesendet  empfangen  Error) durch die 
serielle Schnittstelle ausgelöst wird. Mus ich die Funktion unter dem 
obigen Namen selber schreiben (und die über die Paramter empfangenen 
Daten darin auswerten) oder ist das als Deklaration für die Zuweisung 
eines Funktionspointers (auf eine Funktion die dann aufgerufen wird) 
gemeint? Aus dem Handbuch geht das nicht wirklich hervor. Bin für jeden 
Tipp dankbar!

Grüße

von Borislav B. (boris_b)


Lesenswert?

In der Hilfe ist doch ein Beispiel:
1
// at node which listens to port 1 is connected to port 2
2
RS232ByteCallback(dword port, dword datum, dword note)
3
{
4
   // receive value 65 with port==1
5
}

In den CAPL-Knoten einfügen, wo die Daten empfangen werden sollen.
Du musst die Funktion also selber schreiben, aber den vorgegebenen Namen 
und die Signatur verwenden.


Allerdings ist die Funktion deprecated. Benutze lieber RS232Receive und 
RS232OnReceive:
1
byte mybuffer[20];
2
int mysize=20;
3
if ( 1==RS232Receive(1,mybuffer,mysize) )
4
  write(It works with port 1.);
5
...
6
RS232OnReceive( dword port, dword buffer[], dword number )
7
{
8
   // works after first RS232Receive !
9
   // buffer == mybuffer, 1<number<=mysize
10
}

: Bearbeitet durch User
von CAPL-User (Gast)


Lesenswert?

Vielen Dank! Interessant, dass die Funktion veraltet ist - habe ich aus 
einer Doku, die ich von der Vector-Seite runter geladen habe...

Beste Grüße!

von CAPL-User (Gast)


Lesenswert?

ich gehe davon aus, dass onReceive bei JEDEM Event (also jedem 
empfangenen Zeichen) aufgerufen wird, korrekt? Oder wird da was 
gesammelt? Evt. bis MySize Zeichen empfangen wurden und dann wird 
OnReceive aufgerufen?

... und dass mySize die maximale Zahl der Zeichen darstellt, die 
empfangen werden - danach wird onReceive nicht mehr aufgerufen, oder?

von Borislav B. (boris_b)


Lesenswert?

Ich glaube da wird gesammelt. Allerdings nicht, bis eine feste Anzahl 
von Zeichen erreicht ist. Das arbeiter eher wahlos ;-)
(Liegt aber an der Art wie der COM Port Funktioniert, nicht an CANoe).

Du solltest die Daten also empfangsseitig selber zusammensetzen.

von CAPL-User (Gast)


Lesenswert?

Ok - das ist auch kein großes Problem. Eine Sache noch: Falls es mehrere 
aktive knoten gibt, die eine onReceive Funktion implementiert haben, 
werden dann eigentlich alle Funktionen aufgerufen oder nur diejenige des 
Knotens, der zuvor auch etwas gesendet hat?

von Borislav B. (boris_b)


Lesenswert?

Ich denke, nicht, dass das was mit dem Senden zu tun hat. Schließlich 
musst du ja auch was empfangen können, ohne jemals etwas zu senden.

Vermutlich schlatest du mit Receive das Empfangen für diesen Knoten 
scharf. Wird dann etwas empfangen, wir der OnReceive Handler aufgerufen.

Andere Knoten bekommen davon nichts mit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.