Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> > So, hab den C-Quellcode jetz soweit umgeschrieben, das er funktionieren sollte. Ich bekomme > > auch auf jedes übertragene Byte ein korrektes Echo, aber nach der Übertragung der konstanten > > Bytes schaltet die C-Control wieder auf HOSTMODE und somit werden die VMC-Codeworte > > nicht übertragen. > > Woran kann das liegen? Ich übertrage erst die 64 als 64,0,0,0 und bekomme 64,0,0,0 als Echos. > > Anschließend das gleiche mit der 32 und dann die restlichen Worte mit je 2 Byte 1,0... > > > > Grüss Dich Thomas, > eine Sache ging mir erst sehr spät auf, nachdem ich > selbst eine Weile rumprobiert hatte: > Die Konstantbytes sind Bytes und müssen als > Bytes übertragen werden und die VCM-Code-Worte eben > als Integer-Werte (=2 Bytes). > Hier meine Version eines Linux Downloadtools, es > funktioniert, aber es ist zugegebenermassen sehr > "quick and dirty" programmiert: > > Melde Dich mal, ob es bei Dir auch geht Markus > > <code> > #include <stdio.h> /* Standard input/output definitions */ > #include <stdlib.h> > #include <netinet/in.h> > #include <string.h> /* String function definitions */ > #include <unistd.h> /* UNIX standard function definitions */ > #include <fcntl.h> /* File control definitions */ > #include <errno.h> /* Error number definitions */ > #include <termios.h> /* POSIX terminal control definit */ > > // Seriellen Port initialisieren > int open_port(char *device) > { int fd; > > struct termios *current; > struct termios options; > fd = open(device, O_RDWR | O_NOCTTY); > if (fd == -1) return -1; > > bzero(&options, sizeof(options)); > > tcgetattr(fd, &options); > options.c_cflag = B19200 | CRTSCTS | CS8 | CLOCAL | CREAD; > options.c_iflag = IGNPAR; > options.c_oflag = 0; > options.c_lflag = 0; > tcflush(fd, TCIFLUSH); > tcsetattr(fd, TCSANOW, &options); > return (fd); > } > > > > > int sendprog(char *filen, int sfd) > { > char CMD_RESET = 255; > char CMD_INFO = 0; > char CMD_DATE = 1; > char CMD_VERSION = 2; > char CMD_LOAD = 4; > char CMD_ERASE_VMC = 6; > > > > int fd, i = 0; > long int length, length2; > char ch; > char buf [255]; > > FILE *f; > > char Zeichen; > char Text[10000000]; > char Word[80]; > long Codes[1000000]; > int DateiLaenge; > int Pos; > int WordLength; > long ix, iz; > int jj; > > long m, n, m1, n1, q; > long a, b, c, j; > long pause; > char fehler; > > pause = 5000; > > > int GetWord() > { char C; > > > WordLength = 0; > Word[0] = '\0'; > > while (1) > { > /* printf("%d %d \n", DateiLaenge, Pos); */ > /* if reach the end of the file, leave, reporting failure */ > if (Pos == DateiLaenge) return 0; > C = Text[Pos]; > /* if hit the end of the word, leave, otherwise record the > current character in the array Word */ > if (C == ' ' || C == '\n' || C == 13) > { > Pos++; > if (WordLength != 0) break; > } > else > { > Word[WordLength] = C; > WordLength++; > Pos++; > Word[WordLength] = '\0'; > } > } > > return 1; > } > > > // Info der Unit auslesen und anzeigen > > printf("\nLinux DownloadTool Version 0.1\n\n"); > > for (i=0; i<=255; i++) buf[i] = 0; > write(sfd, &CMD_INFO, 1); > usleep(100000); > read(sfd, buf, 255); > printf("%s ", buf); > > for (i=0; i<=255; i++) buf[i] = 0; > write(sfd, &CMD_VERSION, 1); > usleep(100000); > read(sfd, buf, 255); > printf("Version: %s ", buf); > > for (i=0; i<=255; i++) buf[i] = 0; > write(sfd, &CMD_DATE, 1); > usleep(100000); > read(sfd, buf, 255); > printf("vom: %s\n", buf); > > > > > > > // VMC Datei auslesen und in der Varialbe Text speichern > f = fopen(filen, "r"); > DateiLaenge=0; > while (!feof(f)) > { > Zeichen = fgetc(f); > Text[DateiLaenge] = Zeichen; > DateiLaenge++; > } > Text[DateiLaenge+1] = '\0'; > fclose(f); > > > // Aus der Variable Text die einzelnen Code-Werte bestimmen > Pos = 0; > j = 0; > i = 0; > while (GetWord() != 0) > { > if (j == 1) sscanf(Word, "%ld", &m); > if (j == 2) sscanf(Word, "%ld", &n); > if (j > 2) {sscanf(Word, "%ld", &a); Codes[j-3] = a; }; > j++; > }; > printf("%s : ", filen); > printf("KonstantenBytes : %ld; CMD-Code-Worte %ld\n", m, n); > > > > > > //VMC löschen > write(sfd, &CMD_ERASE_VMC, 1); > //2500ms warten > usleep(2500000); > read(sfd, buf, 1); > // printf("%d\n", buf[0]); > > > > //Laden des VMC-Codes einleiten > write(sfd, &CMD_LOAD, 1); > usleep(500000); > > // Anzahl der KonstantenBytes m übergeben > m1 = m; > n1 = n; > for (i=1; i<=4; i++) > { > jj = m1 % 256; > write(sfd, &jj, 1); > usleep(pause); > read(sfd, buf, 1); > a = buf[0]; > if (a<0) a = 256+a; > // printf("%d ", a); > m1 = m1/256; > }; > // printf("\n"); > > // Anzahl der VCM-Code-Worte n übergeben > for (i=1; i<=4; i++) > { > jj = n1 % 256; > write(sfd, &jj, 1); > usleep(pause); > read(sfd, buf, 1); > a = buf[0]; > if (a<0) a = 256+a; > // printf("%d ", a); > n1 = n1/256; > }; > // printf("\n"); > > > printf("Übertragung beginnt ...\n"); > fehler = 0; > > for (i=0; i<= (m+n-1); i++) > { > jj = Codes[i] % 256; > write(sfd, &jj, 1); > usleep(pause); > read(sfd, buf, 1); > a = buf[0]; > if (a<0) a = 256+a; > if (a != jj) fehler = 1; > // printf("%d : %d ", i, a); > // if (i<m) printf(" < ConstByte\n"); > > > if (i>m-1) > { > jj = Codes[i] / 256; > write(sfd, &jj, 1); > usleep(25000); > read(sfd, buf, 1); > b = buf[0]; > if (b<0) b = 256+b; > if (b != jj) fehler = 1; > c = a + 256*b; > // printf("%d : %d < VCM-Code\n", b, c); > } > > } > > if (fehler == 1) printf("\nÜbertragung war fehlerhaft!\n\n"); > if (fehler == 0) printf("\nÜbertragung war erfolgreich!\n\n"); > > > // Reset der Unit > write(sfd, &CMD_RESET, 1); > > return 0; > > > > } > > // Bei Aufruf des DownloadTools aus eienr Shell muss die Datei > // mit angegeben werden, z. B. ./dltool beeper.c2p.vmc > > int main(int arc, char *argv[]) > { > int comport = open_port("/dev/ttyS0"); > sendprog(argv[1], comport); > } > > </code>
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB