213 lines
6.9 KiB
HTML
213 lines
6.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>ln.ethercat Diagnostics Application</title>
|
|
<meta charset="UTF-8">
|
|
|
|
<link rel="stylesheet" href="/css/spa.css">
|
|
<!--link rel="stylesheet" href="/css/ln.vue.css"/-->
|
|
|
|
<script type="text/javascript" src="/js/ln.js"></script>
|
|
<script type="text/javascript" src="/js/lib/ln.promise.js"></script>
|
|
|
|
<script type="text/javascript" src="/js/vue/vue.js"></script>
|
|
<script type="text/javascript" src="/js/vue/vue-router.js"></script>
|
|
|
|
<script type="text/javascript" src="/js/pdopanel.js"></script>
|
|
<script type="text/javascript" src="/js/sdopanel.js"></script>
|
|
<script type="text/javascript" src="/js/sdotable.js"></script>
|
|
<script type="text/javascript" src="/js/sdoselect.js"></script>
|
|
|
|
<script type="text/javascript" src="/js/ecapp.js"></script>
|
|
|
|
</head>
|
|
<body>
|
|
<div id="frame">
|
|
<header>
|
|
<div class="wrapper">
|
|
<button @click="$ECAPP.requestState(0, 'PRE_OP');" class="state silver" v-bind:class="[ state.state == 'PRE_OP' ? 'active' : '' ]">PRE_OP</button>
|
|
<button @click="$ECAPP.requestState(0, 'SAFE_OP');" class="state orange" v-bind:class="[ state.state == 'SAFE_OP' ? 'active' : '' ]">SAFE_OP</button>
|
|
<button @click="$ECAPP.requestState(0, 'OPERATIONAL');" class="state green" v-bind:class="[ state.state == 'OPERATIONAL' ? 'active' : '' ]">OPERATIONAL</button>
|
|
Slave States:
|
|
<span
|
|
class="state"
|
|
v-for="slave in state.slaves"
|
|
:class="[slave.state]"
|
|
>{{ slave.id }}: {{ slave.state }}
|
|
</span>
|
|
</div>
|
|
</header>
|
|
<main>
|
|
<div id="main">
|
|
<div>
|
|
<router-link to="/controller">Steuerung</router-link>
|
|
<router-link
|
|
v-for="slave in state.slaves"
|
|
:to="'/slave/' + slave.id"
|
|
>Slave {{ slave.id }}</router-link>
|
|
</div>
|
|
|
|
<router-view></router-view>
|
|
</div>
|
|
<aside class="right">
|
|
<pdo-panel
|
|
id="pdopanel"
|
|
:processdata="processdata"
|
|
@write="$ECAPP.sendMessage('sdowrite', $event);"
|
|
></pdo-panel>
|
|
</aside>
|
|
</main>
|
|
<footer>
|
|
|
|
</footer>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
|
var routes = [
|
|
{ path: "/", component: null },
|
|
];
|
|
|
|
var vueRouter = new VueRouter({ routes });
|
|
var $ECAPP = new EthercatApplication({});
|
|
|
|
LN
|
|
.$fetch("/pages/slave.html")
|
|
.then((src)=>{
|
|
vueRouter.addRoutes([{
|
|
path: "/slave/:slave_id",
|
|
props: true,
|
|
component: {
|
|
template: src,
|
|
props: ['slave_id'],
|
|
data: function(){ return $ECAPP; },
|
|
}
|
|
}]);
|
|
});
|
|
|
|
LN
|
|
.$fetch("/pages/controller.html")
|
|
.then((src)=>{
|
|
vueRouter.addRoutes([{
|
|
path: "/controller",
|
|
component: {
|
|
template: src,
|
|
data: function(){
|
|
let d = { controller: {}, drive_controller: null };
|
|
let socket = $ECAPP.connectWebSocket("/api/v1/sockets/controller");
|
|
socket.onmessage = (evt)=>{
|
|
let json = JSON.parse(evt.data);
|
|
d.controller = json;
|
|
};
|
|
return d;
|
|
}
|
|
}
|
|
}]);
|
|
vueRouter.addRoutes([{
|
|
path: "/controller/drives/:drive",
|
|
props: true,
|
|
component: {
|
|
props: ['drive'],
|
|
template: src,
|
|
data: function(){
|
|
let d = { sockets: {}, controller: {}, drive_controller: {} };
|
|
|
|
d.targetTorque = 0;
|
|
d.targetSpeed = 0;
|
|
d.targetPosition = 0;
|
|
|
|
d.sockets.controller = $ECAPP.connectWebSocket("/api/v1/sockets/controller");
|
|
d.sockets.controller.onmessage = (evt)=>{
|
|
let json = JSON.parse(evt.data);
|
|
d.controller = json;
|
|
};
|
|
d.sockets.drive = $ECAPP.connectWebSocket("/api/v1/sockets/controller/drives/" + this.drive);
|
|
d.sockets.drive.onmessage = (evt)=>{
|
|
let json = JSON.parse(evt.data);
|
|
d.drive_controller = json;
|
|
};
|
|
return d;
|
|
},
|
|
methods: {
|
|
setProperty: function(propName,propValue){
|
|
pv = {};
|
|
pv[propName] = propValue;
|
|
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "set",
|
|
value: pv
|
|
})
|
|
);
|
|
},
|
|
drive_poweroff: function(){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "PowerOff"
|
|
})
|
|
);
|
|
},
|
|
drive_poweron: function(){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "PowerOn"
|
|
})
|
|
);
|
|
},
|
|
drive_disable: function(){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "DisableDrive"
|
|
})
|
|
);
|
|
},
|
|
drive_enable: function(){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "EnableDrive"
|
|
})
|
|
);
|
|
},
|
|
drive_clearfault: function(){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "ClearFault"
|
|
})
|
|
);
|
|
},
|
|
drive_drivemode: function(mode){
|
|
this.sockets.drive.send(
|
|
JSON.stringify({
|
|
event: "action",
|
|
value: "SetDriveMode" + mode
|
|
})
|
|
);
|
|
}
|
|
|
|
}
|
|
}
|
|
}]);
|
|
})
|
|
|
|
vueRouter.beforeEach((to,from,next)=>{
|
|
$ECAPP.closeWebSockets();
|
|
next();
|
|
});
|
|
|
|
var app = new Vue({
|
|
el: "#frame",
|
|
data: $ECAPP,
|
|
router: vueRouter
|
|
});
|
|
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html> |