找了一遍又一遍文檔,最終找了一個視頻,跟我的預(yù)期是很符合的,但是還是有困惑的地方
1.操作流程如下、一個硬件電子秤 ,電子秤稱了東西,php 后臺就能接受到數(shù)據(jù),然后入庫
我找到一片文檔解決方案是 php 的 dio 串口,具體操作如下 ,用一個軟件模擬串口發(fā)送數(shù)據(jù)。后臺接收。這個可以理解,如圖
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<div id="fdsa" class="">
</div>
</body>
<script>
//假設(shè)每隔秒發(fā)送一次請求
window.onload = function () {
getApi();
}
function getApi() {
//設(shè)置時間秒 1000-毫秒 這里設(shè)置你自己想要的時間
setTimeout(getApi,1*1000);
$.ajax({
url: 'http://localhost/comdemo/com.php',
type: 'get',
dataType: 'text',
success: function (data) {
//方法中傳入的參數(shù)data為后臺獲取的數(shù)據(jù)
console.log(data);
$("#fdsa").append("<br/>"+data);
}
})
}
</script>
</html>
<?php
/**
* 打開串口
* $com:串口號,$baud:波特率,$date數(shù)據(jù)位,$stop:停止位
*/
function open_com($com,$baud,$data,$stop)
{
exec('mode : baud='.$baud.' data='.$data.'. stop='.$stop.' parity=n xon=on');
// 打開串口
$ck = dio_open($com . ':', O_RDWR);
// 如果打開串口失敗,停止腳本,并輸出“打開串口COM1失敗”;
if (!$ck) {
die("打開串口" . $com . "失敗");
return false;
} else {
return $ck;
}
} // end open_com
/**
* 讀取串口數(shù)據(jù)
*/
function get_com($rs){
//讀取串口并將讀取到的數(shù)據(jù)賦值給變量‘$shuju’;
$shuju = dio_read($rs);
$shuju .= dio_read($rs);
//這里賦值兩遍是應(yīng)為第一次賦值只能獲取到第一個字符,再賦值一次就能獲得完整字符(我也不知為什么,也就只能用這種笨一點(diǎn)的方法le)
return $shuju;
} // end get_com
/**
* 關(guān)閉串口
*/
function close_com($rs)
{
dio_close($rs);
} // end close_com
$isOpen = open_com($com='COM2', $baud = '9600', $data='8', $stop = '1');
echo get_com($isOpen);
?>
你的方案不太科學(xué),ajax輪詢效率太低且消耗資源太高,并且即時性差,應(yīng)該用TCP服務(wù)端跟設(shè)備連接,web前端通過websocket實時顯示。
推薦方案:
1、硬件1:電子秤支持232/485接口,支持MODBUS協(xié)議均可,淘寶上搜關(guān)鍵詞“電子秤 485”,出來的都是可以使用的,建議購買基于MODBUS協(xié)議的。
2、硬件2:DTU:推薦品牌有人,型號(有線:USR-N510),(無線G780V2)。
3、軟件:搭建TCP服務(wù)端,可以使用workerman或webman搭建,也可以去市場購買現(xiàn)成的應(yīng)用,如:IOT物聯(lián)網(wǎng)系統(tǒng): http://m.wtbis.cn/app/view/iot
4、操作方法:
(1)找電子秤賣家要到通訊協(xié)議文檔。協(xié)議一般是MODBUS。
(2)協(xié)議里會寫有電子秤的串口參數(shù),一般是9600N81,即波特率:9600,校驗位:NONE,數(shù)據(jù)位:8,停止位:1,將這個參數(shù)配置到DTU里(DTU有對應(yīng)軟件可配置)。
(3)在IOT物聯(lián)網(wǎng)系統(tǒng)里添加設(shè)備,添加TCP設(shè)備和websocket設(shè)備,并且在TCP里配置轉(zhuǎn)發(fā)websocket。并且給TCP設(shè)備配置定時下發(fā)。如下圖
(4)上圖的定時下發(fā),目的是每秒請求一次設(shè)備的當(dāng)前稱重結(jié)果,這個01 03 00 00 00 02 C4 0B,就是文檔里提供的請求數(shù)據(jù)幀,服務(wù)端每隔一秒給DTU發(fā)送一次這個請求幀,DTU收到后轉(zhuǎn)發(fā)給設(shè)備,設(shè)備回復(fù)的數(shù)據(jù)幀也會被DTU轉(zhuǎn)發(fā)給服務(wù)端。
(5)TCP設(shè)備端由于配置了轉(zhuǎn)發(fā)websocket,所以當(dāng)收到這個數(shù)據(jù)幀后,會立即轉(zhuǎn)發(fā)給websocket。
(6)web前臺注冊websocket,連接到服務(wù)端,收到請求幀之后,根據(jù)文檔提供的解析方法,解析出稱重數(shù)據(jù)。