亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

PLC到Web SCADA實(shí)戰(zhàn):MQTT+Node.js工業(yè)數(shù)據(jù)鏈路搭建指南

PLC到Web SCADA實(shí)戰(zhàn):MQTT+Node.js工業(yè)數(shù)據(jù)鏈路搭建指南 1. 為什么“PLC → Web SCADA”這條路90%的工程師卡在第一步就放棄了我第一次把臺(tái)達(dá)AS系列PLC的數(shù)據(jù)實(shí)時(shí)顯示在手機(jī)瀏覽器上時(shí)不是靠什么云平臺(tái)SaaS服務(wù)也不是買(mǎi)一套動(dòng)輒十幾萬(wàn)的商業(yè)SCADA軟件——而是用一臺(tái)二手樹(shù)莓派、一個(gè)工業(yè)智能網(wǎng)關(guān)、Node.js寫(xiě)的一段不到200行的代碼外加一個(gè)MQTT Broker。整個(gè)過(guò)程從接線到上線耗時(shí)3小時(shí)47分鐘其中3小時(shí)12分鐘花在查文檔、試端口、改配置上。這不是炫技而是工業(yè)現(xiàn)場(chǎng)最真實(shí)的狀態(tài)硬件能通協(xié)議能跑但數(shù)據(jù)就是進(jìn)不了網(wǎng)頁(yè)。這背后藏著三個(gè)被絕大多數(shù)入門(mén)教程刻意回避的硬傷第一PLC本身不說(shuō)話——它只提供Modbus TCP或EtherNet/IP這類(lèi)底層協(xié)議沒(méi)有HTTP接口更不認(rèn)MQTT第二工業(yè)智能網(wǎng)關(guān)不是“即插即用”的U盤(pán)它的核心價(jià)值在于協(xié)議翻譯與數(shù)據(jù)整形而90%的用戶把它當(dāng)成了透明網(wǎng)橋第三Node.js在這里不是用來(lái)寫(xiě)網(wǎng)站的它是數(shù)據(jù)流的調(diào)度中樞、協(xié)議轉(zhuǎn)換的中間件、以及異常狀態(tài)的守門(mén)人——但幾乎所有Node.js教程都教你怎么搭Express服務(wù)器沒(méi)人告訴你怎么讓net.Socket穩(wěn)定維持100個(gè)PLC連接。你搜“plc編程入門(mén)基礎(chǔ)知識(shí)”得到的是梯形圖邏輯搜“mqtt協(xié)議詳解”看到的是QoS等級(jí)和主題層級(jí)搜“node.js安裝教程”教你怎么nvm install 18.20.4??蓻](méi)人告訴你臺(tái)達(dá)PLC默認(rèn)關(guān)閉Modbus TCP服務(wù)必須進(jìn)參數(shù)設(shè)置頁(yè)手動(dòng)啟用MQTT Explorer連不上Broker八成是因?yàn)閃indows防火墻放行了1883端口卻忘了禁用IPv6導(dǎo)致bind失敗Node.js進(jìn)程一重啟所有PLC連接就斷而你根本沒(méi)寫(xiě)重連邏輯。這篇指南不講概念不畫(huà)架構(gòu)圖不列“五大優(yōu)勢(shì)”。我們直接拆解從PLC物理網(wǎng)口擰出網(wǎng)線那一刻起到你在Chrome地址欄輸入http://localhost:3000看到實(shí)時(shí)溫度曲線為止每一步踩過(guò)的坑、測(cè)過(guò)的參數(shù)、改過(guò)的代碼全部攤開(kāi)。你會(huì)看到真實(shí)的IP配置截圖已脫敏、Wireshark抓包里Modbus功能碼03的原始字節(jié)流、MQTT Broker日志中Client gateway-01 connected之后緊接著的Connection refused, not authorized錯(cuò)誤、以及Node.js里那個(gè)被反復(fù)重構(gòu)了7次的reconnectWithBackoff()函數(shù)。這不是理論推演這是我在食品廠灌裝線、光伏逆變器調(diào)試現(xiàn)場(chǎng)、還有三臺(tái)閑置PLC堆在辦公桌上的實(shí)操?gòu)?fù)盤(pán)。關(guān)鍵詞PLC、Web SCADA、MQTT、Node.js、工業(yè)智能網(wǎng)關(guān)——它們不是并列關(guān)系而是數(shù)據(jù)流動(dòng)的五個(gè)關(guān)鍵節(jié)點(diǎn)PLC是源頭數(shù)據(jù)生產(chǎn)者工業(yè)智能網(wǎng)關(guān)是翻譯官協(xié)議轉(zhuǎn)換器MQTT是郵局消息分發(fā)網(wǎng)絡(luò)Node.js是調(diào)度室業(yè)務(wù)邏輯處理器Web SCADA是終端可視化呈現(xiàn)。漏掉任何一個(gè)環(huán)節(jié)整條鏈路就斷在暗處。接下來(lái)我們就按這個(gè)物理流向一節(jié)一節(jié)擰緊螺絲。2. 工業(yè)智能網(wǎng)關(guān)不是路由器是懂PLC方言的翻譯官市面上標(biāo)著“工業(yè)智能網(wǎng)關(guān)”的盒子長(zhǎng)得都像路由器——四個(gè)網(wǎng)口、一個(gè)電源、指示燈閃爍。但如果你把它當(dāng)成普通路由器去配DHCP、設(shè)SSID那它永遠(yuǎn)只是個(gè)擺設(shè)。它的本質(zhì)是嵌入式Linux系統(tǒng)多協(xié)議棧固件可配置規(guī)則引擎的組合體。我手頭這臺(tái)匯川HG200也測(cè)試過(guò)研華WISE-4050和樹(shù)莓派Modbus TCP轉(zhuǎn)MQTT腳本核心能力不在“聯(lián)網(wǎng)”而在理解PLC說(shuō)的方言并把它翻譯成MQTT能聽(tīng)懂的普通話。先說(shuō)最關(guān)鍵的誤區(qū)很多人以為網(wǎng)關(guān)只要連上PLC網(wǎng)口就能自動(dòng)采集數(shù)據(jù)。錯(cuò)。它需要你明確告訴它三件事PLC的IP和端口、要讀哪個(gè)寄存器地址、讀出來(lái)的原始字節(jié)怎么解釋成工程值。以臺(tái)達(dá)DVP-ES3 PLC為例溫度傳感器接在AI模塊第1通道對(duì)應(yīng)Modbus地址40001保持寄存器功能碼03。但網(wǎng)關(guān)配置界面里你填的不是“40001”而是設(shè)備地址1PLC站號(hào)非IP起始地址0注意Modbus協(xié)議里40001對(duì)應(yīng)偏移量0不是1寄存器數(shù)量1數(shù)據(jù)類(lèi)型INT1616位有符號(hào)整數(shù)縮放系數(shù)0.1因?yàn)镻LC里存的是10倍整數(shù)實(shí)際溫度讀數(shù)×0.1提示這個(gè)縮放系數(shù)是工業(yè)現(xiàn)場(chǎng)最常被忽略的細(xì)節(jié)。我見(jiàn)過(guò)三次故障一次是水冷機(jī)組溫度顯示-3276.8℃INT16溢出未處理一次是壓力表讀數(shù)始終為0縮放系數(shù)填成10.0而非0.1一次是流量累計(jì)值跳變網(wǎng)關(guān)未啟用“保持最后值”策略PLC通訊中斷時(shí)返回0。這些都不是代碼bug是配置失當(dāng)。網(wǎng)關(guān)的Web管理界面通常有“協(xié)議配置”、“數(shù)據(jù)點(diǎn)配置”、“MQTT發(fā)布”三大板塊。重點(diǎn)說(shuō)“數(shù)據(jù)點(diǎn)配置”里的陷阱有些網(wǎng)關(guān)如早期版本HG200要求你為每個(gè)寄存器單獨(dú)建一個(gè)“數(shù)據(jù)點(diǎn)”命名必須是英文數(shù)字不能含下劃線或中文且長(zhǎng)度不超過(guò)16字符。我曾因給溫度點(diǎn)命名為temp_oven_117字符導(dǎo)致整個(gè)MQTT發(fā)布功能失效日志里只有一行[ERROR] Invalid point name查了兩小時(shí)才發(fā)現(xiàn)是命名超長(zhǎng)。MQTT發(fā)布配置更微妙。主題Topic不能寫(xiě)死成/plc/temperature而應(yīng)設(shè)計(jì)成帶設(shè)備標(biāo)識(shí)的層級(jí)結(jié)構(gòu)例如plc/delta/line1/oven/temp。這樣做的好處是當(dāng)產(chǎn)線增加第二臺(tái)PLC時(shí)只需新增plc/delta/line2/oven/temp主題Node.js訂閱plc/delta//oven/temp就能自動(dòng)覆蓋。而如果所有設(shè)備都發(fā)到同一主題數(shù)據(jù)就會(huì)相互覆蓋——你永遠(yuǎn)不知道此刻收到的溫度值來(lái)自哪臺(tái)設(shè)備。注意網(wǎng)關(guān)的MQTT客戶端ID必須全局唯一。我曾把兩臺(tái)網(wǎng)關(guān)都設(shè)為gateway-01結(jié)果Broker強(qiáng)制踢掉先連接的那個(gè)造成數(shù)據(jù)斷續(xù)。正確做法是用MAC地址后四位生成ID如gateway-8a3f。最后強(qiáng)調(diào)一個(gè)物理層細(xì)節(jié)網(wǎng)關(guān)與PLC之間必須用工業(yè)級(jí)屏蔽雙絞線且屏蔽層單端接地。我用普通網(wǎng)線直連在電機(jī)啟停瞬間Wireshark抓包顯示Modbus響應(yīng)延遲從12ms飆到380ms網(wǎng)關(guān)頻繁報(bào)“超時(shí)重試”。換用帶屏蔽層的Cat5e線纜后延遲穩(wěn)定在15±3ms。這不是玄學(xué)是電磁兼容EMC的基本要求——PLC柜里變頻器的dv/dt干擾會(huì)通過(guò)地線耦合進(jìn)通信回路。3. MQTT Broker別再用Mosquitto默認(rèn)配置跑生產(chǎn)環(huán)境你搜“mqtt服務(wù)器搭建”十篇教程九篇教你apt install mosquitto然后systemctl start mosquitto。這在實(shí)驗(yàn)室能跑通但在車(chē)間現(xiàn)場(chǎng)它會(huì)在你演示給產(chǎn)線主管看的前五分鐘崩潰。原因很簡(jiǎn)單默認(rèn)Mosquitto配置是為IoT玩具設(shè)計(jì)的不是為工業(yè)數(shù)據(jù)流準(zhǔn)備的。先看一個(gè)真實(shí)場(chǎng)景某飲料廠灌裝線有12臺(tái)PLC每臺(tái)網(wǎng)關(guān)每秒向MQTT Broker發(fā)布4個(gè)數(shù)據(jù)點(diǎn)溫度、壓力、流量、報(bào)警狀態(tài)。這意味著B(niǎo)roker每秒要處理48條消息持續(xù)24小時(shí)。Mosquitto默認(rèn)配置下內(nèi)存占用每小時(shí)增長(zhǎng)15%12小時(shí)后OOM Killer強(qiáng)制殺掉進(jìn)程。這不是負(fù)載高是配置沒(méi)調(diào)。核心參數(shù)必須重寫(xiě)/etc/mosquitto/mosquitto.conf# 必須關(guān)閉匿名訪問(wèn)默認(rèn)開(kāi)啟 allow_anonymous false # 密碼文件路徑用mosquitto_passwd生成 password_file /etc/mosquitto/passwd # 連接數(shù)限制工業(yè)現(xiàn)場(chǎng)至少支持200并發(fā) max_connections 200 # 消息隊(duì)列深度防止瞬時(shí)峰值壓垮 max_inflight_messages 100 # 持久化開(kāi)關(guān)工業(yè)數(shù)據(jù)不容丟失 persistence true persistence_location /var/lib/mosquitto/ # 日志級(jí)別調(diào)高方便排錯(cuò) log_type all # 關(guān)鍵啟用慢日志記錄超時(shí)連接 connection_messages true提示max_inflight_messages設(shè)為100不是拍腦袋。計(jì)算依據(jù)是每臺(tái)網(wǎng)關(guān)MQTT QoS1發(fā)布Broker需為每條消息維護(hù)一個(gè)等待ACK的隊(duì)列。12臺(tái)設(shè)備×4點(diǎn)×QoS148條待確認(rèn)消息留一倍余量即100。設(shè)太小會(huì)導(dǎo)致發(fā)布阻塞設(shè)太大則內(nèi)存暴漲。密碼認(rèn)證必須啟用。網(wǎng)關(guān)配置MQTT用戶名/密碼時(shí)切記密碼不能含特殊字符。Mosquitto 2.0.15版本對(duì)$、等字符解析有bug會(huì)導(dǎo)致認(rèn)證失敗。我用mosquitto_passwd -c /etc/mosquitto/passwd gateway生成密碼文件后測(cè)試發(fā)現(xiàn)網(wǎng)關(guān)始終報(bào)Connection refused最終發(fā)現(xiàn)是密碼里用了Pssw0rd!中的符號(hào)。換成Gateway2024后立即連通。另一個(gè)致命陷阱是主題權(quán)限控制。默認(rèn)配置下任何客戶端都能訂閱#全主題。這意味著產(chǎn)線工人用手機(jī)裝個(gè)MQTT Explorer連上Broker就能看到所有PLC數(shù)據(jù)——包括安全聯(lián)鎖狀態(tài)。必須配置ACLAccess Control List# /etc/mosquitto/acl # 網(wǎng)關(guān)只能發(fā)布不能訂閱 user gateway topic write plc/delta/// topic read $SYS/broker/uptime # Node.js服務(wù)可讀寫(xiě)所有plc主題 user nodejs topic readwrite plc/# topic readwrite scada/# # 其他用戶禁止訪問(wèn) user default topic deny #然后在主配置中引用acl_file /etc/mosquitto/acl。這樣網(wǎng)關(guān)只能往自己負(fù)責(zé)的PLC主題發(fā)數(shù)據(jù)Node.js能讀取所有PLC數(shù)據(jù)并往SCADA主題發(fā)指令而外部設(shè)備連$SYS系統(tǒng)主題都看不到。最后是Windows環(huán)境下的部署雷區(qū)。你搜“windows 本地 mqtt 服務(wù)端安裝”教程讓你下載Mosquitto zip包解壓后雙擊mosquitto.exe。這會(huì)導(dǎo)致兩個(gè)問(wèn)題一是窗口關(guān)閉進(jìn)程就終止二是日志輸出到控制臺(tái)無(wú)法留存。正確做法是注冊(cè)為Windows服務(wù)# 以管理員身份運(yùn)行PowerShell cd C:\mosquitto .\mosquitto.exe -c mosquitto.conf -d # 注冊(cè)服務(wù)-install參數(shù) .\mosquitto.exe -c mosquitto.conf -install # 設(shè)置開(kāi)機(jī)自啟 sc config mosquitto start auto注意-d參數(shù)必須加否則服務(wù)啟動(dòng)失敗。sc config命令中的start auto等號(hào)后有空格是Windows服務(wù)語(yǔ)法硬性要求少個(gè)空格就報(bào)錯(cuò)。4. Node.js用原生net和mqtt模塊構(gòu)建高可靠數(shù)據(jù)管道很多教程教你用Express Socket.IO做Web SCADA這在小項(xiàng)目里可行但面對(duì)工業(yè)現(xiàn)場(chǎng)它會(huì)成為性能瓶頸。Socket.IO的長(zhǎng)連接心跳、JSON序列化開(kāi)銷(xiāo)、瀏覽器兼容性處理都會(huì)吃掉大量資源。真正的工業(yè)級(jí)方案是用Node.js原生模塊構(gòu)建輕量級(jí)數(shù)據(jù)管道net.Socket直連PLC做冗余探測(cè)mqtt.Client專(zhuān)注消息路由http.Server只做靜態(tài)文件服務(wù)。先看PLC連接健康檢查。不能依賴(lài)MQTT的will遺囑消息——它只在TCP斷開(kāi)時(shí)觸發(fā)而PLC可能還活著只是Modbus響應(yīng)超時(shí)。我的方案是Node.js用net.Socket每10秒向PLC發(fā)一個(gè)Modbus功能碼03讀取單個(gè)寄存器如地址40000通常為PLC運(yùn)行狀態(tài)字超時(shí)時(shí)間設(shè)為800ms。代碼核心邏輯const net require(net); function checkPLC(ip, port) { return new Promise((resolve) { const socket net.createConnection({ host: ip, port }, () { // 連接成功發(fā)送Modbus請(qǐng)求 const modbusReq Buffer.from([0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01]); socket.write(modbusReq); socket.setTimeout(800); }); socket.on(data, (data) { // 收到有效響應(yīng)長(zhǎng)度9字節(jié)功能碼03 if (data.length 9 data[7] 0x03) resolve(true); else resolve(false); socket.destroy(); }); socket.on(timeout, () { resolve(false); socket.destroy(); }); socket.on(error, () { resolve(false); socket.destroy(); }); }); }這個(gè)函數(shù)返回Promise Node.js主循環(huán)每10秒調(diào)用一次結(jié)果存入Redis緩存keyplc:delta:line1:statusttl30秒。Web前端用Ajax輪詢(xún)這個(gè)key比WebSocket更輕量且避免了瀏覽器兼容問(wèn)題。MQTT部分絕不用mqtt.connect(mqtt://localhost)這種簡(jiǎn)寫(xiě)。必須顯式配置const mqtt require(mqtt); const client mqtt.connect(mqtt://localhost, { clientId: nodejs-scada- Date.now(), username: nodejs, password: your_strong_password, reconnectPeriod: 1000, // 首次重連間隔1秒 connectTimeout: 3000, // 連接超時(shí)3秒 clean: true, // 斷線后清空會(huì)話 will: { topic: scada/status, payload: Buffer.from(offline), qos: 1, retain: true } });注意clean: true是關(guān)鍵。工業(yè)現(xiàn)場(chǎng)PLC數(shù)據(jù)流是持續(xù)的如果設(shè)為falseBroker會(huì)為每個(gè)QoS1消息保存離線消息內(nèi)存會(huì)指數(shù)級(jí)增長(zhǎng)。will遺囑消息設(shè)為retain確??蛻舳松暇€時(shí)能立刻獲取最新?tīng)顟B(tài)。數(shù)據(jù)處理管道采用“發(fā)布-訂閱”模式。網(wǎng)關(guān)發(fā)布的plc/delta/line1/oven/temp消息被Node.js訂閱后不做任何加工直接轉(zhuǎn)發(fā)到scada/line1/oven/temp同時(shí)存入InfluxDB時(shí)序數(shù)據(jù)庫(kù)。但報(bào)警邏輯必須在此處注入client.on(message, (topic, message) { if (topic.startsWith(plc/delta/)) { const payload JSON.parse(message.toString()); // 溫度超限報(bào)警120℃且持續(xù)3秒 if (payload.value 120 !alarmCache.has(topic)) { alarmCache.set(topic, Date.now()); return; } if (payload.value 120 alarmCache.has(topic)) { alarmCache.delete(topic); // 發(fā)送解除報(bào)警消息 client.publish(scada/alarm/${topic.split(/)[2]}/clear, JSON.stringify({ time: new Date() }), { qos: 1 }); return; } if (alarmCache.has(topic) Date.now() - alarmCache.get(topic) 3000) { // 觸發(fā)報(bào)警 client.publish(scada/alarm/${topic.split(/)[2]}/active, JSON.stringify({ device: topic.split(/)[2], value: payload.value, time: new Date() }), { qos: 1, retain: true }); alarmCache.delete(topic); } } });這段代碼實(shí)現(xiàn)了“延時(shí)報(bào)警”溫度超過(guò)閾值后不是立刻報(bào)警而是等待3秒確認(rèn)非瞬時(shí)干擾。alarmCache用Map對(duì)象實(shí)現(xiàn)內(nèi)存占用可控。所有報(bào)警消息設(shè)為retain確保新連接的Web頁(yè)面能立刻獲取最新報(bào)警狀態(tài)。5. Web SCADA前端用純HTMLCSSJavaScript實(shí)現(xiàn)零依賴(lài)可視化你搜“react 框架 node.js”得到的是Webpack打包、JSX語(yǔ)法、狀態(tài)管理。但在工業(yè)現(xiàn)場(chǎng)這些全是累贅。真正的Web SCADA前端應(yīng)該滿足三個(gè)條件能在IE11上運(yùn)行老車(chē)間電腦只有IE、離線可訪問(wèn)車(chē)間網(wǎng)絡(luò)不穩(wěn)定、單HTML文件部署運(yùn)維人員雙擊就能用。我的方案是一個(gè)index.html文件內(nèi)聯(lián)CSS和JavaScript所有圖表用Chart.jsCDN引入數(shù)據(jù)通過(guò)Ajax輪詢(xún)Node.js提供的REST API。Node.js后端只暴露兩個(gè)APIGET /api/plc-status返回所有PLC在線狀態(tài)從Redis讀取GET /api/data?topicplc/delta/line1/oven/tempcount100返回指定主題最近100條數(shù)據(jù)從InfluxDB查前端HTML結(jié)構(gòu)極簡(jiǎn)!DOCTYPE html html head title灌裝線SCADA/title script srchttps://cdn.jsdelivr.net/npm/chart.js/script style .status-indicator { width: 20px; height: 20px; border-radius: 50%; display: inline-block; margin-right: 5px; } .online { background-color: #4CAF50; } .offline { background-color: #f44336; } /style /head body h1灌裝線實(shí)時(shí)監(jiān)控/h1 div idstatusPLC狀態(tài)span idplc1 classstatus-indicator online/span線1 | span idplc2 classstatus-indicator offline/span線2/div canvas idtempChart width800 height400/canvas script // 初始化圖表 const ctx document.getElementById(tempChart).getContext(2d); const chart new Chart(ctx, { type: line, data: { labels: [], datasets: [{ data: [] }] }, options: { responsive: false } }); // 輪詢(xún)PLC狀態(tài) async function updateStatus() { const res await fetch(/api/plc-status); const status await res.json(); document.getElementById(plc1).className status.line1 ? status-indicator online : status-indicator offline; document.getElementById(plc2).className status.line2 ? status-indicator online : status-indicator offline; } // 輪詢(xún)溫度數(shù)據(jù) async function updateChart() { const res await fetch(/api/data?topicplc/delta/line1/oven/tempcount100); const data await res.json(); chart.data.labels data.map(d new Date(d.time).toLocaleTimeString()); chart.data.datasets[0].data data.map(d d.value); chart.update(); } setInterval(updateStatus, 5000); setInterval(updateChart, 3000); /script /body /html這個(gè)文件雙擊就能在瀏覽器打開(kāi)無(wú)需Node.js服務(wù)。但為了實(shí)時(shí)性我們?nèi)杂肗ode.js提供API。關(guān)鍵優(yōu)化點(diǎn)Ajax輪詢(xún)間隔不是固定值。初始設(shè)為3秒但如果連續(xù)3次請(qǐng)求超時(shí)網(wǎng)絡(luò)抖動(dòng)自動(dòng)降為10秒恢復(fù)后逐步回到3秒。避免網(wǎng)絡(luò)波動(dòng)時(shí)瘋狂刷請(qǐng)求。Chart.js禁用動(dòng)畫(huà)options.animation false。工業(yè)監(jiān)控要的是即時(shí)響應(yīng)不是視覺(jué)效果。狀態(tài)指示器用CSS實(shí)現(xiàn)不用SVG或圖片減少HTTP請(qǐng)求數(shù)。.online和.offline類(lèi)名直接對(duì)應(yīng)Redis里的布爾值。報(bào)警信息展示用最樸素的DOM操作// 接收?qǐng)?bào)警消息通過(guò)MQTT WebSocket const mqttClient mqtt.connect(ws://localhost:9001); mqttClient.on(connect, () { mqttClient.subscribe(scada/alarm/#); }); mqttClient.on(message, (topic, message) { const alarm JSON.parse(message.toString()); const div document.createElement(div); div.innerHTML [${new Date().toLocaleTimeString()}] ${alarm.device} 溫度超限${alarm.value}℃; div.style.color red; document.getElementById(alarmLog).prepend(div); // 最多顯示10條 if (document.getElementById(alarmLog).children.length 10) { document.getElementById(alarmLog).lastChild.remove(); } });這里用MQTT over WebSocketMosquitto需啟用listener 9001并配置protocol websockets比輪詢(xún)更高效。但注意WebSocket連接必須帶心跳否則車(chē)間防火墻會(huì)切斷空閑連接。我在mqtt.connect里加了keepalive: 3030秒心跳。最后是部署細(xì)節(jié)index.html放在Node.js的public目錄下app.use(express.static(public))即可。不需要Webpack不需要Babel不需要任何構(gòu)建步驟。運(yùn)維人員拿到文件扔進(jìn)服務(wù)器目錄重啟Node.js進(jìn)程一切就緒。6. 實(shí)戰(zhàn)排錯(cuò)從Wireshark抓包到日志交叉分析的完整鏈路再完美的方案也會(huì)在真實(shí)車(chē)間里趴窩。我整理了過(guò)去半年遇到的7類(lèi)高頻故障給出從現(xiàn)象到根因的完整排查鏈路。這不是羅列錯(cuò)誤代碼而是還原一個(gè)資深工程師如何用工具鏈定位問(wèn)題。6.1 現(xiàn)象Web頁(yè)面溫度值一直顯示0但MQTT Explorer能看到網(wǎng)關(guān)發(fā)布的正確數(shù)據(jù)排查鏈路在Node.js服務(wù)端加日志client.on(message, (t,m)console.log(RECV:,t,m.toString()))發(fā)現(xiàn)日志里有RECV: plc/delta/line1/oven/temp {value:85.2}說(shuō)明MQTT接收正常檢查/api/data接口curl http://localhost:3000/api/data?topicplc/delta/line1/oven/tempcount1返回空數(shù)組進(jìn)入InfluxDB命令行influx -database scada -execute SELECT * FROM plc_data WHERE topicplc/delta/line1/oven/temp LIMIT 5結(jié)果為空——問(wèn)題出在Node.js寫(xiě)入InfluxDB的邏輯查代碼發(fā)現(xiàn)寫(xiě)入時(shí)用了topic字段但I(xiàn)nfluxDB的measurement名是plc_datatag key是device而代碼里誤把topic當(dāng)成了tag value修復(fù)point.tag(device, topic.split(/)[2])替換point.tag(topic, topic)教訓(xùn)InfluxDB的tag和field必須嚴(yán)格區(qū)分。tag用于索引查詢(xún)快field用于存儲(chǔ)值不索引。把topic當(dāng)tag存導(dǎo)致查詢(xún)時(shí)無(wú)法匹配。6.2 現(xiàn)象網(wǎng)關(guān)偶爾斷連MQTT Broker日志顯示Connection refused排查鏈路查Mosquitto日志tail -f /var/log/mosquitto/mosquitto.log發(fā)現(xiàn)New connection from 192.168.1.100 on port 1883.后緊跟Client gateway-01 disconnected due to KEEPALIVE timeout檢查網(wǎng)關(guān)MQTT配置Keep Alive設(shè)為60秒用Wireshark抓網(wǎng)關(guān)與Broker之間的包過(guò)濾tcp.port1883發(fā)現(xiàn)網(wǎng)關(guān)發(fā)出的MQTT CONNECT包里Keep Alive字段確實(shí)是60但Broker返回的CONNACK包里Keep Alive是0原因Mosquitto配置里max_keepalive設(shè)為30Broker強(qiáng)制將客戶端Keep Alive截?cái)酁?0秒修復(fù)max_keepalive 120并重啟Broker注意Wireshark里看MQTT包要安裝MQTT解碼插件默認(rèn)不識(shí)別1883端口。右鍵包→Decode As→MQTT才能看到CONNECT/CONNACK詳情。6.3 現(xiàn)象Node.js進(jìn)程CPU占用率100%top顯示node進(jìn)程占滿一個(gè)核排查鏈路kill -SIGUSR1 pid觸發(fā)Node.js生成heapdump用Chrome DevTools打開(kāi)chrome://inspect→ Connect to target → Profiles → Load heapdump發(fā)現(xiàn)Map對(duì)象占內(nèi)存92%對(duì)象數(shù)2.1萬(wàn)定位代碼報(bào)警緩存alarmCache new Map()未清理過(guò)期項(xiàng)修復(fù)改為const alarmCache new Map(); setInterval((){ ... }, 5000)每5秒遍歷刪除超時(shí)項(xiàng)技巧kill -SIGUSR1是Node.js內(nèi)置信號(hào)無(wú)需額外模塊。heapdump文件用DevTools分析比node --inspect遠(yuǎn)程調(diào)試更直觀。6.4 現(xiàn)象IE11瀏覽器打不開(kāi)頁(yè)面報(bào)錯(cuò)Object doesnt support property or method fetch排查鏈路檢查index.html里fetch調(diào)用——IE11確實(shí)不支持不引入polyfill增加體積改用XMLHttpRequest封裝兼容函數(shù)function ajax(url) { return new Promise((resolve, reject) { const xhr new XMLHttpRequest(); xhr.open(GET, url); xhr.onload () resolve(JSON.parse(xhr.responseText)); xhr.onerror reject; xhr.send(); }); }替換所有fetch()調(diào)用經(jīng)驗(yàn)工業(yè)現(xiàn)場(chǎng)瀏覽器版本不可控兼容性必須前置考慮。不要等用戶報(bào)告才處理。6.5 現(xiàn)象PLC狀態(tài)指示燈忽明忽暗但實(shí)際PLC一直在線排查鏈路查Node.js健康檢查日志PLC line1 check: false頻繁出現(xiàn)用telnet 192.168.1.10 502測(cè)試PLC Modbus端口通Wireshark抓包發(fā)現(xiàn)Node.js發(fā)的Modbus請(qǐng)求PLC響應(yīng)包里功能碼是03但字節(jié)數(shù)只有8應(yīng)為12原因PLC固件Bug對(duì)某些地址返回截?cái)囗憫?yīng)修復(fù)健康檢查改用讀取PLC型號(hào)寄存器地址40000該地址響應(yīng)穩(wěn)定教訓(xùn)工業(yè)設(shè)備固件版本差異巨大。臺(tái)達(dá)ES3不同固件版本對(duì)相同Modbus請(qǐng)求的響應(yīng)格式可能不同。必須針對(duì)具體固件版本驗(yàn)證。6.6 現(xiàn)象MQTT Explorer能連Broker但Node.js客戶端連不上報(bào)Error: Connection refused排查鏈路netstat -tuln | grep 1883確認(rèn)Mosquitto監(jiān)聽(tīng)0.0.0.0:1883iptables -L發(fā)現(xiàn)INPUT鏈DROP了1883端口修復(fù)iptables -I INPUT -p tcp --dport 1883 -j ACCEPT保存iptables-save /etc/iptables/rules.v4注意Ubuntu 20.04默認(rèn)用ufwufw allow 1883即可。但CentOS 7用firewalld需firewall-cmd --permanent --add-port1883/tcp。6.7 現(xiàn)象Web頁(yè)面圖表數(shù)據(jù)延遲10秒以上排查鏈路瀏覽器開(kāi)發(fā)者工具Network標(biāo)簽看/api/data請(qǐng)求耗時(shí)發(fā)現(xiàn)平均耗時(shí)8.2秒curl -w curl-format.txt http://localhost:3000/api/data?topicplc/delta/line1/oven/tempcount100顯示DNS解析占3秒原因Node.js代碼里用influxdb-node庫(kù)其默認(rèn)DNS緩存策略不佳修復(fù)改用influxdb-client-js并配置retryDelay: 100技巧curl-format.txt內(nèi)容time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_total: %{time_total}\n可精準(zhǔn)定位各階段耗時(shí)。這些排錯(cuò)過(guò)程沒(méi)有一步是靠猜。每一步都依賴(lài)工具鏈的交叉驗(yàn)證日志看現(xiàn)象Wireshark看網(wǎng)絡(luò)層InfluxDB CLI看數(shù)據(jù)層Chrome DevTools看應(yīng)用層。工業(yè)系統(tǒng)的問(wèn)題從來(lái)不在單一層級(jí)而在于層級(jí)間的縫隙。填平這些縫隙才是落地的關(guān)鍵。7. 從入門(mén)到交付一個(gè)可立即復(fù)用的最小可行系統(tǒng)MVP現(xiàn)在把前面所有環(huán)節(jié)串起來(lái)給你一個(gè)開(kāi)箱即用的最小可行系統(tǒng)MVP。它不追求功能完備只保證從PLC到Web頁(yè)面的數(shù)據(jù)流100%貫通。你可以用它作為起點(diǎn)再根據(jù)產(chǎn)線需求擴(kuò)展。7.1 硬件清單總成本800元設(shè)備型號(hào)說(shuō)明成本PLC臺(tái)達(dá)DVP-ES3入門(mén)級(jí)支持Modbus TCP320工業(yè)智能網(wǎng)關(guān)匯川HG200支持Modbus TCP轉(zhuǎn)MQTT280服務(wù)器樹(shù)莓派4B 4GB運(yùn)行MosquittoNode.js200注意樹(shù)莓派用官方Raspberry Pi OS64位非Lite版自帶桌面環(huán)境便于調(diào)試。7.2 軟件安裝清單一行命令搞定# 樹(shù)莓派上執(zhí)行 sudo apt update sudo apt upgrade -y # 安裝Mosquitto sudo apt install mosquitto mosquitto-clients -y # 安裝Node.js 18.x LTS curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # 安裝InfluxDB 2.x curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - echo deb https://repos.influxdata.com/debian buster stable | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt-get update sudo apt-get install influxdb2 -y7.3 配置文件模板復(fù)制即用Mosquitto配置/etc/mosquitto/mosquitto.conflistener 1883 allow_anonymous false password_file /etc/mosquitto/passwd acl_file /etc/mosquitto/acl max_connections 100 max_inflight_messages 100 persistence true persistence_location /var/lib/mosquitto/ log_type all connection_messages true生成密碼sudo mosquitto_passwd -c /etc/mosquitto/passwd gateway sudo mosquitto_passwd -b /etc/mosquitto/passwd nodejs your_strong_passwordACL文件/etc/mosquitto/acluser gateway topic write plc/delta/// topic read $SYS/broker/uptime user nodejs topic readwrite plc/# topic readwrite scada/# user default topic deny #Node.js項(xiàng)目結(jié)構(gòu)scada/ ├── package.json ├── server.js # 主服務(wù) ├── public/ │ └── index.html # 前端頁(yè)面 └── config/ └── influxdb.js # InfluxDB配置package.json依賴(lài){ dependencies: { express: ^4.18.2, mqtt: ^4.2.8, influxdb-client-js: ^1.30.0 } }7.4 啟動(dòng)順序嚴(yán)格按此執(zhí)行啟動(dòng)Mosquittosudo systemctl restart mosquitto啟動(dòng)InfluxDBsudo systemctl restart influxdb初始化InfluxDB首次influx setup --username admin --password yourpass --org myorg --bucket scada --retention 30d --force啟動(dòng)Node.js服務(wù)cd scada npm start配置網(wǎng)關(guān)瀏覽器打開(kāi)http://192.168.1.100網(wǎng)關(guān)IP按第2節(jié)配置Modbus TCP和MQTT驗(yàn)證mosquitto_sub -h localhost -t plc/# -u nodejs -P yourpass應(yīng)看到網(wǎng)關(guān)發(fā)布的消息7.5 首次上線檢查清單[ ]curl http://localhost:3000/api/plc-status返回JSON[ ]mosquitto_sub -h localhost -t scada/line1/oven/temp -u nodejs -P yourpass能收到數(shù)據(jù)[ ] 瀏覽器打開(kāi)http://樹(shù)莓派IP:3000看到實(shí)時(shí)溫度曲線[ ] 拔掉PLC網(wǎng)線狀態(tài)指示燈30秒內(nèi)變紅[ ] 恢復(fù)PLC網(wǎng)線狀態(tài)指示燈30秒內(nèi)變綠這個(gè)MVP系統(tǒng)我已在三家中小制造企業(yè)落地。它不解決所有問(wèn)題但解決了最痛的“數(shù)據(jù)看不見(jiàn)”問(wèn)題。后續(xù)擴(kuò)展方向很清晰加報(bào)警推送微信/短信、
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丝袜剧情| 一本大道综合伊人精品热热| 91人妻人人澡人人爽人人精品| 日韩啪啪啪啪啪| 无遮挡男女激烈动态图| 极品销魂美女一区二区| 爱丝福利| 天天操天天日天天干| 国产欧美日韩女同性恋ww喷水精品 | 大鸡巴久久| 操逼精品视频| 伊人久久大香蕉线AV五月天| 小少妇| 91久久久久久久久18| 国产又大又粗又长视频在线| 午夜精品久久久99热蜜桃的功能特点| 国产少妇与亚洲av| 久久大香蕉手机高清视频| 成人5码视频| 日韩性爱视频在线免费观看| 天堂亚洲精品| 人妻熟女av国产网站| 极品尤物自安慰| 刺激性视频黄页| 青青青在线高清视频在线一二三四区| 国产这里只有精品| V A在线| 一品道视频一区二区三区| 欧美春色| 亚洲av总站| 色哟哟AⅤ| 夜夜夜久久| 天天射天天操天天干天天吃2018| 在线 亚洲 网爆 自拍| 四虎国产精品永久在线囯在线| 成人日本精品九区| 美女操逼福利视频| 精产品久久| 亚洲色天堂日韩中| 大黄片做爱的大的| 欧美综合色图片| 大香交伊人网| 亚洲国产av中文字幕久久| 成人片视频| 超碰成人免费| 欧美黄色大片在线观看| 97在线视频免费看| 成人精品视频一区二区| 一级啊性爱在线视频| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 天天综合网91入口| 美国日韩黄色片| 大香蕉中文201| 亚州成人a∨| 久久久久亚洲?V片无码V| 成人九九| 久久久久国产| 人人澡综合涩| 日韩性爱播放| 蜜乳AV一区| 干少妇视频| 欧洲小说色图视频另类| 精品精品精品| 屁屁影院一区二区三区国产| 13小男生GAY自慰脱裤子| 免费超碰97久久| 老鸭窝亚洲毛片| 综合欧美激情网| 好涩综合| 国产路线专区| 91五十路| 97在线视频观看免费| 欧美 传媒 麻豆 日韩 偷拍| 欧美亚洲20p| 色狠狠色| 精品国产乱码久久久久久口爆网站| 99久久久| 日韩猛交| 欧美夜夜草视频| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 少妇高潮流水av免费| 91日产桃蜜| 人妻黑丝袜电影| 9热9热综合网| 97久精品| 一二三区在线| 欧美久热| 大胆91| 黄网色一区二区三区四区精品| 操逼无码操逼| 97超碰色| 欧美一区二区男人天堂| 2021国产成人精品久久| 男人久久天堂| 五十路三区在线| julia ann久久| 超碰69| 97资源欧美| 冬京热男人的天堂| 四虎AV无码| 亚洲另类综合欧美| 日本在线不卡123| 色狠狠综合| 91人妻中文| 欧美日韩免费性爱| 为用户提供免费看黄网址在线观看| 欧美精品精品一区二区| 久久久一区二区三区三州| 亚洲啪啪视频免费| 午夜无遮挡男女啪啪视频| 中文字幕一区二区免费在线| 免费av在线播放二区| 久久日韩精品一区二区| 国模私拍一区二区三区神乳| 久久毛卡| 曰韩av中文字幕专区| 欧亚免费视频| 99无码| 夜夜肏2021| 殴美牲| 在线 亚洲 网爆 自拍| 亚洲最大黄网| 一区二区视频你懂的| 99黄页网站| 天美一区在线| 欧美亚州综合网图片| 国内一级精品| 爱妃国产亚洲视频中文字幕| 激情无码日韩| 免费一级视频特黄色大片| 天天天天操| 中文字幕视频在线观看一区二区| 女生自91网站| 色九九久九九| 大香蕉www.超碰| 成人免费不卡在线视频| 91爱综合| 日韩成人小视频| 青青久久艹| 成人av福利在线观看| www黄片免费看com| 欧美性区| 亚洲精品91| 欧美日韩午夜精品一区二区三区| 国产成人无码高清| 亚洲精品欧美专业| 久操免费视频| 免费av在线播放二区| 日本道久久综合色色| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 在线无码操| 99色在线| 欧美 亚洲 另类 综合| 天天干1区2区在线| JIZZJIZZ亚洲女人被躁| 精品人妻伦一二三区久久| 欧美 综合| 亚洲人妻久久久| 国产乱伦视频污| 色五月激情网| 精吧天堂| 日本性交操一区二区不卡系列| 97人妻免费中文字幕| 亚洲无套久久嗯嗯| 91综合色| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 无码乱人伦中文视频| 久久久精品日本一道| 伊人少妇久久久| 农村女一级毛卡片| 亚洲色婷婷| 欧美第二页午夜| 久久精品欧美一区二区三区不卡| 麻豆久久久久久久久丝袜 | 我中文字幕6区| 久操免费在线| 婷婷五月丁香五月| 亚洲中文字幕av | 白天啪啪晚上啪啪视频| 97超碰天天爱天天爱| 久久精品国产97欧美精品亚洲 | 东京热双插| 激情五月综合网| 日韩中文9| 久久精品日韩| 超碰97亚洲区| 亚洲成人免费中文字幕| 久9久精品视频| 十八岁啪啪视频免费看| 综合激情一一91| 日韩精品在线观看观看| 国产成人精品午夜福利| 中国国产精品一区视频| 99在线观看无大码| 国产操逼视频在线观看| 日本有码影片下载| 日韩强奸av| 精品网站9999| 岛国在线免费视频| 久久精品高清无码一区| 国产亚洲色婷婷久久99精品91葵花宝典 | 再深点灬舒服灬太大了添视频 | 免費黃色視頻觀看一| 91男同| 欧美人与性动交a美精品| 神马久久69| 收看日本人日bb| 激情综合av| 欧美大香蕉同搞| 久久亚洲天堂| 日本九九九九| 亚洲久久久久| 夜夜嗷嗷一区二区| 国产精品视频精品一二| 东京热毛片调教| 在线国产探花| 一级AV性爱| 欧美少妇高潮久久91| 免费A V在线播放| 亚洲欧美日韩中文久久自慰| 五月丁香啪啪啪| 日本道不卡| 久久理论字幕视频| 91香蕉视频在线观看免费| 亚洲综合贴图91| 五月丁香社区婷婷日韩欧美精品影院 | 嗯嗯啊啊亚欧精品| 日韩一级特黄av毛片| 密臀成人视频久久久| 青青操青娱乐| 国产在线视频二区| 91精品久久久久| 久久25| 岛国黄色大片网站| 亚洲色天| 男人天堂免费| 东京热亚洲一区二区| 国产欧美在线观看免费观看| 国产精品3| 色性综合| 天天干天天操天天干天天操| 中文字幕精品免费一区二区| 91久久国产精品| 欧美熟爽综合| 亚洲四虎熟女精品| 免费观看网黄| 国产精品第一页国产大屁股视频免费区| 情色日播放AV| 日本护士高潮| 中文字幕日韩电影人妻| 久久久夜夜夜| 物业黑人 AV一区| 国模一区二区三区| 中文久久爆乳| 操逼天美3区| 精品人妻一区二区三区视频在线| 新视频sss国产| 三级三级三级日本99| 久久欲| 久久九色| 夜夜欢天天干| 日韩特一级久久| yazhousetuoumei| 久操精品网| 国产精品盗摄 偷窥盗摄| 清纯唯美第一页| 东北女人的毛片| 久久香蕉网| 中文字幕精品日韩中文字幕| A片大香蕉在线| 熟女少妇一区二区三区| 日日干男人的天堂| 97精品国产精品免费观看| 久久天堂婷婷网| 肉嘟嘟www视频在线观看高清| 亚洲天天综合| 中文久久久| 久这精品中文在线观看视频| 色97欧美| 欧美日韩亚洲少妇寂寞影院正在播放 | 久久精品国产免费观看99| 日韩中文字幕视频| 操国产逼| 欧美偷拍区| 国产日韩精品suv| 亚洲综合20p| 久久久久久久久久9| 久久久性少妇| 欧美色九九| 舔人妻中文免费视频| 99精品久久久久久| 人妻精品一区一区三区蜜桃91| 好看的久久不射无码影视影院| 久久久久久性爱视频| 97人肏| 中文高清一区二区的| 亚洲色吧网| 亚洲日韩一区电影| 1024亚洲中文字幕久在线看片你懂的| 欧美色图天堂在线| 老鸭窝亚洲毛片| 日本一区二区三区欧美日韩中文字幕| 国产精品久久久视频| 天综合中文| 国产白嫩精品久久| 麻豆福利视频导航| 欧美 日韩 婷婷 五月| 亚洲精品1区| 劲爆欧美人妖三区91| 久久久精品一区二区| 色拍偷亚洲| 国产精品电| 老熟女91视频| 性久久| 精品v日韩欧美国产| 亚洲av无线观看| 丁香婷婷大香蕉| 91 刺激在线| 97色冈| 69视频福利导航| 日本高清加勒比| 精人妻一区二区三区| 啊啊啊啊啊好多水| 收看日本人日bb| 成人午夜小视频手机在线看| 亚洲国产第一页综合视频| 欧美熟妇乱码在线一区| 人妻丝袜肏逼| 人人摸人人入| 草莓精品视频| 91国产丝袜足交精品视频| 又摸又舔在线观看网站| 美女久久久久久久久久久| AV乱伦国产| 99re公开精品免费视频| 欧美制服另类丝袜| 丝袜色综合| av激情亚洲五月天| AV免费在线播放一区| 红杏大香蕉| 成人日韩中文字幕| 天天干人妻视频| 强奸乱伦 亚洲一区| 人人操人人摸人| 蜜桃久久久久久久| 97se亚洲| 色哟哟511老熟女| www.久久爱| 男人把坤坤插入女人的下体| 1000部熟女视频在线观看| 日韩国产成人自拍视频| 这里是精品| 超碰九九| 久久久久亚洲Aⅴ无码| 看看小穴| 人妻第一页| 欧美人妻久久精品二区三区| 久久av色| 97aiaiai| 综合激情五月丁香| 色偷偷2020免费视频播放| 边做饭边操逼逼| 97在线精品| 亚洲天堂日本| 国产精品无码成人精品| 懂色综合久久久| 91欧| 天天躁日日躁AAAXX| 性色国产东北露脸精品视频| 亚洲精品自拍| 色穴精品| 日本操逼视频免费| 亚洲色图激情小说| 欧美 亚洲精品首页| 亚洲AV无码黄色强奸| 久久欧洲| 日韩精品色呦呦| 男人下部插入女人下部| 男人的天堂2019| 久久久com| 日日日日做夜夜夜夜做无码97| 中文字幕精品一区二| 麻豆黄色五月天| 先锋女优在线观看视频| 五月婷丁香| 欧美日韩一二三| 国模少妇一区二区三区| 正宗无毛一线天嫩逼| 国产成人免费观看在线视频| 高清不卡 中文 人妻| 丰满岳乱妇一区二区三区| 久草色悠悠在线视频| 一级毛片电影免费看| 加勒比在线视频| 久久免费少妇| 亚洲网自拍| 欧美日韩性爱电影在线| 伊人亚洲综合| 丁香五月激情综合国产| 91n处女在线观看| 色色操| 青草精品视频-日本久久久久网站| 欧美亚洲玖玖玖| 屁股久久久久久| 欧美三级一级| 人人贴人人摸| 久久久久久中文| 久久久com| 欧美性暴力猛交| 天天综合网国产| 黄色片大香蕉| 日韩99999| 91白虎| 亚洲97精品| 久久亚洲AV无码白度| 中文字幕一区二区三区四区在线视频| 强奸乱伦大香蕉网| 日本精品88888888| 91n欧美| 伊人网青青| 丁香激情网| 丰满搜索结果 -第18页- 久久高清无码 | 色91综合网| 中国91AV| 色婷婷丁香五月| 亚洲天堂第一页| 欧美综合色图片| wwwxxx日本爽| 久久夜夜夜夜| 亚洲最新Av| 超91综合网| 久操国产在线| 青青草中文-久久青草精品一区二区三| 黄色不卡视频| 免费黄色片。| 99啪啪| 亚洲麻豆av一区二区| 91碰碰| 八戒无码国产午夜福利| 78精品在线| 日韩AV中文字幕电影| 亚洲欧美精品久| 色综合国产在线观看| 2010男人的天堂| 久久9久久| 91大学精品激情戏| 欧美性生活男人的天堂| 熟女AV一区| 欧美日韩 强奸乱伦| 好爽免费视频,| 免费作爱一级视频| 97久操| 在线播放成人网站| 91视频精品| 欧美亚洲宗合色性图| 欧美传媒一区| 91男人天堂网| 成人黄页| 国产精品久久蜜乳av| 亚洲18禁| 日本99久久| 日韩人妻一区二区| 热热色青青草| 天天天天天天天天综合| 在线啊v一区| 91色花堂| 日日97| 另类 综合 日韩 欧美 亚洲| 亚州国产精品乱| 国产精品免费日韩| 啊啊嗯嗯好爽| 久久国产精品一区二区| 色情五月丁香| 中文字幕高清20页视频| 日本三级小说中文字幕| 91 丝袜在线观看| 破苞ⅩXXX性无码动漫无码| 男人女人18禁片免费看网站| 国产区在线| 91爱欧美| 91国产美女丝袜足交精品视频| 亚洲夜夜欢无码一区二区| 一本色道久久天天射天天干| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 最新制服中文第一页| 亚洲综合图片在线| 97内射偷拍| 日韩三级一区 | 色女网日韩| 久久久久久久久久精| 熟女少妇一区二区三区| 操逼啊啊啊91| 激情综合五月丁香| 男人天堂一区二区| 98色网| 欧美激情总合网| 91肏屄网| 久久久久人| 精品丰满熟妇人妻一区| 久久精品无码熟妇一区二区三区视频导航 | 亚洲欧洲视频小说在线观看| 宅男午夜在线视频| 成人在线视频一区| 国产成人啪一区二区| 婷婷激情丁香| 青青草日本无码| 精品久操| 加勒比久久综合网高清| 亚洲AV资源| 丝袜亚洲91| 9 1果冻精品视频| 久久精品午夜国产亚洲AV无码| 人人操人人干网页| 色综合天天| 福利风月五月天影院| 久热久操| 91亚洲人| 国产亚州精品美女久久久免费| 最新欧洲欧美日本激情网站| 亚欧美综合网。| 狠狠躁久久躁| 亚洲欧洲自拍图片专区满春格 | 超硑97精品| 九九九九九精品| 性爱动态120秒| 欧美性爽xyxOOOO| 91欧美经典| 国产操偷| 欧美亚洲高清晰| 秋霞一级鲁丝片A片| 国产无码一二三区| 99国内熟女露脸视频| 中文字幕第9页萱萱影音先锋| 超碰人人色| 天操天操夜操夜月月年年操操 | 95人妻爽爽人人做人人澡| 国产麻豆一区二三区| 先锋激情∨在线视频播放| 激情综合色| 偷拍亚洲视频一区二区三区四区| 一级特黄aaa大片在线观看成人一级片在线观看 | 成人AV素股で擦久久| 人妻少妇被猛烈进入中| 9 9精品一区二区三区| www男人天堂| 开心五月深爱五月| www欧美91| 99这里有精品视频| 天天看精品动漫视频一区| 国产11页| 一线黄色免费性爱片| 色爽——AV| 一区二区三区视频在线观看免费| 超碰是碰在线观看| 超碰99热| 精品无码秘 人妻一区二区| 国产午夜福利视频在线| 亚洲好看强奸乱伦| 午夜男女爽爽爽在线视频 | 久久精品视频在线观看| 亚洲AV乱码专区国产噜噜亚洲| 日韩精品人妻中文字幕久久久| 吖在线不卡一区二区国产剧情| 99re99视频在线免费观看| 手机在线看片免费人成视频| 亚洲成人ab| 亚洲人在线| 很很热性爱视频| 97超碰护士| 青青草无码视频| 中文字幕日韩综合| 国产女人与拘做受视频免费| 巨乳特殊服务按摩| 日韩淫色网| 色九九九综合| 国产馆极品诱惑| 欧美色视频在线| 欧洲人妻视频| 色婷婷电影网| 亚洲日韩青青草色月| 91九久| 五月婷婷激情网| 十八禁av无码免费网站APP| 97资源站日韩| 久超碰这里只有精品| 久久大陆| 午夜AV污污污| 四虎免费在线播放| 后入式999| 欧美青青视频| 久久蜜色情在线视频xxx免费观看| 99精品久久| 亚洲精品日日夜夜52| 天天色综亚洲91污| 天天舔九色婷婷| 亚洲精品蜜桃久久久| 亚洲阿v天堂无码z2018| 国产激情在线| 日本色婷婷| 丁香五月激情啪啪| www.夜夜| 中文字幕91综合| 另类亚洲图色| 亚洲s色图| 啊啊啊啊在线播放| 久久久久成人网| 久久久日本电影| 资源新线在线天堂| 欧美aa一级片| 国产激情片在线观看| 久久久网站| 欧洲无码一区二区| 九热大香蕉| 99精品在线| 91一区二匹| 欧美亚洲激情小说| 98人妻精品一区二区色欲 | 亚洲另类小说卡通动漫| 青娱乐日韩无码| 精品国产乱码久久久久久久久1 | 国语av最新自产拍在线观看| 五月婷婷综合网| 亚洲色图图片| 午夜色婷婷| 东京太热男人的天堂久久久| se吧提供91精品国产91久久久久久| 无码操逼网| 97中文超碰| 2017天天透天天通天天擦| 欧美色乱| 欧美日韩国内不卡| 久久久天美| 五月天黄色激情视频| 极品内射| 国产呦精品系列在线观看| 园内精品自拍视频在线播放| 91亚洲不卡一区| 啊啊啊骚| 综合一区中亚洲国产成人综合精品 | 肉丝中文无码高清| AV一起草在线| 白丝AV网站| 国产老太乱伦一区| 久久精品人体AV| 精品一区二区2| 久久专区| 婷婷爽人人婷婷爽视频| 亚洲欧美天堂在线| 欧美真人抽搐一进一出gif| 亚洲人成网www| 黄页av| 精品久久久av| 一级黄色性爱裸体视频| 国产后入精品| 被窝影院午夜看片无码| 久久超碰免费的| 欧美一区二区福利在线| 亚洲综合射| 国产精品极品美女视频| 欧美在线第五页| 激情五月激情综合网| 一起草视频在线| 久久伊人在线五区| 无码精品久久| 翔田千里爆乳巨臀无码| 久久久久久电影| 男人的天堂激情| 在线观看不卡一区二区三区| 国产综合久久久鬼色| 国产麻豆福利av在线播放| 久久久久成人网| 第45页一区二区| 大香蕉免费3| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 天天看综合网| 午夜福利精品| 性色AV网站| 女上位精品在线| 另类综合另类| 日韩乱伦AⅤ| 久久天堂婷婷网| 睡产熟女乱伦| 中文字幕精品免费一区二区| 蜜桃午夜视频一区二区 | 亚洲激情网一二三四区| 亚洲乱色熟女一区| 九九九国产精品| 亚洲欧美性生活| 五月婷婷激情综合| 操逼网站地址| 综合国产影视三级| 好属操| 人妻第一页| 99视频自拍区| 日本幼女18+| 久久久久久久久国产| 睡产熟女乱伦| 91国产丝袜足交精品视频| 在线精品福利免费播放| 亚洲97精品| 久久久久久久唑| 久久内射| 国产综合日韩伦理| 人妻一区二区三区视频| 国产精品一区二区亚洲人成毛片| 亚洲精品性爱片| 一类无码操逼视频| 精品性爱无码在线播放| 人妻少妇一区二区| 免费农村成人少妇人妻Aa一区二区视频 | AV99热18这里只有精品| 东北操逼| 国产欧美另类久久久精品课程| 亚洲丝袜综合| 免费家庭乱伦视频| 日韩乱伦影音先锋| 五月激情综合网| ,国产乱人伦精品一区二区三区| 国产精品网站www| 久久亚洲天堂| 96精品久久久久久久久| 香蕉黄色一级视频| 欧美中出1| 欧美老熟另类| 97操综合| 日本在线观看网址| ?亚洲伊人伊成久久人综合网| 亚洲天堂区| 91成人国产综合久久精品蜜月| 色偷偷人人玩人人舔人人操人人摸人人爽 | 亚洲夜夜欢无码一区二区| 久久婷婷国产一区二区色| 欧美 熟女 日韩| 精品人妻一区二区三区视频在线| 精品无码欧美三级| 日韩不卡a级视频专区| 爆乳免费黄网站| 国产中文字幕在线观看| 亚欧无码线免费观看视频| 新婚人妻扶着粗大强行坐下| 97超碰碰碰| 伊人四虎综合| 日韩有码 一区二区三区| 黄网色一区二区三区四区精品| 超碰亚洲97| 人妻人久久精品中文字幕| 色哟哟AⅤ| 婷婷综合五月天| 91高潮喷水美女| 碰碰97| 亚洲欧美中文日韩视频中国语| 成人日本精品九区| 一区二区三区高清| 大香蕉免费乱伦视频| 97色色色综合网站| 天天爽天天操啊啊啊| A 天堂在线观看视频| 亚洲精品欧洲精品| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 久久一本大香蕉| 操啊国产| 91大神电影天堂| 国产农村妇女毛片精品久久| 人妻 中文 日韩| 精品国产99| 尤物av网站免费在线播放| 日本天天色| 精品大全99999| 日韩精品免费高清视频在线| 色诱avtt| 欧美在线永久天堂| 人妻在线中出视频| 国产强奸乱伦第1页| 3571色综合一区二区二区| 伊人久大| 高清国产av无码| 久久久精| 久久精品性| 91模特在线观看| 亚洲精品人妻吞精av| 欧美色图91p| 国产精品制服丝袜清纯唯美| 久久久禁| 91c色| 囯产精品强| 女人喷水视频在线观看| 9999久久久久| 欧美一区二区观看在线| 亚洲AV在线资源| 精品性爱一区二区| 蜜臀99久久精品久久久久久| 国产精品久久久三级无码| 青草伊人久久| 97精品综合久久| 啪啪自拍九九综合| 精品四五区| 成 人 A V免费视频在线观看| 欧美色图片91| 三级特黄60分钟播放| 色www精品视频在线观看| 免费看A片毛毛片在线播| 久久久精品视频欧州站| 91在线无码精品秘 软件| 久久亚洲一区女同性恋中文字幕 | 国产精品亚洲无码| 秋霞福利网| 欧美很很操视频| 啊啊啊好大好深| 国产不卡片| 中文字幕精品一区欧美| 色在线69堂| 五月丁香啪啪啪| 国产成人在线观看网址| 欧亚第一综合网| 三级网色| 久久αⅴ| 91成人国产综合久久精品蜜月| 青青伊人这里只有精品| 亚洲在线综合| 亚殴在线| 日韩国产成人自拍视频| 91色欧美| 操人妻逼91| 中文字幕免费看大片| 九九亚洲| 欧美青青视频| 开心五月深爱五月| 成人无码在线超碰网| 99在线精品观看视频中文| 尻女朋友一夜| 久久久久久精品免费看A级| 五十路三区在线| 亚洲成人妻日韩在线| 97人人干| 久久久久久久久久久免费精品| 少好三P| 国产精品久久久视频| 大香网站| 69视频入口| 久热精品在线| 国产精品suv一区| 国产精品一二三区福利| 久久人人爽爽人人爽人人片αV| 亚洲黄色电影| www被窝色com| 国产不卡片| 性爱av在线免费观看| 成人av在线播放| 中文字幕在线免费观看 | 四虎在线播放| 97午夜剧场日韩| 女人高潮大叫一级毛片| 操逼逼一区视频| 91综合熟女| 亚洲女人毛茸茸91| 少妇500双飞99| 综合影院亚洲| 国产日韩欧美三级片| 午夜操逼不卡| 蜜臀久久99精品久久久电影| 亚洲久久天堂| 欧美精品久久| 亚洲 图片 欧美 色图| 爽爽淫人网| 91狼人| 国产精品黄色三级av| 国产在线综合网| 久久久久久久| 玖玖无码超碰| 天天情欲宗合网| 亚洲精品国产av天美传媒| 国产精品天美传媒| 亚洲激情综合| 我爱大香蕉| 日本操逼视频导航| 国产91av在线播放| 女性喷水高潮在线观看| 欧成人精品H无码| 91国产丝袜白虎| 亚欧美色图| 日本熟妇自慰性高潮一区二区三区| 欧美色图下一页| A啊啊在线观看| 蜜臀99999| 97精品97| 啊啊啊不要好爽日韩无码一区| 欧美亚综合色图| 97干在线看| 日本人妻一区二区| 人妻精品4K4K4K4K4| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 美欧色综合| 久久久91| 91处女在线观看| 极品销魂美女一区二区 | 九热久| 9丨久久九九九| 国产99热| 成 人 A V免费视频在线观看| 亚洲一级黄色毛片| 国产成人 综合亚洲 天堂| 欧美激情性久久久久久| AAAAAAAAA黄片| 亚洲精品亚洲人成在线麻豆| 欧美网站免费| 久久精彩免费视频| 大香蕉操久久| 密臀在线免费观看| 精品人妻一区二区三区夜夜| 男人的天堂久久狠| 久久久免费高清中文视频| 九九九九精品视频| 亚洲色天| 岛国大片国产| 99久久网站| 久久久精品国产亚洲伊人| 骚乳在线| 久久精品99久久久久久| 999国产精品999久久久久久| 熟女人妻一区二区三区免费看| 国产无码久久高清| 在线观看亚洲专区| 超碰av在线| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日日狠狠久久偷偷色综合免费| 天天看少妇| 一区二区视频你懂的| 青青操日韩| 大象AV在线| 操操逼操操逼操操逼逼| 99热日本| yazhousetuoumei| 9997se| 国产精品片| 黄片免费久久久久久久| 丁香激情五月天| 久久鲁夜| 九九热三级片| 一级毛片久久久久久久女人18| 免费综合亚洲中文| 美女久久久久久久| 一区超碰一区| yaouchengrenav| 新版天堂中文资源8在线| 少妇被玩视频二三区| 98福利在线视频| 国产品精品自在在线午夜免费| 激情网色| 情色日播放AV| 国产丁香精品露脸视频| 久草精品国产99| 日韩午夜啪啪视频| 久久超碰98| 亚洲人妻久久| 亚洲高清无码AAA久久久精品| julia在线观看久久| 尤物视频新赏网鲜网色诱网| 青青操网| 红杏大香蕉| 男人的天堂无码| 我要去看2个日本美女.com曹逼| 国产农村一一级特黄毛片| 日韩午夜国产| 成人久久久| 久久久97| 精吧天堂| 岛国黄| 欲色影视综合吧| 97亚洲在线| 337p大胆噜噜噜噜噜91Av| 综合97亚洲| 欧美亚洲国产91在线| 男人的天堂2010| 久久人妻一区二区三区高清 | 大香蕉视频啪啪啪啪| 家庭乱伦性爱av| 91伊人大香蕉| 乱性AV| 久久精品人体| 国产馆| 综合色图区| 国产超碰欧美| 人人摸人人摸人人干| 狠狠亚洲| 都市久久精品激情亚洲| 日本三级人妻a人妻一在线| 大香蕉99999| 婷婷五月天丁香花| 日韩欧美麻豆| 97啪啪| 人妻熟女一区二区三区视频| 日本精品高清一二区一本到| 久久一区二区加油站| 在线一道啪| 99re6国产精品99re| 福利视频一区二区微拍| 欧美午夜视频| 婷婷午夜成人色中色| 欧美亚洲高清不卡| 亚欧无码在线| 久久久草草精品| 亚洲aV性爱| 欧美色九九| 人妻嗯啊啊在线播放| 天天久久| 国产人伦精品一区二区三区| 99久久久无码国产精品性啊聊| 人妻日日夜夜精品| 人妻偷拍一区二区三区| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 热久久九九热| 亚洲第一精品在线视频| 欧美论理片| 日韩av一级黄片| 欧美高清91| 久超碰在| 岛国1区2区3区在线观看| 久久精品老司| 一级aaaaa欧美中文字幕录像片| 超碰这里有精品| 久久五月视频| 97干色| 色大师网站www永久网站视频| 国产免a费看黄片在线| 插B在线观看| AV中文在线| 日产操逼| 欧美情色贴图| 日韩性爱高清免费视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲字幕一区二区| 久久久成人免费av电影| av中文在线| 欧美欧美啪啪视频| 日本顶级天天操狠狠操夜夜操中文字幕| 黑人无码一区二区| 偷拍 亚洲 欧美| 欧洲亚洲人妻无码中字久久三区四区 | 精品国产乱码久久久久久久| 男人兔费天堂| 熟女这里只有精品6| 麻豆色99999| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 日本淫穴在线| 激情色色| A一区片| 久久久极品| 欧美 传媒 麻豆 日韩 偷拍| 肉嘟嘟www视频在线观看高清| 亚洲风情在线观看| 夜草欧美| 综合色图亚洲欧美| 啪啪AV导航| 欧美色视| 国产第二页| 超91综合网| 无码人妻丰满热妇又大又粗| 亚洲黑人在线| 青青草华人在线欧美在线| 久久9 9 9精品| 热99这里只有精品| 一级性爱视频免费在线| 国产黑白丝在线| 国产精品欧美激在线| 亚洲婷婷五月天| 久久久国产亚洲精品系列| 97chaopengongkai| 久久超碰av在线| 亚洲AO在线| 婷婷导航| 中文字幕成人理论在线| 日本成人免费一区二区三区| 青青草在线视频播放器| 亚洲Av噜噜一区二区三区妖精| 亚洲欧美大| 国产精品久久伊人| 免费观看国产小粉嫩喷水精品午| 91色花堂| 中文字幕第二页| 18禁久极品美女久久哦哟呀!| 一牛影视久久久一区二区三区| 欧美黄片视频在线观看免费| 日本性爰一道本| 在线视频亚洲无码| 天啪| 欧美一级二级三级| 夜夜国自区| 99热大香蕉伊在线| 麻豆伊人网| 丝袜综合| 亚洲男人天堂2012| 天堂九九九九九九九九九| 无遮挡h肉动漫在线观看| 国产极品99热在线播放69| 性饥渴少妇av无码毛片| 欧美天天弄| 久久久久久九| 中国熟妇| 大香蕉日韩| 久久久精选| 色噜噜日韩精品| 96精品久久久| 中文子幕一二三| 91国精产品| 四虎在线免费视频| 国产久久男人天堂| 久啪| 一二三四视频在线社区中文字幕| 亚洲www91| 色欲色香天天天综合网www-亚洲综合国| 97内射偷拍| 亚洲成人精品久久久| www.高清无码诱惑一区.com| 色婷婷蜜臀av| 久久国产对白激情浪潮| 夜草欧美| 成人久久久精品| 色一区二区三区综合| 熟女久久| 99久草| 精品国产乱码久久| 玖玖爱在线视频免费观看| www.色吧5.com| 影视综合无码少妇| 欧美一级久久久久久久大片动画| 91在线视频观看国产| 日本操逼二区| 国产 丝袜 欧美中文 另类| 中文字幕日本久久| 可以免费观看的AV| 好吊色在线观看| 激情文学欧美| 制服中出中文人人精品| 青青草在线视频美女| 巨乳特殊服务按摩| 国产呦精品系列在线观看| 欧美高清无码免费视频高清版| 粉嫩av久久一区二区三区| 啪啪AV导航| 欧美性爱另类综合| 啊啊啊啊啊啊啊国| 亚洲综合影片| 精品无码产区一区二| 97鸡把在线视频| 狠狠久久手机视频精品| 九九干| 日本狠狠干| 91网亚洲| 天天日熟妇| 999综合网| 中国一级操逼视频| 中日高清无码操逼视频| 欧美日韩国产中文精品字幕自在自线,| 亚洲AV高潮| 骚鸭AV| av一区二区三区不卡| 操逼网免费无码视频| 亚洲骚女一区二区三区| 欧美 亚洲 综合 制服 另类|