fixed web-interface

This commit is contained in:
Edward Emelianov 2020-03-17 18:00:52 +03:00
parent 8ce37f4151
commit 9081ca21a0
4 changed files with 75 additions and 26 deletions

View File

@ -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", "<br>");
}
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(){

View File

@ -1,6 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ASCII"/>
<style type="text/css">
body{text-align:center;}
.shadow{
@ -19,8 +20,8 @@ body{text-align:center;}
.big{font-size: 200%;}
.M{margin-bottom: 5px;}
.C{text-align:center; padding: 10px;}
.btm{margin-top: 15px; color: red; position: fixed; bottom: 10px;
width: 50%; left: 25%; font-size: 200%;}
/*.btm{margin-top: 15px; color: red; position: fixed; bottom: 10px;
width: 50%; left: 25%; font-size: 200%;}*/
</style>
<script src="focus.js" type="text/javascript" language="javascript"></script>
<title>Zeiss-1000 focusing</title>
@ -39,9 +40,9 @@ body{text-align:center;}
<button class="B" id="F+" onmousedown="Foc.Move(1);" onmouseup="Foc.Stop();">+</button>&nbsp;&nbsp;
</div>
<div class="C big">
<button class="B" id="Fstop" onclick="Foc.Stop();">Stop</button>
<button class="B" id="Fstop" onclick="Foc.Stop();" disabled>Stop</button>
<input style="width: 130px" id="focSet" type="number" lang="en-150" value="2" min="0.1" max="65" step="0.01"> <!-- onchange="Foc.Ch(this.value);"-->
<button class="B" id="Fset" onclick="Foc.SetFocus();">Set</button>
<button class="B" id="Fset" onclick="Foc.SetFocus();" disabled>Set</button>
</div>
</div>
<div class="shadow" id="shadow">

View File

@ -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);

View File

@ -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;