代码拉取完成,页面将自动刷新
同步操作将从 卜先彦_Arvin/serialport 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
说明:该程序通过node.js方法实现对串口进行读写。进行node.js的串口程序开发,必须安装node.js下的串口开发控件‘serialport’。
安装: npm install serialport
function open_serial() {
var serialPort = new SerialPort.SerialPort(com_num, {
baudrate: baudrate, //波特率设置
databits: databits, //数据位
parity: parity, //校验位
stopbits: stopbits //停止位
// parser: SerialPort.parsers.readline("\n") //这句可能调用方法不对,加上这句就会出现接收数据编码不正常
});
data_to_web('串口已经打开');
sp = serialPort;
}
说明:通过该方法创建串口。注意创建窗口的时候串口号是必要条件,否则就会报错,无法创建端口。
function serial_read() {
sp.on('data', function (info) {
console.log('data_change:' + iconv.decode(info, rec_setting));
data_to_web(iconv.decode(info, rec_setting));
data_to_web('接收数据字节长度:' + info.length);
});
}
说明:通过该方法读取串口数据。
function serial_write() {
var buf_once = new Buffer(write_data, send_setting);
sp.write(buf_once, function (err, results) {
if (err) {
console.log('err ' + err);
}
else {
data_to_web('发送数据:' + write_data.toLocaleUpperCase());
data_to_web('发送数据字节长度: ' + results);
console.log('发送数据:' + write_data.toLocaleUpperCase());
console.log('发送数据字节长度: ' + results); //发出去的数据字节长度
}
});
if (auto_send_time != 0) {
var autoSend = setInterval(function () {
if (serial_flag != 'close') {
var buf = new Buffer(write_data, send_setting);
sp.write(buf, function (err, results) {
if (err) {
console.log('err ' + err);
}
else {
data_to_web('发送数据:' + write_data.toLocaleUpperCase());
data_to_web('发送数据字节长度: ' + results);
console.log('发送数据:' + write_data.toLocaleUpperCase());
console.log('发送数据字节长度: ' + results); //发出去的数据字节长度
}
})
}
else {
clearInterval(autoSend);
}
}, auto_send_time);
}
}
说明:通过该方法向串口写入数据。因为在实际串口调试中存在单次发送和定时连续发生,所以这里也对这两种情况做了区分。当然,当我们点下发送按钮的时候,必须立马有一条数据发出,所以如这个方法里面的代码所示,调用该方法的时候我首先会先发送一次数据。这样做的好处是避免延时现象,比如我要间隔2s定时发送数据,那么当发送按钮点击完成,2s后才会开始发送数据。
function send_juge() {
//命令手动发送条件
if (command != "" && auto_send == "auto_send_no") //发送命令手动抄表
{
serial_read_write(command, 0);
}
//命令自动发送
if (command != "" && auto_send == "auto_send_yes") //定时自动抄表
{
serial_read_write(command, auto_time);
}
}
这里面还有其它的方法和逻辑判断,这里不一一细说,在程序里面都有相应的注释。在web端运用了多个ajax推送页面信息到后台服务的事件,这里只给出一个示例说明:
$(function()
{
$('#set_change').click(function()
{
rec_setting = $("#rec_setting").find('option:selected').val();//获取接收编码
send_setting = $("#send_setting").find('option:selected').val();//获取发送编码
var encode_set = {
rec_setting: rec_setting,
send_setting: send_setting
};
var JSON_encode = JSON.stringify(encode_set); //将js对象转换成json格式数据
$.ajax({
type: 'post',
url: "command_1.1.html",
data: JSON_encode,
async: true,
// dataType: 'json',
success: function (data) {
// alert(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// alert("Save error!" + XMLHttpRequest.status + " " + XMLHttpRequest.readyState);
alert("指令发送失败,请检查服务器是否运行正常!")
}
});
connect_toserver.emit('encode_setting', encode_set);
})
});
说明:这个方法是推送编码设置到后台程序。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。