衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教程-西門子S7協議轉換為HTTP協議

IOTRouter ? 來源:IOTRouter ? 作者:IOTRouter ? 2024-10-12 16:18 ? 次閱讀

需求概述

本章要實現一個流程:EG8200采集西門子S7-200Smart的數據,并組裝成JSON格式通過HTTP上報應用平臺。

源-(S7轉Modbus-https://www.iotrouter.com/news/2150.html)

要采集的PLC點位表如下:

PLC S7-200 Smart
IP 192.168.0.34/102
點表(DB1)
地址 數據類型 屬性 名稱
V0.0 Boolean 只讀 風機1接觸器異常
V0.6 Boolean 只讀 風機2接觸器異常
V1.6 Boolean 只讀 風機3接觸器異常
V2.5 Boolean 只讀 變頻器通訊故障
I0.0 Boolean 只讀 電機高溫報警
I0.1 Boolean 只讀 溫度狀態異常
VD4 Float 只讀 油壓工程值
VD8 Float 只讀 吸入壓力工程值
VD12 Float 只讀 燃油油位工程值
VD16 Float 只讀 機柜溫度值
VD20 Float 只讀 發動機電壓值
VD24 Float 只讀 發動機電流值
VD28 Float 只讀 發動機工作時間
VD32 Float 只讀 泵壓工程值
VW120 Unsigned16 只讀 本機編號
VW750 Unsigned16 只讀 本機組號
VW2402 Unsigned16 只讀 電機1溫度
VW2404 Unsigned16 只讀 電機2溫度
VW2406 Unsigned16 只讀 電機3溫度
VW2408 Unsigned16 只讀 風機1溫度
VW2410 Unsigned16 只讀 風機2溫度
VW2412 Unsigned16 只讀 風機3溫度

HTTP通信相關參數格式如下:

##數據推送
url:192.168.0.32:1880/api/device/reportData
method:POST

JSON格式:
{
  "deviceInfo": {
    "machineNumber": 9301,
    "machineGroupNumber": 1
  },
  "status": {
    "fan1ContactError": true,
    "fan2ContactError": false,
    "fan3ContactError": false,
    "inverterCommError": false,
    "motorHighTempAlarm": false,
    "temperatureStatusError": false
  },
  "data": {
    "oilPressure": 17.83,
    "suctionPressure": 3.7,
    "fuelLevel": 0.23,
    "cabinetTemperature": 237.2,
    "engineVoltage": 415.64,
    "engineCurrent": 65.1,
    "engineRuntime": 72.6,
    "pumpPressure": 85.3,
    "motor1Temperature": 20,
    "motor2Temperature": 19,
    "motor3Temperature": 19,
    "fan1Temperature": 21,
    "fan2Temperature": 33,
    "fan3Temperature": 26
  },
  "timestamp": "2022-7-08 11:28:55"
}

需求分析

在制作流程時,基礎的邏輯是根據數據走向來制作流程。其中主要工作分為三步:

第一步:通過S7協議讀取PLC變量數據,得到的數據存儲在內存中(西門子節點)

第二步:將數據按照JSON格式進行格式化(函數節點)

第三步:配置HTTP 請求參數

wKgZoWcKMT2AIXGSAAAUBcZlQlY587.png

需求實現

1. 采集PLC數據

從節點庫拖入一個西門子節點,以及一個調試節點,調試節點用于查看讀取到的PLC數據集,方便定位問

wKgZombDBMSAXaAwAAzV2crvgmE057.png

雙擊西門子節點,根據需求概述的內容填寫對應的設置參數,如下圖所示:

IP:PLC的IP
端口:102(S7協議通信默認端口102)
采集周期:1000ms(默認2000ms,可自定義)
超時周期:2000ms(默認2000ms,可自定義)

數據點配置(根據幫助文檔可以找到對應關系)
V0.0
V0.6
V1.6
V2.5
I0.0
I0.1
VD4
VD8
VD12
VD16
VD20
VD24
VD28
VD32
VW120
VW750
VW2402
VW2404
VW2408
VW2410
VW2412

如果是連續地址,可配置起始地址并填寫讀取長度即可

如果設置正確,調試窗口會有日志打印,顯示的是讀取到的數據內容:

wKgaombDBV6AGjboAAz30bMjHmA001.png

有的時候PLC數據點比較多,手動依次錄入比較繁瑣。節點支持數據點的導入導出或者參數傳遞的方式來讀取:

wKgZoWcKMZWAemq1ABG6MpMXYKA822.png

本例程用到的傳參方案,函數節點內的代碼如下:

msg.payload = [
    { func: "ReadBoolArray", body: { name: "", address: "V0", length: 8 } },
    { func: "ReadBoolArray", body: { name: "", address: "V1", length: 8 } },
    { func: "ReadBoolArray", body: { name: "", address: "V2", length: 8 } },
    { func: "ReadFloatArray", body: { name: "", address: "VD4", length: 8 } },
    { func: "ReadUInt16", body: { name: "", address: "VW120" } },
    { func: "ReadUInt16", body: { name: "", address: "VW750" } },
    { func: "ReadUInt16Array", body: { name: "", address: "VW2402", length: 6 } },
    { func: "ReadBoolArray", body: { name: "", address: "I0", length: 8 } }
]
return msg;

2. 數據格式化

根據步驟引導,在調試窗口可以看到讀到的PLC數據如下:

wKgZoWcKMbSABcQeAAGpKSe5_oI754.png

因為應用平臺已經規定了數據必須按照JSON格式上報。接下來使用函數節點Javascrip代碼將數據進行格式化,代碼如下:

class DeviceReport {
    constructor(machineNumber, machineGroupNumber) {
        this.deviceInfo = {
            machineNumber: machineNumber,
            machineGroupNumber: machineGroupNumber
        };
        this.status = {
            fan1ContactError: 0,
            fan2ContactError: 0,
            fan3ContactError: 0,
            inverterCommError: 0,
            motorHighTempAlarm: 0,
            temperatureStatusError: 0
        };
        this.data = {
            oilPressure: 0,
            suctionPressure: 0,
            fuelLevel: 0,
            cabinetTemperature: 0,
            engineVoltage: 0,
            engineCurrent: 0,
            engineRuntime: 0,
            pumpPressure: 0,
            motor1Temperature: 0,
            motor2Temperature: 0,
            motor3Temperature: 0,
            fan1Temperature: 0,
            fan2Temperature: 0,
            fan3Temperature: 0
        };
        this.timestamp = null;
    }

    // 設置狀態數據(1表示異常,0表示正常)
    setStatusData(statusData) {
        this.status = statusData;
    }

    // 設置傳感器數據
    setSensorData(sensorData) {
        this.data = sensorData;
    }

    // 設置時間戳
    setTimestamp(timestamp) {
        this.timestamp = timestamp;
    }
    generateReport() {
        return {
            deviceInfo: this.deviceInfo,
            status: this.status,
            data: this.data,
            timestamp: this.timestamp
        };
    }
}

function dateFormat(fmt, timestamp) {
    let ret;
    const opt = {
        "Y+": timestamp.getFullYear().toString(), // 年
        "m+": (timestamp.getMonth() + 1).toString(),  // 月
        "d+": timestamp.getDate().toString(), // 日
        "H+": timestamp.getHours().toString(), // 時
        "M+": timestamp.getMinutes().toString(), // 分
        "S+": timestamp.getSeconds().toString() // 秒
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}
function setValue(data) {
    var myDeviceReport = new DeviceReport(data.VW120, data.VW750)
    var v0 = data.V0
    var v1 = data.V1
    var v2 = data.V2
    var i0 = data.I0
    var vd4 = data.VD4
    var vd2402 = data.VW2402
    const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())
    try {
        // 設置狀態數據
        const statusData = {
            fan1ContactError: v0[0],
            fan2ContactError: v0[6],
            fan3ContactError: v1[6],
            inverterCommError: v2[5],
            motorHighTempAlarm: i0[0],
            temperatureStatusError: i0[1]
        }
        myDeviceReport.setStatusData(statusData)

        // 設置傳感器數據
        const sensorData = {
            oilPressure: vd4[0],
            suctionPressure: vd4[1],
            fuelLevel: vd4[2],
            cabinetTemperature: vd4[3],
            engineVoltage: vd4[4],
            engineCurrent: vd4[5],
            engineRuntime: vd4[6],
            pumpPressure: vd4[7],
            motor1Temperature: vd2402[0],
            motor2Temperature: vd2402[1],
            motor3Temperature: vd2402[2],
            fan1Temperature: vd2402[3],
            fan2Temperature: vd2402[4],
            fan3Temperature: vd2402[5]
        }
        myDeviceReport.setSensorData(sensorData)
        // 設置時間戳
        myDeviceReport.setTimestamp(fmt)
        //生成JSON對象返回
        return myDeviceReport.generateReport()
    } catch (err) {
        node.error(err.message);
        return null
    }

}
var plcData = msg.payload
if (setValue(plcData)){
    msg.payload = JSON.stringify(setValue(plcData),null,2)
    return msg
}

復制以上代碼,粘貼到函數節點內,部署后即可看到效果:

wKgaoWcKMciAHmhAABAECOnz8Go273.png

可以看到,已經將讀到的PLC數據,按照需求要求轉換成了最終的JSON格式,且對數據進行了一定程度的計算(兩位小數)。此處只是函數節點的冰山一角,因為支持Javascrip語言編程,幾乎你能想到的任何功能都可以在這里實現。

3. 通過http周期上報

拖入一個HTTP節點,根據提示進行配置地址和請求方式,即可實現數據上報:

wKgaoWcKMdOAaHycAA5n4n7XdF0777.png

服務端返回成功,至此,數據上報已經完成,很簡單幾步即可實現:采集PLC數據并按照自定義JSON格式上報。

源碼

所有的流程支持以json格式導入導出,方便與其他人分享做好的流程。本章節的流程json文件如下,復制后在菜單欄右上角選擇導入粘貼即可,導出同理

[{"id":"edf0c4c538469caa","type":"Siemens","z":"5bb1b94e3403e2f2","name":"","protocol":"iplink_SiemensS7","IPAddress":"192.168.0.34","DestPort":"102","IPLinkTimeout":"2000","IPCommTimeout":"2000","Spname":"COM10","Baudrate":"9600","Databits":"8","Stopbit":"1","Paritybit":"0","RTSEnable":false,"SpLinktimeout":"2000","SpIntertimeout":"-1","workMode":"read","readMode":"trigger","readCyc":"1000","vartable":[],"SiemensS7Model":"5","SiemensS7ConnectionType":"1","SiemensS7Rack":"0","SiemensS7Slot":"0","SiemensS7LocalTSAP":"102","SiemensS7DestTSAP":"4D57","SiemensPPIStation":"2","stringvar":[],"customName":"Siemens:S7-S200Smart","x":510,"y":1080,"wires":[["be890e0383a04306"]]},{"id":"90be80aa485c48ae","type":"debug","z":"5bb1b94e3403e2f2","name":"調試 22","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1020,"y":1080,"wires":[]},{"id":"2485d94e74e61614","type":"function","z":"5bb1b94e3403e2f2","name":"函數計算 18","func":"msg.payload = [n    { func: "ReadBoolArray", body: { name: "", address: "V0", length: 8 } },n    { func: "ReadBoolArray", body: { name: "", address: "V1", length: 8 } },n    { func: "ReadBoolArray", body: { name: "", address: "V2", length: 8 } },n    { func: "ReadFloatArray", body: { name: "", address: "VD4", length: 8 } },n    { func: "ReadUInt16", body: { name: "", address: "VW120" } },n    { func: "ReadUInt16", body: { name: "", address: "VW750" } },n    { func: "ReadUInt16Array", body: { name: "", address: "VW2402", length: 6 } },n    { func: "ReadBoolArray", body: { name: "", address: "I0", length: 8 } }n]nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":1080,"wires":[["edf0c4c538469caa"]]},{"id":"8db3c718ecac3ed7","type":"inject","z":"5bb1b94e3403e2f2","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":1080,"wires":[["2485d94e74e61614"]]},{"id":"be890e0383a04306","type":"function","z":"5bb1b94e3403e2f2","name":"函數計算 19","func":"class DeviceReport {n    constructor(machineNumber, machineGroupNumber) {n        this.deviceInfo = {n            machineNumber: machineNumber,n            machineGroupNumber: machineGroupNumbern        };n        this.status = {n            fan1ContactError: 0,n            fan2ContactError: 0,n            fan3ContactError: 0,n            inverterCommError: 0,n            motorHighTempAlarm: 0,n            temperatureStatusError: 0n        };n        this.data = {n            oilPressure: 0,n            suctionPressure: 0,n            fuelLevel: 0,n            cabinetTemperature: 0,n            engineVoltage: 0,n            engineCurrent: 0,n            engineRuntime: 0,n            pumpPressure: 0,n            motor1Temperature: 0,n            motor2Temperature: 0,n            motor3Temperature: 0,n            fan1Temperature: 0,n            fan2Temperature: 0,n            fan3Temperature: 0n        };n        this.timestamp = null;n    }nn    // 設置狀態數據(1表示異常,0表示正常)n    setStatusData(statusData) {n        this.status = statusData;n    }nn    // 設置傳感器數據n    setSensorData(sensorData) {n        this.data = sensorData;n    }nn    // 設置時間戳n    setTimestamp(timestamp) {n        this.timestamp = timestamp;n    }n    generateReport() {n        return {n            deviceInfo: this.deviceInfo,n            status: this.status,n            data: this.data,n            timestamp: this.timestampn        };n    }n}nnfunction dateFormat(fmt, timestamp) {n    let ret;n    const opt = {n        "Y+": timestamp.getFullYear().toString(), // 年n        "m+": (timestamp.getMonth() + 1).toString(),  // 月n        "d+": timestamp.getDate().toString(), // 日n        "H+": timestamp.getHours().toString(), // 時n        "M+": timestamp.getMinutes().toString(), // 分n        "S+": timestamp.getSeconds().toString() // 秒n    };n    for (let k in opt) {n        ret = new RegExp("(" + k + ")").exec(fmt);n        if (ret) {n            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))n        };n    };n    return fmt;n}nfunction setValue(data) {n    var myDeviceReport = new DeviceReport(data.VW120, data.VW750)n    var v0 = data.V0n    var v1 = data.V1n    var v2 = data.V2n    var i0 = data.I0n    var vd4 = data.VD4n    var vd2402 = data.VW2402n    const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())n    try {n        // 設置狀態數據n        const statusData = {n            fan1ContactError: v0[0],n            fan2ContactError: v0[6],n            fan3ContactError: v1[6],n            inverterCommError: v2[5],n            motorHighTempAlarm: i0[0],n            temperatureStatusError: i0[1]n        }n        myDeviceReport.setStatusData(statusData)nn        // 設置傳感器數據n        const sensorData = {n            oilPressure: vd4[0],n            suctionPressure: vd4[1],n            fuelLevel: vd4[2],n            cabinetTemperature: vd4[3],n            engineVoltage: vd4[4],n            engineCurrent: vd4[5],n            engineRuntime: vd4[6],n            pumpPressure: vd4[7],n            motor1Temperature: vd2402[0],n            motor2Temperature: vd2402[1],n            motor3Temperature: vd2402[2],n            fan1Temperature: vd2402[3],n            fan2Temperature: vd2402[4],n            fan3Temperature: vd2402[5]n        }n        myDeviceReport.setSensorData(sensorData)n        // 設置時間戳n        myDeviceReport.setTimestamp(fmt)n        //生成JSON對象返回n        return myDeviceReport.generateReport()n    } catch (err) {n        node.error(err.message);n        return nulln    }nn}nvar plcData = msg.payloadnif (setValue(plcData)) {n    msg.payload = JSON.stringify(setValue(plcData), null, 2)n    return msgn}n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":1080,"wires":[["d140dc012c0cd68f"]]},{"id":"d140dc012c0cd68f","type":"http request","z":"5bb1b94e3403e2f2","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"192.168.0.32:1880/api/device/reportData","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":860,"y":1080,"wires":[["90be80aa485c48ae"]]}]


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 西門子
    +關注

    關注

    95

    文章

    3062

    瀏覽量

    116444
  • HTTP
    +關注

    關注

    0

    文章

    511

    瀏覽量

    31518
  • 邊緣計算
    +關注

    關注

    22

    文章

    3121

    瀏覽量

    49516
收藏 人收藏

    評論

    相關推薦

    西門子PLC S7-1500系列介紹

    西門子PLCS7-1500系列是西門子自動化領域中的一款重要產品,它以其卓越的性能、強大的功能和高度的靈活性,在工業自動化控制系統中占據了一席之地。本文將詳細介紹西門子PLC
    的頭像 發表于 12-09 18:23 ?647次閱讀
    <b class='flag-5'>西門子</b>PLC <b class='flag-5'>S7</b>-1500系列介紹

    西門子S7協議PLC數據采集到MQTT物聯網平臺 ?

    ,廣泛應用于各種工業控制場合。而MQTT(消息隊列遙測傳輸)物聯網平臺則以其高效的消息傳輸機制和數據處理能力,為物聯網設備提供了強大的連接、管理和數據處理服務。 對此,物通博聯提供基于工業智能網關實現西門子S7協議PLC數據采集
    的頭像 發表于 09-26 10:42 ?372次閱讀
    <b class='flag-5'>西門子</b><b class='flag-5'>S7</b><b class='flag-5'>協議</b>PLC數據采集到MQTT物聯網平臺  ?

    EG網關采集西門子S7-200smart轉Modbus協議

    通過EG邊緣計算網關,用戶可以輕松實現西門子S7-200 Smart PLC數據的采集,并將其轉換為標準Modbus協議輸出。這種跨協議的數
    的頭像 發表于 09-10 10:42 ?659次閱讀
    EG網關采集<b class='flag-5'>西門子</b><b class='flag-5'>S7</b>-200smart轉Modbus<b class='flag-5'>協議</b>

    西門子 S7 通信協議大揭秘

    什么是S7協議 有網友說,如果 S7 是一輛汽車,它可能看起來像這樣: 實際上,西門子S7協議
    的頭像 發表于 08-12 14:21 ?897次閱讀
    <b class='flag-5'>西門子</b> <b class='flag-5'>S7</b> 通信<b class='flag-5'>協議</b>大揭秘

    基于多協議轉換工業物聯網網關采集西門子PLC設備數據

    作為全球領先的自動化解決方案提供商,西門子的PLC設備以其穩定性和高效性廣受贊譽。然而,在實際應用過程中,由于其采用的是專有的通信協議,與其他設備之間的互聯互通成為了一大難題。這就需要一個多協議
    的頭像 發表于 08-12 13:41 ?279次閱讀

    西門子總線協議有哪些

    西門子(Siemens)作為工業自動化領域的領先企業,其總線協議在自動化系統中發揮著重要作用。西門子總線協議主要包括了多種類型,這些協議支持
    的頭像 發表于 08-05 16:09 ?1252次閱讀

    S7協議讀取西門子S7-200 Smart PLC數據

    西門子S7-200 Smart PLC因其穩定性和易用性而廣泛應用。通過使用S7協議,可以實現對PLC數據的高效讀取和控制。本文將詳細介紹如何使用S
    的頭像 發表于 07-11 11:55 ?6552次閱讀
    <b class='flag-5'>S7</b><b class='flag-5'>協議</b>讀取<b class='flag-5'>西門子</b><b class='flag-5'>S7</b>-200 Smart PLC數據

    宏集物聯網工控屏通過 S7 ETH 協議采集西門子 1200 PLC 數據

    上周我們分享了宏集HMI通過S7 MPI協議采集西門子400 PLC數據的操作步驟。本周,我們將繼續帶來干貨,重點介紹宏集HMI如何通過S7 ETH
    的頭像 發表于 06-21 16:02 ?611次閱讀
    宏集物聯網工控屏通過 <b class='flag-5'>S7</b> ETH <b class='flag-5'>協議</b>采集<b class='flag-5'>西門子</b> 1200 PLC 數據

    西門子S7協議與TCP協議的區別

    在工業自動化領域,通信協議的選擇對于確保設備間的順暢通信和數據的可靠傳輸至關重要。西門子S7協議和TCP協議作為兩種常用的通信
    的頭像 發表于 06-19 15:54 ?4228次閱讀

    干貨分享:宏集物聯網HMI通過S7 MPI協議采集西門子400PLC數據

    宏集物聯網HMI集成了多個驅動來適配西門子200、300、400、1200、1500、LOGO等系列PLC,本文主要介紹宏集HMI通過S7 MPI協議采集西門子400PLC數據的操作步
    的頭像 發表于 06-13 13:39 ?669次閱讀
    干貨分享:宏集物聯網HMI通過<b class='flag-5'>S7</b> MPI<b class='flag-5'>協議</b>采集<b class='flag-5'>西門子</b>400PLC數據

    西門子plc模塊型號詳解

    的模塊型號,以幫助您更好地了解和選擇適合自己需求的PLC模塊。 西門子S7系列PLC模塊 西門子S7系列PLC是其最經典的PLC產品系列,包括S7
    的頭像 發表于 06-11 16:18 ?6633次閱讀

    非夕科技與西門子達成戰略合作協議,正式加入西門子Xcelerator生態

    近日,Flexiv非夕科技與西門子達成戰略合作協議,正式加入西門子 Xcelerator 生態,雙方將聯合打造面向多行業的自適應機器人應用解決方案。
    的頭像 發表于 05-24 14:49 ?855次閱讀

    西門子網口S7-COMM協議300 400如何使用?

    。網關使用 西門子****300/400 協議驅動 , 按照下述過程操作即可實現與PLC直接通訊(協議名稱為S7-COMM)。 本文以 西門子
    的頭像 發表于 04-18 16:18 ?1113次閱讀
    <b class='flag-5'>西門子</b>網口<b class='flag-5'>S7</b>-COMM<b class='flag-5'>協議</b>300  400如何使用?

    組態軟件與西門子S7系列PLC及三菱PLC間的無線通信測試

    組態軟件與西門子S7系列PLC及三菱PLC間的無線通信測試需要用到以下設備: l 西門子PLC型號:S7-200Smart × 2臺 l 三菱PLC型號:FX5U × 2臺 l 上位機
    的頭像 發表于 03-13 14:54 ?522次閱讀
    組態軟件與<b class='flag-5'>西門子</b><b class='flag-5'>S7</b>系列PLC及三菱PLC間的無線通信測試

    杭氧與西門子簽署合作協議

    杭氧與西門子簽署合作協議 3月7日杭州制氧機集團有限公司與西門子簽署戰略合作協議;杭氧與西門子
    的頭像 發表于 03-11 11:58 ?638次閱讀
    风水24龙| 赌场风云剧情介绍| HG百家乐官网大转轮| 太阳百家乐管理网| 百家乐官网平注常赢法| 百家乐3珠路法| 网上百家乐官网赌博犯法吗| 定制百家乐桌子| 至尊百家乐官网吕文婉| 大发888王博被带走| 百家乐官网正负计算| 德州扑克游戏网站| 百家乐官网纯技巧打| 大发888新闻| 百家乐博彩桌出租| 慈利县| 百家乐全部规| 什么是百家乐官网平注法| 大发888官方下载删除| 属蛇做生意坐向| 百家乐官网视频双扣| 豪门百家乐的玩法技巧和规则| 百家乐官网扑克桌| 998棋牌游戏| 博彩百家乐心得| 查看百家乐官网赌博| 大发888老虎机下载免费| 百家乐注码论坛| 网上百家乐官网骗人的吗| 线上百家乐怎么玩| 3U百家乐官网的玩法技巧和规则 | 大发888微信公众号2| 百家乐3号眨眼技术| 百家乐官网最保险的方法| 大发888官方下载网址| 百家乐游戏怎么刷钱| 百家乐官网游戏机路法| 凤凰网上娱乐| 百家乐tt娱乐场| 百家乐官网赌博大全| 武鸣县|