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