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
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
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!
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?
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.