電子開發網

              電子開發網電子設計 | 電子開發網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 個字
              [ 查看全部 ] 網友評論
              關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
              返回頂部
              刷新頁面
              下到頁底
              晶體管查詢
              国产精品福利片免费看| 久久国产精品久久精品国产| 91人妻人人澡人人爽人人精品| 欧美成人精品第一区二区| 亚洲中文字幕无码久久精品1| 国产精品户外野外| 国产精品嫩草影院一二三区| 人妻少妇精品系列| 无码久久精品国产亚洲Av影片| 热久久国产欧美一区二区精品| 影音先锋能看的网站| 免费人成在线观看欧美精品| 亚洲美女在线视频| 久久久久无码精品国产app| 亚洲精品私拍国产福利在线| 精品亚洲国产成AV人片传媒| 在线观看亚洲精品福利片 | 无码精品A∨在线观看| 国产精品久久国产精品99盘| 日韩精品人妻系列无码专区| 黄色小说在线免费观看| 亚洲宅男精品一区在线观看| 国产成人精品999在线观看| 亚洲人成精品久久久久| 亚洲国产精品一区二区第四页| 国产在线国偷精品免费看| 国产精品v欧美精品v日韩| 亚洲精品国产日韩无码AV永久免费网 | 99久久伊人精品综合观看| 国产欧美久久久精品| 久久久不卡国产精品一区二区 | 午夜精品久视频在线观看| 久久久这里有精品中文字幕| 欧美jizzhd精品欧美| 成人精品一区二区三区电影黑人| 亚洲sss综合天堂久久久| 免费91麻豆精品国产自产在线观看 | 久久夜色精品国产噜噜噜亚洲AV | 最近中文字幕mv免费高清视频7| 99热成人精品热久久669| 国产成人久久精品区一区二区|