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

電子開發 | 基礎入門 | 電路原理圖 | 梯形图实例 | PLC基础   《如果喜欢本站,请按 Ctrl+D 手动收藏!感谢您的支持》一起学习一起进步,电子开发王欢迎您!.

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊

★电路公式手册,最新版《电子电路公式计算器》,电路公式查询手册 电路公式计算器【电子从业人员必备手册】
☆十天学会单片机实例100 c语言 chm格式。资料内容详细,覆盖例子多,内容广【电子从业人员必备手册】
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 組態王KingView入門教程實例 >> 正文

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

作者:佚名    文章來源:網絡    點擊數:399    更新時間: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進行編程。方法是當接受到信息時,接受這些信息,檢查信息是否是發送給自己的,如果是的話,接受信息,然后按規約的要求發送信息到發送方。在編制程序時不需要添加一些頭文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#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 個字
[ 查看全部 ] 網友評論
    没有任何评论
电子开发网:汇集综合各类电子制作与电路图的网站,plc工控技术,模电数电知识,单片机EDA等等!荟萃电路图网站精华,为工程师创造价值。欢迎关注微信公众号:电子开发网!

三菱PLC软件 GX Wor

西门子200smartPLC选

模拟量转换工程量转

简述555定时器工作原

西门子S7-200 SMART

TIA Portal博途软件
 简单三极管逆变器
 TL494制作50HZ逆变
 80W简单的功放电路
 555制作的简易电子
 850热风枪电路图原
 直流12v荧光灯电路
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