ACHTUNG: Es fehlen einige Bilder, die zugehörigen Links sind HTTP404!!! Die Bilder sind im www verschollen, nicht auf dem ftc-Server zu finden.
Mit der am RoboInterface vorhandenen seriellen Schnittstelle lassen sich während der Laufzeit eines RoboPro-Programmes Daten zu einem PC oder anderen geeigneten Gerät übertragen. Momentan ist es allerdings nicht möglich, beliebige Daten zu verwenden, man muss das von RoboPro vorgegebene 7-Byte-Protokoll verwenden. Dieses Protokoll setzt sich wie folgt zusammen:
Mit eben diesem Protokoll ist es auch möglich, Daten zum RoboInterface zurückzusenden.
WICHTIG: Diese Art der seriellen Kommunikation funktioniert ausschließlich mit RoboPro-Programmen, die auf das RoboInterface heruntergeladen und dort gestartet wurden!
Hier nun zwei kleine Beispiele, wie man mit einem PC eine Datenübertragung aufbauen könnte:
Beispiel 1
Senden vom PC zum RoboInterface. Das PC-Programm ist in C geschrieben und soll nur als Beispiel dienen. Am besten kopiert man sich den Beispielcode in einen Editor, er ist dann um einiges besser lesbar.
Das Programm sendet den Befehl “=” einmal mit dem Wert 30 und einmal mit dem Wert 20. Mit dem zugehörigen RoboPro-Programm wird für eine Sekunde die Leuchte an O8 leuchten (die 20 wurde nicht gesendet), dann für eine weitere Sekunde O8 + O7 (die 20 wurde gesendet).
// Beispiel 1: Senden
// Senden vom PC zum RoboInterface
//
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define RoboRight 0xFFFE
#define RoboLeft 0xFFFD
#define RoboStop 0xFFFC
#define RoboOn 0xFFFB
#define RoboOff 0xFFFA
#define RoboEqual 0xFFF9
#define RoboPlus 0xFFF8
#define RoboMinus 0xFFF7
#define RoboAdd 0xFFF6
#define RoboDelete 0x2184 // Nobody knows, why its not 0xFFF5
#define RoboChange 0xFFF4
void fputint (int value, FILE *Handle)
{
fputc(value & 0xFF, Handle);
fputc(value >> 8, Handle);
}
void fputrobopro (uchar HwID, uchar SubID, int command, int value, FILE *Handle)
{
fputc(0x90,Handle); // Startbyte
fputc(HwID,Handle); // Hardware-ID
fputc(SubID,Handle);
fputint(command,Handle);
fputint(value,Handle);
}
int main (void)
{
FILE *StreamHandle;
StreamHandle = fopen("COM5:38400,8,N,1","w"); // Öffnen der seriellen Schnittstelle, muss angepasst werden !
printf("r: %d",StreamHandle);
fputrobopro (0,9,RoboEqual,30,StreamHandle); // sende Befehl "=" und Wert 30 ans RoboInterface
fputrobopro (0,9,RoboEqual,20,StreamHandle); // sende Befehl "=" und Wert 20 ans RoboInterface
fclose(StreamHandle);
}
Und hier das zugehörige RoboPro-Programm (ich habe die Eigenschaften des Empfänger-Bausteins aufgeklappt, damit man die Einstellungen sehen kann)
http://www.ftcommunity.de/~eggdrop/wiki_lcd/Empfaenger.jpg
Beispiel 2
Senden vom RoboInterface zum PC
// Beispiel2 - Empfangen
// Empfangen von Daten vom RoboInterface
//
#include <stdio.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define RoboRight 0xFFFE
#define RoboLeft 0xFFFD
#define RoboStop 0xFFFC
#define RoboOn 0xFFFB
#define RoboOff 0xFFFA
#define RoboEqual 0xFFF9
#define RoboPlus 0xFFF8
#define RoboMinus 0xFFF7
#define RoboAdd 0xFFF6
#define RoboDelete 0x2184 // Nobody knows, why its not 0xFFF5
#define RoboChange 0xFFF4
int fgetc_wait (FILE *Handle) // Wartet, bis ein Zeichen seriell empfangen wurde
{
int result;
do
{
result = fgetc(Handle);
}
while (result < 0); // "result" ist -1, solange kein Zeichen empfangen wird
return result;
}
int fgetint (FILE *Handle) // Liest einen Int-Wert vom RoboInterface
{
int result;
result = fgetc_wait(Handle);
result |= (fgetc_wait(Handle) << 8);
return result;
}
int fgetrobopro (FILE *Handle)
{
while (fgetc_wait(Handle) != 0x90); // Auf Startbyte warten
fgetc_wait(Handle); // Dummy-Read der Hardware-ID
fgetc_wait(Handle); // Dummy-Read der Sub-ID
if (fgetint(Handle) == RoboEqual) // Befehlscode auswerten
return fgetint(Handle); // Falls Befehlscode "=", dann Daten zurückgeben
else
{
fgetint(Handle); // Dummy-Read
return 0; // Evtl. einen anderen Fehlercode benutzen
}
}
int main (void)
{
FILE *StreamHandle;
int result;
StreamHandle = fopen("COM5:38400,8,N,1","r");
printf("r: %d",StreamHandle);
printf ("Daten empfangen: %d rn", fgetrobopro (StreamHandle));
fclose(StreamHandle);
}
und ein entsprechendes Testprogramm für RoboPro:
http://www.ftcommunity.de/~eggdrop/wiki_lcd/Sender.jpg
Erstellt
von
Thomas Kaiser (thkais).
Hochgeladen
von
thkais
am
21.9.2007.
Hinweis: Wir vertrauen auf die Sachkunde und Sorgfalt unserer Nutzer. Trotzdem könnten sich Fehler eingeschlichen haben. Eine Haftung für die Richtigkeit der Inhalte können wir nicht übernehmen.