日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 組態(tài)王KingView >> 正文

KingView組態(tài)王通過Modbus TCP與ESP32通訊_esp32 modbus tcp

作者:佚名    文章來源:網(wǎng)絡(luò)    點(diǎn)擊數(shù):    更新時(shí)間:2024/8/16

組態(tài)王通過Modbus TCP與ESP32通訊

組態(tài)王

組態(tài)王在工控領(lǐng)域被廣泛應(yīng)用。作為人機(jī)界面可以開發(fā)多種應(yīng)用。與ESP8266通過無線網(wǎng)通訊沒有太多的文章介紹,這里介紹通過使用modbus TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)上傳和命令下發(fā)。

組態(tài)王的通訊設(shè)置

組態(tài)王可以通過板卡或串口來建立一個(gè)通訊路徑。
 
這個(gè)畫面中,選擇設(shè)備-新建出現(xiàn)新建設(shè)備畫面。
 
選擇莫迪康(Modicon)作為生產(chǎn)廠家,就是我們要通訊設(shè)備的生產(chǎn)廠家(大名鼎鼎的Modicon,以前也叫過歌德,中國的煉鋼廠當(dāng)時(shí)用得都是這個(gè)廠家得PLC)。通訊協(xié)議選擇是ModbusTCP。這個(gè)協(xié)議是在Modbus串口通訊協(xié)議發(fā)展而來得。
 
給這個(gè)設(shè)備起一個(gè)名稱。這個(gè)是可以隨意取。
 
這里要選擇一個(gè)串口,因?yàn)樵诔绦蛑幸獎(jiǎng)?chuàng)建Socket,不知道為啥非要選串口。選一個(gè)不能用到得串口,我選擇了COM21。

 
在這里需要注意,上面設(shè)置是按如下得格式設(shè)置得:

192.168.4.81 是要通訊的主機(jī)(Server)的IP地址。
:6600 是通訊服務(wù)器的端口號
5 是ModbusTCP的地址
/50 是超時(shí)時(shí)間
后面就是一路確定到:

組態(tài)王變量設(shè)置

Modbus的通訊可以是離散量輸入,離散量輸出,模擬量輸入和模擬量輸出。離散量是一個(gè)位,用modbus就是10001或者00001,10001表示輸入,即數(shù)字輸入點(diǎn),00001表示輸出,即數(shù)字量輸出點(diǎn)。模擬量輸入采用30001,十六位的輸入,模擬量輸出是40001,16位數(shù)字表示一個(gè)輸出值。在這里我們設(shè)置一個(gè)16位寄存器值,40101.
 


這里選擇的連接設(shè)備時(shí)WTGSimuPLC。寄存器是40101. 數(shù)據(jù)類型是無符號整數(shù)。通訊頻率為1000ms。有了這個(gè)變量可以在圖形中做可視化就可以讀取這個(gè)變量值了。

變量顯示

在畫面中展示做一個(gè)數(shù)字,然后和變量進(jìn)行連接就可以實(shí)現(xiàn)這個(gè)變量的顯示了。
動(dòng)畫連接,選擇模擬量輸出:
 
在畫面上可以展示這個(gè)輸出了。

ESP8266編程

