0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

教程-西門子S7協(xié)議轉(zhuǎn)換為HTTP協(xié)議

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

需求概述

本章要實現(xiàn)一個流程:EG8200采集西門子S7-200Smart的數(shù)據(jù),并組裝成JSON格式通過HTTP上報應(yīng)用平臺。

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

要采集的PLC點位表如下:

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

HTTP通信相關(guān)參數(shù)格式如下:

##數(shù)據(jù)推送
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"
}

需求分析

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

第一步:通過S7協(xié)議讀取PLC變量數(shù)據(jù),得到的數(shù)據(jù)存儲在內(nèi)存中(西門子節(jié)點)

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

第三步:配置HTTP 請求參數(shù)

wKgZoWcKMT2AIXGSAAAUBcZlQlY587.png

需求實現(xiàn)

1. 采集PLC數(shù)據(jù)

從節(jié)點庫拖入一個西門子節(jié)點,以及一個調(diào)試節(jié)點,調(diào)試節(jié)點用于查看讀取到的PLC數(shù)據(jù)集,方便定位問

wKgZombDBMSAXaAwAAzV2crvgmE057.png

雙擊西門子節(jié)點,根據(jù)需求概述的內(nèi)容填寫對應(yīng)的設(shè)置參數(shù),如下圖所示:

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

數(shù)據(jù)點配置(根據(jù)幫助文檔可以找到對應(yīng)關(guān)系)
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

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

如果設(shè)置正確,調(diào)試窗口會有日志打印,顯示的是讀取到的數(shù)據(jù)內(nèi)容:

wKgaombDBV6AGjboAAz30bMjHmA001.png

有的時候PLC數(shù)據(jù)點比較多,手動依次錄入比較繁瑣。節(jié)點支持數(shù)據(jù)點的導(dǎo)入導(dǎo)出或者參數(shù)傳遞的方式來讀取:

wKgZoWcKMZWAemq1ABG6MpMXYKA822.png

本例程用到的傳參方案,函數(shù)節(jié)點內(nèi)的代碼如下:

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. 數(shù)據(jù)格式化

根據(jù)步驟引導(dǎo),在調(diào)試窗口可以看到讀到的PLC數(shù)據(jù)如下:

wKgZoWcKMbSABcQeAAGpKSe5_oI754.png

因為應(yīng)用平臺已經(jīng)規(guī)定了數(shù)據(jù)必須按照JSON格式上報。接下來使用函數(shù)節(jié)點Javascrip代碼將數(shù)據(jù)進行格式化,代碼如下:

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;
    }

    // 設(shè)置狀態(tài)數(shù)據(jù)(1表示異常,0表示正常)
    setStatusData(statusData) {
        this.status = statusData;
    }

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

    // 設(shè)置時間戳
    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 {
        // 設(shè)置狀態(tài)數(shù)據(jù)
        const statusData = {
            fan1ContactError: v0[0],
            fan2ContactError: v0[6],
            fan3ContactError: v1[6],
            inverterCommError: v2[5],
            motorHighTempAlarm: i0[0],
            temperatureStatusError: i0[1]
        }
        myDeviceReport.setStatusData(statusData)

        // 設(shè)置傳感器數(shù)據(jù)
        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)
        // 設(shè)置時間戳
        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
}

復(fù)制以上代碼,粘貼到函數(shù)節(jié)點內(nèi),部署后即可看到效果:

wKgaoWcKMciAHmhAABAECOnz8Go273.png

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

3. 通過http周期上報

拖入一個HTTP節(jié)點,根據(jù)提示進行配置地址和請求方式,即可實現(xiàn)數(shù)據(jù)上報:

wKgaoWcKMdOAaHycAA5n4n7XdF0777.png

服務(wù)端返回成功,至此,數(shù)據(jù)上報已經(jīng)完成,很簡單幾步即可實現(xiàn):采集PLC數(shù)據(jù)并按照自定義JSON格式上報。

源碼

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

