- Adapted indenation to new agreed upon system

- Added support for second generation scriptcontext based counter
This commit is contained in:
koennecke
2009-02-13 09:00:03 +00:00
parent a3dcad2bfa
commit 91d4af0541
405 changed files with 88101 additions and 88173 deletions

589
sel2.c
View File

@@ -88,7 +88,7 @@ BRE Beginne eine Verlustleistungsmessung - ist bei Statusabruf
HAL Bremse Selektor bis zum Stillstand ab (unterhalb 3000 U/min.)
*/
*/
#include stdio.h
#include descrip.h
#include iodef.h
@@ -101,7 +101,7 @@ HAL Bremse Selektor bis zum Stillstand ab (unterhalb 3000 U/min.)
#define OK 0L
#define NOT_OK !OK
#define LIMIT_U 3100 /* niedrigste Drehzahl */
#define LIMIT_U 3100 /* niedrigste Drehzahl */
#define LIMIT_O 28300
/* Verbotene Drehzahlbereiche (Resonanzgefahr) */
@@ -119,33 +119,38 @@ HAL Bremse Selektor bis zum Stillstand ab (unterhalb 3000 U/min.)
extern FILE *fs;
static short chan_s=6;
static short chan_s = 6;
/* *********************************************************************** */
/* ------------------------------------------------------------------------ */
long select_setup()
{
register rc;
$DESCRIPTOR(dev_descr, "TXA1:");
chan_s=SELE_LUN;
if ((rc=sys$assign(&dev_descr, &chan_s, NULL,NULL)) != 1)
{printf("Error in Selector_SETUP: Ret = %d\n",rc); return(NOT_OK);}
return(OK);
register rc;
$DESCRIPTOR(dev_descr, "TXA1:");
chan_s = SELE_LUN;
if ((rc = sys$assign(&dev_descr, &chan_s, NULL, NULL)) != 1) {
printf("Error in Selector_SETUP: Ret = %d\n", rc);
return (NOT_OK);
}
return (OK);
}
/* ------------------------------------------------------------------------ */
/* Function liest ueberprueft das Befehlsecho */
/* Function liest ueberprueft das Befehlsecho */
long sele_test_echo(cmd, lng)
char *cmd[];
char *cmd[];
int lng;
{
char echo[80];
if (sele_read(&echo)!= OK) return(NOT_OK);
if (strncmp(&echo, cmd, lng) != 0)
{printf("Selector:protocol error%s\n",echo); return(NOT_OK);}
else
return(OK);
}
char echo[80];
if (sele_read(&echo) != OK)
return (NOT_OK);
if (strncmp(&echo, cmd, lng) != 0) {
printf("Selector:protocol error%s\n", echo);
return (NOT_OK);
} else
return (OK);
}
/* ------------------------------------------------------------------------ */
/* Function prueft die Anzahl der sich im Typeahead-Buffer befindenden Bytes
und liefert das naechste dort anstehende Zeichen, jedoch ohne es
@@ -154,86 +159,102 @@ if (strncmp(&echo, cmd, lng) != 0)
long tst_buf_s(bt)
int *bt;
{
int bytes;
register rc;
struct {unsigned short status, bytes;
int pid; } iosb;
if ((rc=sys$qiow(NULL,chan_s,IO$_SENSEMODE | IO$M_TYPEAHDCNT,&iosb,
NULL, NULL, &bytes, NULL, NULL, NULL, NULL, NULL)) != 1)
{print_error(fs,"Error in QIOW"); return(NOT_OK);}
int bytes;
register rc;
struct {
unsigned short status, bytes;
int pid;
} iosb;
if ((rc = sys$qiow(NULL, chan_s, IO$_SENSEMODE | IO$M_TYPEAHDCNT, &iosb,
NULL, NULL, &bytes, NULL, NULL, NULL, NULL,
NULL)) != 1) {
print_error(fs, "Error in QIOW");
return (NOT_OK);
}
/**ch = (bytes >> 16) & 0xff;*/
*bt = bytes & 0xffff;
return(OK);
*bt = bytes & 0xffff;
return (OK);
}
/* ------------------------------------------------------------------------ */
long sele_read(message)
char *message;
char *message;
{
char char_l[8], *ptr;
register rc;
struct {unsigned short status, bytes;
int pid; } iosb;
ptr = message;
for (;;)
{
if ((rc=sys$qiow(NULL,chan_s,IO$_READVBLK | IO$M_NOECHO,
&iosb,NULL,
NULL, char_l, 1, NULL, NULL, NULL, NULL)) != 1)
{printf("Error in QIOW, READ_MESS: %d\n", rc);return(NOT_OK);}
*ptr = char_l[0];
/* Terminator (linefeed) ? */
ptr++;
if (char_l[0] == '\n') break;
}
return(OK);
char char_l[8], *ptr;
register rc;
struct {
unsigned short status, bytes;
int pid;
} iosb;
ptr = message;
for (;;) {
if ((rc = sys$qiow(NULL, chan_s, IO$_READVBLK | IO$M_NOECHO,
&iosb, NULL,
NULL, char_l, 1, NULL, NULL, NULL, NULL)) != 1) {
printf("Error in QIOW, READ_MESS: %d\n", rc);
return (NOT_OK);
}
*ptr = char_l[0];
/* Terminator (linefeed) ? */
ptr++;
if (char_l[0] == '\n')
break;
}
return (OK);
}
/* ------------------------------------------------------------------------ */
/* Pruefe ob der Selektor eine Fehlermeldung erzeugt hat und gib sie aus */
long select_error_msg(err)
long *err;
{
char chr[10], msg[80];
float waiti=3.0; /* Selektor PC hat 3 Sekunden Reaktionszeit !! */
char chr[10], msg[80];
float waiti = 3.0; /* Selektor PC hat 3 Sekunden Reaktionszeit !! */
/* Warte ein wenig - es koennte auf den Befehl hin eine Fehlermeldung erscheinen */
lib$wait(&waiti);
lib$wait(&waiti);
/* Es koennen auch mehrere Zeilen sein */
*err = FALSE;
for (;;)
{if (tst_buf_s(&chr) != OK) return(NOT_OK);
if (chr[0] != NULL)
{
if (sele_read(&msg) != OK) return(NOT_OK);
printf("Selektor failure:");
printf("%s\n\7",msg);
*err = TRUE;
}
else
return(OK);
}
*err = FALSE;
for (;;) {
if (tst_buf_s(&chr) != OK)
return (NOT_OK);
if (chr[0] != NULL) {
if (sele_read(&msg) != OK)
return (NOT_OK);
printf("Selektor failure:");
printf("%s\n\7", msg);
*err = TRUE;
} else
return (OK);
}
}
/* ------------------------------------------------------------------------ */
long sele_write(message)
char message[];
{
char msg[80];
long err;
register rc;
struct
{
unsigned short status, bytes;
int pid; } iosb;
char msg[80];
long err;
register rc;
struct {
unsigned short status, bytes;
int pid;
} iosb;
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
if ((rc=sys$qiow(NULL,chan_s,IO$_WRITEVBLK,&iosb,NULL, NULL,
message, strlen(message), NULL, NULL, NULL, NULL)) != 1)
{printf("Error in QIOW: %d\n",rc); return(NOT_OK);}
return(OK);
if ((rc = sys$qiow(NULL, chan_s, IO$_WRITEVBLK, &iosb, NULL, NULL,
message, strlen(message), NULL, NULL, NULL,
NULL)) != 1) {
printf("Error in QIOW: %d\n", rc);
return (NOT_OK);
}
return (OK);
}
/* -------------------------------------------------------------------------- */
@@ -244,30 +265,38 @@ return(OK);
long select_msg(tim)
long tim;
{
int sts;
long err;
char cmd[20] = "TIM ";
sprintf(&cmd+4,"%5u\0",tim);
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
return(OK);
int sts;
long err;
char cmd[20] = "TIM ";
sprintf(&cmd + 4, "%5u\0", tim);
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
return (OK);
}
/* -------------------------------------------------------------------------- */
/* Einschaltung der Fremdsteuerung des Selektors
Diese Funktion ist z.Z. nur vom Selektor-PC aktivierbar
*/
long select_remote()
{
int sts;
long err;
char cmd[] = "REM";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "REM";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Ausschaltung der Fremdsteuerung des Selektors -
ein Steuerung kann dann nur noch ueber den PC des Geraetes
@@ -276,41 +305,53 @@ if (err == TRUE) return(NOT_OK);
*/
long select_local()
{
int sts;
long err;
char cmd[] = "TTY";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "TTY";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Starten des Selektors nach Stillstand auf die Minimaldrehzahl
*/
long select_start()
{
int sts;
long err;
char cmd[] = "SST";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "SST";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Bremsen des Selektors bis zum Stillstand; eine
Drehzahlanzeige unterhalb 3000 U/min ist nicht moeglich.
*/
long select_stop()
{
int sts;
long err;
char cmd[] = "HAL";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "HAL";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Einschalten des geregelten Betriebes mit dem Setzen eines Sollwertes
der Drehzahl.
@@ -321,29 +362,30 @@ if (err == TRUE) return(NOT_OK);
long select_set_rpm(rpm)
int rpm;
{
int sts;
long err;
char cmd[] = "SDR", s_dat[10] = "SDR 00000";
if ((rpm < LIMIT_U) || (rpm > LIMIT_O))
{
print_error(fs,"nominal value out of allowed range");
return;
}
int sts;
long err;
char cmd[] = "SDR", s_dat[10] = "SDR 00000";
if ((rpm < LIMIT_U) || (rpm > LIMIT_O)) {
print_error(fs, "nominal value out of allowed range");
return;
}
/* Resonanzbereiche sind auch verboten */
if (
((rpm >= RESONANZ_1U) && (rpm <= RESONANZ_1O)) ||
((rpm >= RESONANZ_2U) && (rpm <= RESONANZ_2O)) ||
((rpm >= RESONANZ_3U) && (rpm <= RESONANZ_3O)))
{
print_error(fs,"nominal value within inhibited range");
return;
}
sprintf(&s_dat+4,"%5u",rpm);
sts = sele_write(s_dat);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
if (((rpm >= RESONANZ_1U) && (rpm <= RESONANZ_1O)) ||
((rpm >= RESONANZ_2U) && (rpm <= RESONANZ_2O)) ||
((rpm >= RESONANZ_3U) && (rpm <= RESONANZ_3O))) {
print_error(fs, "nominal value within inhibited range");
return;
}
sprintf(&s_dat + 4, "%5u", rpm);
sts = sele_write(s_dat);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Leerlauf des Selektors einschalten; weder Antrieb noch
Verzoegerung erfolgen - eine anschliessende Abbremsung oder
@@ -351,14 +393,18 @@ if (err == TRUE) return(NOT_OK);
*/
long select_set_idle()
{
int sts;
long err;
char cmd[] = "STB";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "STB";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Starten der Messung der elektrischen Verlustleistung des
Selektors. Anscheinend wird waehrend der Zeit die
@@ -369,30 +415,37 @@ if (err == TRUE) return(NOT_OK);
*/
long select_read_power()
{
int sts;
long err;
char cmd[] = "BRE";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
int sts;
long err;
char cmd[] = "BRE";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
/* Lesen der aktuellen Drehzahl des Selektors */
long select_read_rpm(rpm)
int *rpm;
{
int sts, tmp;
long err;
char status[80], cmd[] = "FDR";
sts = sele_write(cmd);
if (sele_test_echo(&cmd,3)!= OK) lib$stop(-1);
int sts, tmp;
long err;
char status[80], cmd[] = "FDR";
sts = sele_write(cmd);
if (sele_test_echo(&cmd, 3) != OK)
lib$stop(-1);
sts = sele_read(&status);
sscanf(&status+4,"%d",&tmp);
*rpm = tmp;
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
sts = sele_read(&status);
sscanf(&status + 4, "%d", &tmp);
*rpm = tmp;
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
}
/* -------------------------------------------------------------------------- */
@@ -421,108 +474,148 @@ dat = Tagesdatum dd.m.yyyy
tim = Tageszeit hh.mm.s
*/
long select_read_status(rm,nom_rpm, cur_rpm, pwr, curr, rot_temp, cont_temp,
inl_temp, outl_temp, cool_wat, vacuum, accel, komm, dat, tim)
long select_read_status(rm, nom_rpm, cur_rpm, pwr, curr, rot_temp,
cont_temp, inl_temp, outl_temp, cool_wat, vacuum,
accel, komm, dat, tim)
char *rm[];
int *nom_rpm, *cur_rpm, *pwr, *rot_temp, *cont_temp, *inl_temp, *outl_temp;
float *cool_wat, *vacuum, *accel, *curr;
char *dat[], *tim[];
short *komm;
{
int cnt, key_id, sl, sts;
long err;
char ena_str[] = "ENABLED";
char dis_str[] = "DISABLED";
char keys[15][9] =
{
"Status:\0 ",
"S_DREH:\0 ",
"I_DREH:\0 ",
"P_VERL:\0 ",
"STROM:\0 ",
"T_ROT:\0 ",
"T_GEH:\0 ",
"T_VOR:\0 ",
"T_RUECK:\0",
"DURCHFL:\0",
"VAKUUM:\0 ",
"BESCHL:\0 ",
"KOM: \0 ",
"DATE: \0 ",
"TIME: \0 "};
int cnt, key_id, sl, sts;
long err;
char ena_str[] = "ENABLED";
char dis_str[] = "DISABLED";
char keys[15][9] = {
"Status:\0 ",
"S_DREH:\0 ",
"I_DREH:\0 ",
"P_VERL:\0 ",
"STROM:\0 ",
"T_ROT:\0 ",
"T_GEH:\0 ",
"T_VOR:\0 ",
"T_RUECK:\0",
"DURCHFL:\0",
"VAKUUM:\0 ",
"BESCHL:\0 ",
"KOM: \0 ",
"DATE: \0 ",
"TIME: \0 "
};
char tok_buf[TOK_BUF_L], *ptr_token, *ptr_src, *ptr, tok_c[] = "/\0";
char tok_buf[TOK_BUF_L], *ptr_token, *ptr_src, *ptr, tok_c[] = "/\0";
char status[255], cmd[] = "???";
char status[255], cmd[] = "???";
if (sele_write(cmd) != OK) return(NOT_OK);
if (sele_write(cmd) != OK)
return (NOT_OK);
if (sele_test_echo(&cmd, 3) == NOT_OK) lib$stop(-1);
if (sele_test_echo(&cmd, 3) == NOT_OK)
lib$stop(-1);
if (sele_read(&status) != OK) return(NOT_OK); /* Und nun der Status */
ptr_src = &status;
for (;;)
{
/* Lies Zeichenfolge bis zum naechsten Trennzeichen '/' */
ptr_token = strtok(ptr_src, &tok_c);
ptr_src = NULL; /* fuer die weitere Suche notwendig */
if (ptr_token == NULL) break;
strcpy(&tok_buf,ptr_token);
if (sele_read(&status) != OK)
return (NOT_OK); /* Und nun der Status */
ptr_src = &status;
for (;;) {
/* Lies Zeichenfolge bis zum naechsten Trennzeichen '/' */
ptr_token = strtok(ptr_src, &tok_c);
ptr_src = NULL; /* fuer die weitere Suche notwendig */
if (ptr_token == NULL)
break;
strcpy(&tok_buf, ptr_token);
for (key_id = 0; key_id<=14; key_id++)
{
/* Ist das Schluesselwort enthalten ? */
sl = strlen(keys[key_id]);
if (strncmp(&keys[key_id][0], &tok_buf, sl) == NULL)
{
/* Schiebe das Schluesselwort raus */
for (cnt=0;cnt+sl < TOK_BUF_L; cnt++)
tok_buf[cnt] = tok_buf[cnt+sl];
switch (key_id)
{
case 0:
{
ptr = rm;
strcpy(ptr, &tok_buf);
break;
}
case 1: {sscanf(&tok_buf,"%d",nom_rpm); break;}
case 2: {sscanf(&tok_buf,"%d",cur_rpm); break;}
case 3: {sscanf(&tok_buf,"%d",pwr); break;}
case 4: {sscanf(&tok_buf,"%f",curr); break;}
case 5: {sscanf(&tok_buf,"%d",rot_temp); break;}
case 6: {sscanf(&tok_buf,"%d",cont_temp); break;}
case 7: {sscanf(&tok_buf,"%d",inl_temp); break;}
case 8: {sscanf(&tok_buf,"%d",outl_temp); break;}
case 9: {sscanf(&tok_buf,"%f",cool_wat); break;}
case 10: {sscanf(&tok_buf,"%f",vacuum); break;}
case 11: {sscanf(&tok_buf,"%f",accel); break;}
case 12:
{
if (strcmp(&tok_buf, &ena_str) == NULL)
{*komm = TRUE; break;}
if (strcmp(&tok_buf, &dis_str) == NULL)
{*komm = FALSE;break;}
printf("Invalid Communication value");
break;
}
case 13:
{
ptr = dat;
strcpy(ptr, &tok_buf);
break;
}
case 14:
{
ptr = tim;
strcpy(ptr, &tok_buf);
break;
}
}
}
}
}
if (select_error_msg(&err) != OK) return(NOT_OK);
if (err == TRUE) return(NOT_OK);
return(OK);
for (key_id = 0; key_id <= 14; key_id++) {
/* Ist das Schluesselwort enthalten ? */
sl = strlen(keys[key_id]);
if (strncmp(&keys[key_id][0], &tok_buf, sl) == NULL) {
/* Schiebe das Schluesselwort raus */
for (cnt = 0; cnt + sl < TOK_BUF_L; cnt++)
tok_buf[cnt] = tok_buf[cnt + sl];
switch (key_id) {
case 0:
{
ptr = rm;
strcpy(ptr, &tok_buf);
break;
}
case 1:{
sscanf(&tok_buf, "%d", nom_rpm);
break;
}
case 2:{
sscanf(&tok_buf, "%d", cur_rpm);
break;
}
case 3:{
sscanf(&tok_buf, "%d", pwr);
break;
}
case 4:{
sscanf(&tok_buf, "%f", curr);
break;
}
case 5:{
sscanf(&tok_buf, "%d", rot_temp);
break;
}
case 6:{
sscanf(&tok_buf, "%d", cont_temp);
break;
}
case 7:{
sscanf(&tok_buf, "%d", inl_temp);
break;
}
case 8:{
sscanf(&tok_buf, "%d", outl_temp);
break;
}
case 9:{
sscanf(&tok_buf, "%f", cool_wat);
break;
}
case 10:{
sscanf(&tok_buf, "%f", vacuum);
break;
}
case 11:{
sscanf(&tok_buf, "%f", accel);
break;
}
case 12:
{
if (strcmp(&tok_buf, &ena_str) == NULL) {
*komm = TRUE;
break;
}
if (strcmp(&tok_buf, &dis_str) == NULL) {
*komm = FALSE;
break;
}
printf("Invalid Communication value");
break;
}
case 13:
{
ptr = dat;
strcpy(ptr, &tok_buf);
break;
}
case 14:
{
ptr = tim;
strcpy(ptr, &tok_buf);
break;
}
}
}
}
}
if (select_error_msg(&err) != OK)
return (NOT_OK);
if (err == TRUE)
return (NOT_OK);
return (OK);
}