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