<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 組態王KingView >> 正文

      KingView組態王通過Modbus TCP與ESP32通訊_esp32 modbus tcp

      作者:佚名    文章來源:網絡    點擊數:    更新時間:2024/8/16

      組態王通過Modbus TCP與ESP32通訊

      組態王

      組態王在工控領域被廣泛應用。作為人機界面可以開發多種應用。與ESP8266通過無線網通訊沒有太多的文章介紹,這里介紹通過使用modbus TCP協議實現數據上傳和命令下發。

      組態王的通訊設置

      組態王可以通過板卡或串口來建立一個通訊路徑。
       
      這個畫面中,選擇設備-新建出現新建設備畫面。
       
      選擇莫迪康(Modicon)作為生產廠家,就是我們要通訊設備的生產廠家(大名鼎鼎的Modicon,以前也叫過歌德,中國的煉鋼廠當時用得都是這個廠家得PLC)。通訊協議選擇是ModbusTCP。這個協議是在Modbus串口通訊協議發展而來得。
       
      給這個設備起一個名稱。這個是可以隨意取。
       
      這里要選擇一個串口,因為在程序中要創建Socket,不知道為啥非要選串口。選一個不能用到得串口,我選擇了COM21。

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

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

      組態王變量設置

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


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

      變量顯示

      在畫面中展示做一個數字,然后和變量進行連接就可以實現這個變量的顯示了。
      動畫連接,選擇模擬量輸出:
       
      在畫面上可以展示這個輸出了。

      ESP8266編程

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

      #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);            // 服務器,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);     // 調試助手
        delay(1000);                           // pasue 1 second
         wifiSetup();                        // setup wifi hot AP
         server.begin();       // 服務器運行
      }
      void loop() 
      {
        if (server.hasClient())         // 這個是當有新的client與Server連接時
        {
          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地址,發送讀取命令,然后應答讀取。

      總結

      用組態王做一個人機界面在工控領域比較流行。ESP8266可以通過Wifi作為一個服務器為HMI提供服務。

      Tags:組態王,Modbus協議,KingView  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 狠狠色婷婷七月色综合| 久久―日本道色综合久久| 国产成人综合网在线观看| 亚洲综合久久精品无码色欲 | 久久婷婷五月综合97色一本一本| 久久综合九色综合97手机观看| 亚洲第一综合天堂另类专| 一本一本久久aa综合精品| 久久五月天综合网| 亚洲色欲久久久综合网东京热| 亚洲日本国产综合高清| 亚洲狠狠综合久久| 情人伊人久久综合亚洲| 婷婷五月综合色中文字幕| 91精品国产综合久久青草| 国产精品无码久久综合| 天天做天天爱天天综合网2021| 亚洲综合色7777情网站777| 中文字幕国产综合| 激情综合丝袜美女一区二区| 国产91色综合久久免费分享| 久久婷婷激情综合色综合俺也去| 久久婷婷五月综合成人D啪| 青青草原综合久久大伊人精品| 久久综合久久美利坚合众国| 久久久久AV综合网成人| 色与欲影视天天看综合网| 91精品国产综合久| 一本一本久久a久久综合精品蜜桃| 亚洲国产综合精品| 亚洲综合精品第一页| 亚洲AV综合色区无码二区爱AV| 久久无码无码久久综合综合| 一本一道久久精品综合| 激情综合亚洲色婷婷五月APP| 在线综合亚洲中文精品| 久久天堂av综合色无码专区| 亚洲综合久久夜AV | 插插插色欲综合网| 伊人色综合一区二区三区影院视频| 狠狠综合亚洲综合亚洲色|