[{"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":"調(diào)試 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":"函數(shù)計算 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":"函數(shù)計算 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    // 設(shè)置狀態(tài)數(shù)據(jù)(1表示異常,0表示正常)n    setStatusData(statusData) {n        this.status = statusData;n    }nn    // 設(shè)置傳感器數(shù)據(jù)n    setSensorData(sensorData) {n        this.data = sensorData;n    }nn    // 設(shè)置時間戳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        // 設(shè)置狀態(tài)數(shù)據(jù)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        // 設(shè)置傳感器數(shù)據(jù)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        // 設(shè)置時間戳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"]]}]


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 西門子
    +關(guān)注

    關(guān)注

    93

    文章

    2975

    瀏覽量

    115295
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    30891
  • 邊緣計算
    +關(guān)注

    關(guān)注

    22

    文章

    3008

    瀏覽量

    48275
收藏 人收藏

    評論

    相關(guān)推薦

    西門子S7協(xié)議PLC數(shù)據(jù)采集到MQTT物聯(lián)網(wǎng)平臺 ?

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

    EG網(wǎng)關(guān)采集西門子S7-200smart轉(zhuǎn)Modbus協(xié)議

    通過EG邊緣計算網(wǎng)關(guān),用戶可以輕松實現(xiàn)西門子S7-200 Smart PLC數(shù)據(jù)的采集,并將其轉(zhuǎn)換為標準Modbus協(xié)議輸出。這種跨協(xié)議的數(shù)
    的頭像 發(fā)表于 09-10 10:42 ?260次閱讀
    EG網(wǎng)關(guān)采集<b class='flag-5'>西門子</b><b class='flag-5'>S7</b>-200smart轉(zhuǎn)Modbus<b class='flag-5'>協(xié)議</b>

    西門子 S7 通信協(xié)議大揭秘

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

    西門子總線協(xié)議有哪些

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

    S7協(xié)議讀取西門子S7-200 Smart PLC數(shù)據(jù)

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

    宏集物聯(lián)網(wǎng)工控屏通過 S7 ETH 協(xié)議采集西門子 1200 PLC 數(shù)據(jù)

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

    西門子S7協(xié)議與TCP協(xié)議的區(qū)別

    在工業(yè)自動化領(lǐng)域,通信協(xié)議的選擇對于確保設(shè)備間的順暢通信和數(shù)據(jù)的可靠傳輸至關(guān)重要。西門子S7協(xié)議和TCP協(xié)議作為兩種常用的通信
    的頭像 發(fā)表于 06-19 15:54 ?2536次閱讀

    干貨分享:宏集物聯(lián)網(wǎng)HMI通過S7 MPI協(xié)議采集西門子400PLC數(shù)據(jù)

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

    西門子plc模塊型號詳解

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

    非夕科技與西門子達成戰(zhàn)略合作協(xié)議,正式加入西門子Xcelerator生態(tài)

    近日,F(xiàn)lexiv非夕科技與西門子達成戰(zhàn)略合作協(xié)議,正式加入西門子 Xcelerator 生態(tài),雙方將聯(lián)合打造面向多行業(yè)的自適應(yīng)機器人應(yīng)用解決方案。
    的頭像 發(fā)表于 05-24 14:49 ?628次閱讀

    西門子網(wǎng)口S7-COMM協(xié)議300 400如何使用?

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

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

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

    杭氧與西門子簽署合作協(xié)議

    杭氧與西門子簽署合作協(xié)議 3月7日杭州制氧機集團有限公司與西門子簽署戰(zhàn)略合作協(xié)議;杭氧與西門子
    的頭像 發(fā)表于 03-11 11:58 ?515次閱讀

    西門子PLC轉(zhuǎn)MQTT網(wǎng)關(guān)如何實現(xiàn)遠程監(jiān)控和遠程維護

    PLC(可編程邏輯控制器)是工業(yè)自動化領(lǐng)域常用的控制設(shè)備,其通常使用各種專有的通信協(xié)議與其他設(shè)備進行數(shù)據(jù)交互,如西門子PLC常見的通信協(xié)議S7、Modbus、Profinet、Pro
    的頭像 發(fā)表于 12-16 10:51 ?997次閱讀
    <b class='flag-5'>西門子</b>PLC轉(zhuǎn)MQTT網(wǎng)關(guān)如何實現(xiàn)遠程監(jiān)控和遠程維護

    PLC西門子S7-200smart和S7-1200的區(qū)別?

    PLC西門子S7-200smart和S7-1200的區(qū)別? 西門子S7-200 smart和S7
    的頭像 發(fā)表于 11-17 11:41 ?9180次閱讀