node-red-contrib-mpi-s7
Version:
Node-RED nodes to communicate with Siemens MPI/PPI/DP adapters
172 lines (156 loc) • 6.33 kB
HTML
<!--
Copyright: (c) 2020-2021, ST-One Ltda., Guilherme Francescon Cittolin <guilherme@st-one.io>
GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)
-->
<script type="text/x-red" data-template-name="mpi-s7 adapter">
<div class="form-row">
<label for="node-config-input-adapter"><i class="fa fa-random"></i> <span data-i18n="mpi-s7.adapter.label.adapter"></span></label>
<input type="text" id="node-config-input-adapter" data-i18n="[placeholder]mpi-s7.adapter.placeholder.adapter" style="width:66%;">
<a id="node-config-lookup-adapter" class="btn red-ui-button"><i class="fa fa-search"></i></a>
</div>
<div class="form-row">
<label for="node-config-input-busconfigmode"><i class="fa fa-map-signs"></i> <span data-i18n="mpi-s7.adapter.label.busmode.mode"></span></label>
<select type="text" id="node-config-input-busconfigmode">
<option value="s7-300/400" data-i18n="mpi-s7.adapter.label.busmode.s7-300"></option>
<option value="s7-200" data-i18n="mpi-s7.adapter.label.busmode.s7-200"></option>
<option value="expert" data-i18n="mpi-s7.adapter.label.busmode.expert"></option>
</select>
</div>
<div id="mpi-s7-endpoint-bus-params-simple">
<div class="form-row">
<label for="node-config-input-busaddr"><i class="fa fa-sitemap"></i> <span data-i18n="mpi-s7.adapter.label.busaddr"></span></label>
<input type="text" id="node-config-input-busaddr" data-i18n="[placeholder]mpi-s7.adapter.label.busaddr" style="width: 60px;">
</div>
<div class="form-row">
<label for="node-config-input-maxbusaddr"><i class="fa fa-expand"></i> <span data-i18n="mpi-s7.adapter.label.maxbusaddr"></span></label>
<input type="text" id="node-config-input-maxbusaddr" data-i18n="[placeholder]mpi-s7.adapter.label.maxbusaddr" style="width: 60px;">
</div>
<div class="form-row">
<label for="node-config-input-busspeed"><i class="fa fa-tachometer"></i> <span data-i18n="mpi-s7.adapter.label.busspeed"></span></label>
<select type="text" id="node-config-input-busspeed">
<option value="BAUD_AUTO">Auto</option>
<option value="BAUD_9k6">9.6 kbps</option>
<option value="BAUD_19k2">19.2 kbps</option>
<option value="BAUD_45k45">45.45 kbps</option>
<option value="BAUD_93k75">93.75 kbps</option>
<option value="BAUD_187k5">187.5 kbps</option>
<option value="BAUD_500k">500 kbps</option>
<option value="BAUD_1M5">1.5 Mbps</option>
</select>
</div>
</div>
<div id="mpi-s7-endpoint-bus-params-expert" style="display: none">
<div class="form-row">
<label for="node-config-input-busparams"><span data-i18n="mpi-s7.adapter.label.busparams"></span></label>
<textarea id="node-config-input-busparams" style="width: 70%"></textarea>
</div>
</div>
<div class="form-row">
<label for="node-config-input-timeout"><i class="fa fa-clock-o"></i> <span data-i18n="mpi-s7.adapter.label.timeout"></span></label>
<input type="text" id="node-config-input-timeout" data-i18n="[placeholder]mpi-s7.adapter.label.timeout" style="width: 60px;"> <span>ms</span>
</div>
<div class="form-row">
<label for="node-config-input-name"><i class="fa fa-tag"></i> <span data-i18n="mpi-s7.adapter.label.name"></span></label>
<input type="text" id="node-config-input-name" data-i18n="[placeholder]mpi-s7.adapter.label.name">
</div>
</script>
<script type="text/x-red" data-help-name="mpi-s7 adapter">
<p>Configures the connection to an MPI/PPI/DP</p>
<p>This node was created as part of the <a href="https://st-one.io" target="_blank">ST-One</a> project</p>
<h3>Details</h3>
<p>
<i>Work in progress!</i>
</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('mpi-s7 adapter', {
category: 'config',
defaults: {
name: {
value: ""
},
timeout: {
value: 10000,
validate: RED.validators.number()
},
adapter: {
value: ""
},
busconfigmode: {
value: "s7-300/400"
},
busaddr: {
value: 0,
validate: RED.validators.number()
},
maxbusaddr: {
value: 15,
validate: RED.validators.number()
},
busspeed: {
value: "BAUD_AUTO"
},
busparams: {
value: '',
validate: function (v) { try { v && JSON.parse(v) } catch (e) { return false; } return true; }
}
},
label: function () {
if (this.name) {
return this.name;
} else if (this.adapter) {
return "[" + this.adapter + "] @" + this.busaddr;
} else {
return "MPI/PPI/DP @" + this.busaddr;
}
},
oneditprepare: function () {
var self = this;
var inputAdapter = $('#node-config-input-adapter');
var inputBusConfigMode = $('#node-config-input-busconfigmode');
var inputBusAddr = $('#node-config-input-busaddr');
var inputMaxBusAddr = $('#node-config-input-maxbusaddr');
var inputTimeout = $('#node-config-input-timeout');
var sectionParamsSimple = $('#mpi-s7-endpoint-bus-params-simple');
var sectionParamsExpert = $('#mpi-s7-endpoint-bus-params-expert');
var btnAdapterLookup = $('#node-config-lookup-adapter');
inputBusAddr.spinner({ min: 0, max: 126 });
inputMaxBusAddr.spinner({ min: 1, max: 126 });
inputTimeout.spinner({ min: 0 });
if (this.busaddr === undefined){
inputBusAddr.val(0);
}
inputBusConfigMode.change(function() {
var curVal = inputBusConfigMode.val();
if (curVal == 'expert') {
sectionParamsSimple.hide();
sectionParamsExpert.show();
} else {
sectionParamsSimple.show();
sectionParamsExpert.hide();
}
});
inputBusConfigMode.change();
btnAdapterLookup.click(function() {
if (btnAdapterLookup.hasClass('disabled')) return;
btnAdapterLookup.addClass('disabled');
var iconLookup = btnAdapterLookup.children('i');
iconLookup.removeClass('fa-search').addClass('fa-spinner fa-spin fa-fw');
$.getJSON('__node-red-contrib-mpi-s7/available-adapters', function(data){
console.log("node-red-contrib-mpi-s7 discovered adapters", data);
inputAdapter.autocomplete({
source: data,
minLength: 0
});
inputAdapter.focus(function () {
inputAdapter.autocomplete("search", "")
});
inputAdapter.focus();
}).always(function () {
iconLookup.removeClass('fa-spinner fa-spin fa-fw').addClass('fa-search');
btnAdapterLookup.removeClass('disabled');
});
})
}
});
</script>