需要在ESP8266中編程,我還是選擇了Arduino IDE進(jìn)行編程。方法是當(dāng)接受到信息時(shí),接受這些信息,檢查信息是否是發(fā)送給自己的,如果是的話,接受信息,然后按規(guī)約的要求發(fā)送信息到發(fā)送方。在編制程序時(shí)不需要添加一些頭文件。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
WiFiClient client;
IPAddress loIP(192, 168, 4, 61);
IPAddress snIP(255, 255, 255, 0);
IPAddress gwIP(192, 168, 4, 1);
IPAddress mbTCP(192, 168, 4, 51);
WiFiServer server(6600);            // 服務(wù)器,server
void wifiSetup()
{
   if (!WiFi.config(loIP, gwIP, snIP))
   {
     Serial.println("Satation配置不成功");
     delay(3000);
   }
   WiFi.mode(WIFI_STA);
   WiFi.begin(ssid, password);
}
void sMBTCP(uint8_t* buff, int16_t iLength)
{
  int iTemp;
  int rAdd;
  if ( bDebug )
  {
    Serial.println("The length = " + String(iLength));
    for(int i = 0; i < iLength; i++)
      Serial.printf("The buff[%d] = 0x%02X\n", i, (uint8_t)buff[i]);
  }
  if (buff[6] != 0x05)        // modbus TCP address
    return;
  switch ( buff[7] )
  {
    case 3:                   // read hold register
      rAdd = (buff[8] << 8) + buff[9];    // register address
      if ( bDebug4 )
      {
        Serial.println("The rAdd = " + String(rAdd));
      }
      buff[5] = ((buff[10] << 8) + buff[11]) * 2 + 3;  // reply bytes
      buff[8] = ((buff[10] << 8) + buff[11]) * 2;        
      iTemp = 9 + buff[8];        // total bytes send
      if ( rAdd == 0)
      {
        for (int i = 0; i < buff[8]/2; i++)
        {
          buff[9 + (i * 2)] = hreg40001[i] >> 8;
          buff[10 + (i * 2)] = hreg40001[i];
        }
      }
      if ( bDebug )
      {
        for ( int i = 0; i < iTemp; i++)
        {
          Serial.printf("buff[%d] = 0x%02X\n", i, (uint8_t)buff[i]); 
        }
      }
      client.write(buff, iTemp);
      break;
    case 6:
  break;
    case 16:
      break;
    default:
      break;    
  }
  if ( bDebug )
  {
    for (int i = 0; i < iTemp; i++)
      Serial.printf("The buff[%d] = 0x%02X\n", i, (uint8_t)buff[i]);
  }
}
void setup()
{
 Serial.begin(115200);     // 調(diào)試助手
  delay(1000);                           // pasue 1 second
   wifiSetup();                        // setup wifi hot AP
   server.begin();       // 服務(wù)器運(yùn)行
}
void loop() 
{
  if (server.hasClient())         // 這個(gè)是當(dāng)有新的client與Server連接時(shí)
  {
    client = server.available();
    Serial.println("client connected");
  } 
  if ( client && client.connected())
  {
    int i = 0;
    while (client.available())
    {
      char c = client.read();
      if (client.available() == 0)
        mbLength = i + 1;
      mdTCPbuff[i] = c;
      i++;
    }
    if ( i > 0 )
    {
      sMBTCP(mdTCPbuff, i);
    }
  }
}

上面的程序可以完成modbusTCP通訊了。場景是固定的IP地址,發(fā)送讀取命令,然后應(yīng)答讀取。

總結(jié)

用組態(tài)王做一個(gè)人機(jī)界面在工控領(lǐng)域比較流行。ESP8266可以通過Wifi作為一個(gè)服務(wù)器為HMI提供服務(wù)。

Tags:組態(tài)王,Modbus協(xié)議,KingView  
責(zé)任編輯:admin
相關(guān)文章列表
組態(tài)王KingView 實(shí)測:西門子200PLC和組態(tài)王自由口通信
組態(tài)王與Modbus協(xié)議的地址對應(yīng)規(guī)則
施耐德PM500電量表通過MODBUS協(xié)議與組態(tài)王通訊
手把手教你入門組態(tài)王采集溫濕度傳感器的數(shù)據(jù)并顯示
組態(tài)王或SCADA與西門子200Smart通訊配置流程
組態(tài)軟件的無線485通訊實(shí)例,組態(tài)王modbus通訊實(shí)例
軟件操作實(shí)例:組態(tài)王7.5和SQLsever數(shù)據(jù)庫交互
組態(tài)王和三菱plc 基于數(shù)傳電臺的組態(tài)王控制實(shí)現(xiàn)遠(yuǎn)程采集控制器PL
KingView組態(tài)王,結(jié)合組態(tài)的三菱PLC編程學(xué)習(xí)方法 三菱GX WORK2
組態(tài)王創(chuàng)建記錄體
KingView組態(tài)王:小車移動(dòng)控制_組態(tài)王移動(dòng)距離和對應(yīng)值
組態(tài)王軟件理論復(fù)習(xí)題
KingView組態(tài)王軟件快速入門教程
KingView組態(tài)王歷史報(bào)警記錄實(shí)操
KingView組態(tài)王中如何使用攝像頭控件
KingView組態(tài)王之反應(yīng)中心動(dòng)畫連接,建立畫面的圖素與數(shù)據(jù)庫變量的
KingView組態(tài)王如何實(shí)現(xiàn)流動(dòng)管道效果?組態(tài)王動(dòng)態(tài)圖片動(dòng)畫實(shí)現(xiàn)
KingView組態(tài)王與S7-200 SMART通過網(wǎng)口連接 TCP通訊
KingView組態(tài)王與信捷PLC通訊解決方案 MODBUS通訊設(shè)置
KingView組態(tài)王通過modbus與第三方設(shè)備通訊,如何實(shí)現(xiàn)字節(jié)或字的
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