From e7b345b3778856087db1ac0335c206510c188e3f Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Mon, 10 Aug 2026 10:45:53 +0300 Subject: [PATCH] .. --- BTA_dome_modbus/build | 2 ++ BTA_dome_modbus/client.c | 66 ++++++++++++++++++------------------- BTA_dome_modbus/cmdlnopts.c | 1 + BTA_dome_modbus/cmdlnopts.h | 1 + BTA_dome_modbus/main.c | 1 + BTA_dome_modbus/motors.c | 5 +-- BTA_dome_modbus/run_client | 2 +- BTA_dome_modbus/run_server | 2 +- 8 files changed, 43 insertions(+), 37 deletions(-) create mode 100755 BTA_dome_modbus/build diff --git a/BTA_dome_modbus/build b/BTA_dome_modbus/build new file mode 100755 index 0000000..333ffe5 --- /dev/null +++ b/BTA_dome_modbus/build @@ -0,0 +1,2 @@ +#!/bin/bash +su -c "make debug; chmod a+s dome_client" diff --git a/BTA_dome_modbus/client.c b/BTA_dome_modbus/client.c index 39817a7..12d6fa9 100644 --- a/BTA_dome_modbus/client.c +++ b/BTA_dome_modbus/client.c @@ -274,48 +274,43 @@ static int process_system(SSL *ssl){ return TRUE; } // check time sync - static int brokenshm = FALSE; - if(M_time - last_mtime + G.T_sync_lost > curtime - t0 || !check_shm_block(&sdat)){ // broken SHM - if(!brokenshm){ + static int brokenshmctr = 0; + if(M_time - last_mtime > curtime - t0 + G.T_sync_lost || !check_shm_block(&sdat)){ // broken SHM + if(brokenshmctr == 0){ LOGERR("Stalled or broken SHM block"); - brokenshm = TRUE; } + WARNX("Stalled or broken SHM block; %g -- %g", M_time - last_mtime + G.T_sync_lost, curtime - t0); + if(++brokenshmctr < 10) return TRUE; return FALSE; - }else brokenshm = FALSE; + }else brokenshmctr = 0; static int modelused = FALSE; - if(UseModel == FullModel){ // model - if(!modelused){ - LOGWARN("Server is in model mode"); - modelused = TRUE; - stop_all(ssl); - } - return TRUE; - }else modelused = FALSE; - static int serverisdead = FALSE; - if(ServPID <= 0 || kill(ServPID, 0) < 0){ // dead server - if(!serverisdead){ - LOGERR("Main server is dead"); - serverisdead = TRUE; - } - return FALSE; - }else serverisdead = FALSE; + if(!G.emulmode){ + if(UseModel == FullModel){ // model + if(!modelused){ + LOGWARN("Server is in model mode"); + modelused = TRUE; + stop_all(ssl); + } + return TRUE; + }else modelused = FALSE; + static int serverisdead = FALSE; + if(ServPID <= 0 || kill(ServPID, 0) < 0){ // dead server + WARNX("Main server is dead"); + if(!serverisdead){ + LOGERR("Main server is dead"); + serverisdead = TRUE; + return TRUE; + } + return FALSE; + }else serverisdead = FALSE; + } if(check_motor(ssl, curMotNo)){ // TODO: check state for errors if(++curMotNo >= MOTORS_AMOUNT) curMotNo = 0; } if(!D_Locked && Dome_State != D_Off) chk_dome_speed(ssl); -#if 0 - if(curtime - t0 > 3.){ - sprintf(buf, "help\n"); - SSL_write(ssl, buf, strlen(buf)); - /*DBG("OLD: %g", val_Hmd); - val_Hmd = 55. + drand48() * 15.; - DBG("New: %g", val_Hmd);*/ - t0 = curtime; - } -#endif ; - return FALSE; + return TRUE; } /* @@ -358,18 +353,23 @@ void clientproc(SSL_CTX *ctx, int fd){ } while(isrunning){ if(!process_system(ssl)){ + LOGERR("Motors error"); + WARNX("ERROR!"); stop_all(ssl); sleep(5); break; } + // clear receiving buffer (TODO: parse it?) bytes = SSL_nbread(ssl, buf, sizeof(buf)); if(bytes > 0){ buf[bytes] = 0; - printf("Received: \"%s\"\n", buf); + fprintf(stderr, "Received: \"%s\"\n", buf); }else if(bytes < 0){ LOGWARN("Server disconnected or other error"); ERRX("Disconnected"); } + usleep(100000); } + DBG("Exit; isrunning=%d", isrunning); SSL_free(ssl); } diff --git a/BTA_dome_modbus/cmdlnopts.c b/BTA_dome_modbus/cmdlnopts.c index fc05340..038ef79 100644 --- a/BTA_dome_modbus/cmdlnopts.c +++ b/BTA_dome_modbus/cmdlnopts.c @@ -71,6 +71,7 @@ static sl_option_t cmdlnopts[] = { {"mottmout",NEED_ARG, NULL, 'M', arg_double, APTR(&G.speedchk_interval), _("interval of motor's speed checking, s (default: 10)")}, {"server", NEED_ARG, NULL, 's', arg_string, APTR(&G.serverhost), _("server node, IP:port")}, {"lostsync",NEED_ARG, NULL, 'L', arg_double, APTR(&G.T_sync_lost),_("\"lost synchronization\" timeout, s (default: 5)")}, + {"emulation",NO_ARGS, NULL, 'e', arg_int, APTR(&G.emulmode), _("run even in emulation mode")}, #endif end_option }; diff --git a/BTA_dome_modbus/cmdlnopts.h b/BTA_dome_modbus/cmdlnopts.h index 50a7965..5f87074 100644 --- a/BTA_dome_modbus/cmdlnopts.h +++ b/BTA_dome_modbus/cmdlnopts.h @@ -34,6 +34,7 @@ * here are some typedef's for global data */ typedef struct{ + int emulmode; // emulation mode: don't check server & run in model mode double acc_timeout; // network timeout, s double T_sync_lost; // "lost synchronization" timeout, s double speedchk_interval;// interval of motors' speed checking (resend command if don't reach yet) diff --git a/BTA_dome_modbus/main.c b/BTA_dome_modbus/main.c index 92cc6f1..e59ac0a 100644 --- a/BTA_dome_modbus/main.c +++ b/BTA_dome_modbus/main.c @@ -24,5 +24,6 @@ int main(int argc, char **argv){ sl_init(); parse_args(argc, argv); + DBG("START"); return start_daemon(); } diff --git a/BTA_dome_modbus/motors.c b/BTA_dome_modbus/motors.c index 7da4fcf..5f941ed 100644 --- a/BTA_dome_modbus/motors.c +++ b/BTA_dome_modbus/motors.c @@ -36,7 +36,7 @@ current=xx - (sg) // set points static double currentSet = 0., speedSet = 0.; -// current motor for status etc. getters +// current motor for status etc. getters (0..MOTORS_AMOUNT-1) static int motindex = 0; // stop all @@ -76,7 +76,8 @@ int motors_set_speedsetpoint(double val){ int motors_get_activenum(){ return motindex; } // set number of active motor int motors_set_activenum(int N){ - if(N < 1 || N > MOTORS_AMOUNT) return FALSE; + DBG("Set active motor=%d", N); + if(N < 0 || N >= MOTORS_AMOUNT) return FALSE; motindex = N; return TRUE; } diff --git a/BTA_dome_modbus/run_client b/BTA_dome_modbus/run_client index 923944b..13f8697 100755 --- a/BTA_dome_modbus/run_client +++ b/BTA_dome_modbus/run_client @@ -1,3 +1,3 @@ #!/bin/bash rm client.log 2>/dev/null -./dome_client -a ca/ca/ca_cert.pem -c ca/client/client_cert.pem -k ca/client/private/client_key.pem -vvv -s localhost -l client.log +./dome_client -a ca/ca/ca_cert.pem -c ca/client/client_cert.pem -k ca/client/private/client_key.pem -vvv -s localhost -l client.log $@ diff --git a/BTA_dome_modbus/run_server b/BTA_dome_modbus/run_server index 7514f3b..8defa4a 100755 --- a/BTA_dome_modbus/run_server +++ b/BTA_dome_modbus/run_server @@ -1,3 +1,3 @@ #!/bin/bash rm server.log 2>/dev/null -./dome_server -a ca/ca/ca_cert.pem -c ca/server/server_cert.pem -k ca/server/private/server_key.pem -vvvl server.log +./dome_server -a ca/ca/ca_cert.pem -c ca/server/server_cert.pem -k ca/server/private/server_key.pem -vvvl server.log $@