diff --git a/Z1000_focus/html/focus.js b/Z1000_focus/html/focus.js index 62a71e3..635487b 100644 --- a/Z1000_focus/html/focus.js +++ b/Z1000_focus/html/focus.js @@ -1,6 +1,8 @@ Foc = function(){ // const REQ_PATH=window.location.hostname+":4444/"; -const REQ_PATH="http://dasha.sao.ru:4444/"; +const REQ_PATH="http://ztcs.sao.ru:4444/"; +const DEBUG = false; // set to true for debug +var targspeeds = [ 220, 500, 800, 1200 ]; // four target speeds var minVal=0.01, maxVal=76.5, curVal = 3.0, curSpeed = 1; var timeout_upd, timeout_msg; // ID @@ -24,25 +26,41 @@ function sendrequest(req_STR, _onOK){ request.send(req_STR); timeout_id = setTimeout(function(){blockMsg("Request timeout");}, 3000); } +function Log(x){ + if(DEBUG) console.log(x); +} // show message blocking all function blockMsg(txt, bgcolor){ $("shadow").style.display = "block"; - if(!bgcolor) bgcolor = "red"; + if(!bgcolor) bgcolor = "gray"; + $("shadow").style.backgroundColor = bgcolor; $("shadow").innerHTML = txt.replace("\n", "
"); } +function btnsStat(moving){ + var color = moving ? "red" : "green"; + $("Fstop").disabled = !moving; + $("Fstop").style.backgroundColor = moving ? "green" : "red"; + $("Fset").disabled = moving; + $("Fset").style.backgroundColor = color; + $("F-").disabled = moving; + $("F-").style.backgroundColor = color; + $("F+").disabled = moving; + $("F+").style.backgroundColor = color; +} // parse answer for status request function chkStatus(req){ var msg = req.responseText; - console.log("Get status message: " + msg); - if(msg == "OK"){ + Log("Get status message: " + msg); + if(msg == "OK" || msg == "moving"){ $("shadow").innerHTML = ""; $("shadow").style.display = "none"; + btnsStat(msg == "moving"); }else blockMsg(msg); }; // parse answer for command requests function chkCmd(req){ var msg = req.responseText; - console.log("Get cmd answer: " + msg); + Log("Get cmd answer: " + msg); if(msg != "OK") alert(msg); } /* @@ -63,13 +81,13 @@ function ch_status(txt, bgcolor){ }*/ var first = true; function chF(req){ - console.log(req.responseText); + Log(req.responseText); curVal = Number(req.responseText); if(first){ $('focSet').value = curVal; first = false; } - $('curFval').innerHTML = curVal; + $('curFval').innerHTML = Number(Math.round(curVal*100.)/100.).toFixed(2); //$('focSlider').value = curVal; } function getdata(){ @@ -78,7 +96,31 @@ function getdata(){ sendrequest("status", chkStatus); timeout_upd = setTimeout(getdata, 1000); } - +// set limits +function getLimits(req){ + var lims = {}; + req.responseText.split('\n').forEach(function(value){ + var keypair = value.split('='); + lims[keypair[0]] = keypair[1]; + }); + if(lims["focmin"]){ // focmin=2.75 + $('focSet').min = minVal = Number(lims["focmin"]); + Log("focmin: " + minVal); + } + if(lims["focmax"]){ // focmax=76 + $('focSet').max = maxVal = Number(lims["focmax"]); + Log("focmax: " + maxVal); + } + if(lims["maxspeed"] && lims["minspeed"]){ + var minspd = Number(lims["minspeed"]); // minspeed=350 + var maxspd = Number(lims["maxspeed"]); // maxspeed=1200 + var w = (maxspd - minspd)/3; + for(i = 0; i < 4; ++i){ + targspeeds[i] = Math.round(minspd + w*i); + Log("targspeeds["+i+"]="+targspeeds[i]); + } + } +} // init all things function FirstRun(){ blockMsg("init", "black"); @@ -88,6 +130,7 @@ function FirstRun(){ F.value = curVal; F.min = minVal; F.max = maxVal; + sendrequest("limits", getLimits); getdata(); } // send new focus value @@ -97,19 +140,19 @@ function SetFocus(){ alert("Wrong focus value"); return; } - console.log("Set focus: " + set); + Log("Set focus: " + set); sendrequest("goto="+set, chkCmd); } function Move(dir){ - console.log("Move to " + ((dir > 0) ? "+" : "-") + " with speed " + curSpeed); - var targspeeds = [ 130, 400, 800, 1200 ]; + Log("Move to " + ((dir > 0) ? "+" : "-") + " with speed " + curSpeed); + var cmd = "targspeed=" + ((dir > 0) ? "" : "-") + targspeeds[curSpeed-1]; sendrequest(cmd, chkCmd); - console.log("send request " + cmd); + Log("send request " + cmd); } function Stop(){ sendrequest("stop", chkCmd); - console.log("Stop"); + Log("Stop"); } // slider or input field changed function change(val){ @@ -117,14 +160,14 @@ function change(val){ else if(val > maxVal) val = maxVal; //$('focSlider').value = val; $('focSet').value = val; - console.log("Chfocval: " + val); + Log("Chfocval: " + val); } function chSpd(val){ if(val < 1) val = 1; else if(val > 4) val = 4; $('speed').value = val; curSpeed = val; - console.log("Chspd: " + val); + Log("Chspd: " + val); } // update value in input field by current function update(){ diff --git a/Z1000_focus/html/focus.html b/Z1000_focus/html/index.html similarity index 82% rename from Z1000_focus/html/focus.html rename to Z1000_focus/html/index.html index a49c8f0..690f719 100644 --- a/Z1000_focus/html/focus.html +++ b/Z1000_focus/html/index.html @@ -1,6 +1,7 @@ + Zeiss-1000 focusing @@ -39,9 +40,9 @@ body{text-align:center;}   
- + - +
diff --git a/Z1000_focus/socket.c b/Z1000_focus/socket.c index b1fd8ab..789e5fb 100644 --- a/Z1000_focus/socket.c +++ b/Z1000_focus/socket.c @@ -127,6 +127,7 @@ static char* stringscan(char *str, char *needle){ return a; } +static uint8_t ismoving = 0; // ==1 when moving thread is active /** * @brief move_focus - separate thread moving focus to given position * @param targpos - target position @@ -135,8 +136,10 @@ static void *move_focus(void *targpos){ double pos = *((double*)targpos); DBG("MOVE FOCUS: %g", pos); pthread_mutex_lock(&canbus_mutex); + ismoving = 1; // in any error case we should check end-switches and move out of them! if(move2pos(pos)) go_out_from_ESW(); + ismoving = 0; putlog("Focus value: %.03f", curPos()); pthread_mutex_unlock(&moving_mutex); pthread_mutex_unlock(&canbus_mutex); @@ -271,7 +274,8 @@ static void *handle_socket(void *asock){ const char *msg = S_STATUS_ERROR; switch(get_status()){ case STAT_OK: - msg = S_STATUS_OK; + if(ismoving) msg = S_STATUS_MOVING; + else msg = S_STATUS_OK; break; case STAT_DAMAGE: msg = S_STATUS_DAMAGE; @@ -289,7 +293,7 @@ static void *handle_socket(void *asock){ msg = S_STATUS_FORBIDDEN; break; default: - msg = "Unknown status"; + "Unknown status"; } sprintf(buff, "%s", msg); }else sprintf(buff, S_ANS_ERR); diff --git a/Z1000_focus/socket.h b/Z1000_focus/socket.h index d3f9ada..9d6ee6c 100644 --- a/Z1000_focus/socket.h +++ b/Z1000_focus/socket.h @@ -46,11 +46,12 @@ // statuses #define S_STATUS_OK "OK" -#define S_STATUS_ESW "End-switch active" -#define S_STATUS_ERROR "SEW power if off (or other error)" -#define S_STATUS_GOFROMESW "Moving from end-switch" -#define S_STATUS_FORBIDDEN "Motion in forbidden position" -#define S_STATUS_DAMAGE "Damaged state, call engineer" +#define S_STATUS_MOVING "moving" +#define S_STATUS_ESW "Wait: end-switch active" +#define S_STATUS_ERROR "Error: SEW power is off" +#define S_STATUS_GOFROMESW "Wait: moving from end-switch" +#define S_STATUS_FORBIDDEN "Error: motion in forbidden position" +#define S_STATUS_DAMAGE "Error: damaged state, call engineer" bool emerg_stop;