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

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

★电路公式手册,最新版《电子电路公式计算器》,电路公式查询手册 电路公式计算器【电子从业人员必备手册】
☆十天学会单片机实例100 c语言 chm格式。资料内容详细,覆盖例子多,内容广【电子从业人员必备手册】
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 组态王KingView >> 正文

KingView组态王通过Modbus TCP与ESP32通讯_esp32 modbus tcp

作者:佚名    文章来源:网络    点击数:332    更新时间: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等等!荟萃电路图网站精华,为工程师创造价值。欢迎关注微信公众号:电子开发网!
资料包下载
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂備礁鎲¢妵鐐电矆娓氣偓婵″灚寰勭仦绋夸壕婵炴垵纾槐鎵磼閸欐ê宓嗙€规洩绻濆鎾偐瀹割喗姣堥梻浣告惈閻楀棝骞栭锔藉仾闁告洦鍓涢悷褰掓煥閻曞倹瀚�100 c闂佽崵濮村ù鍕箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]濠电偞鍨堕幐鎼佀囩€圭姰浜圭紒鈧悜鐫犻梺璇插閸愯崵绱撳鍗炲К闁告洦鍓涢々鐑芥偣閹帒濡介柛鈺佸€垮鍫曟倻閸℃浠у┑鐐叉-閺侇煝-TR
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM324闂佸搫顦弲婊堝礉閺嶎厼妫橀柨鐕傛嫹4~20mA闂佸搫顦遍崕鎴﹀箯閿燂拷1~5V闂備焦鐪归崹褰掓倶濮樿京鐭堥柨鐕傛嫹
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM386濠碉紕鍋涘﹢杈╁垝椤栫偞鍊垫い鎺嶇劍婵挳鏌熼幑鎰靛殭妞ゆ柨锕弻娑滅疀閹垮啫鍓跺銈冨劜閹瑰洤顕i妸鈺佺畾鐟滃绂嶉敐澶嬬厱闁挎繂鍟俊濂告偨椤栥倖瀚�
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]936闂備胶绮敮鎺楁晝閵堝牄浜归柟缁㈠枟閸嬨劌霉閿濆懎鏆熼柣鏂挎嚇閺屾稑螣閻撳孩鐏侀梺璇″枛閿曨亜鐣烽崼鏇熸櫢闁跨噦鎷�
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂佺儵鍓濈敮鎺楀箠鎼淬劍鏅柟閭﹀厴閺嬫牠鏌曡箛銉х?闁靛牊鎸抽幃褰掓偖鐎涙ê顏�+婵犵數鍋為幐鎾疾濞戞埃鍋撻惂鍛婂+闂備胶顢婄紙浼村磿閹绢噮鏁嗛柣鏂垮悑閸庡秹鏌涢弴銊ヤ簻缂佲偓閿燂拷
 [闂傚倷绶¢崑鍛潩閵娾晛鏋侀柕鍫濐槹閸嬨劑姊婚崼鐔恒€掗柟钘夌Ч閹鎷呴悷鎵槰濡炪倖鎸搁幉鈥翅缚椤忓牜鏁嶆繛鍡樺姦閸嬶拷]S7-200PLC闂備焦鐪归崝宀€鈧凹浜為幐鎺楀閵堝棗鍓抽梺缁樻⒐濡叉帡骞忛鈷氬綊鎮崨顔碱伓 S7_2
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]S7-200闂佸湱鍘ч悺銊╁箰婵犳艾鍑犻柛鎰ㄦ櫇椤╃兘鎮规担鍛婅础缂佲偓閸曨垱鐓曢煫鍥风悼閸樻粎绱掗幉瀣,STEP7
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]ModbusPoll闂備礁鎲$划宀勵敆閻栧獛busSalve闂備胶枪妤犲繘骞忛敓锟�
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]STEP7婵犵妲呴崹顏堝礈濠靛牃鍋撳顓犳噰闁哄苯鐭佺粻娑㈠棘鐠恒劍鈻屽┑鐐差嚟婵即宕愰弴鐘哄С闁跨噦鎷� Smart_
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modbus闂佽崵濮撮鍛村疮閹惰姤鍎婃い鏍ㄧ矊閸ㄦ繈鏌涢幘妤€鍊荤憴锟� v1.024 缂傚倸鍊风欢銈夊箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modscan32闂備礁鎲$划宀勵敆閻栧獛sim32,modb
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]89c51闂備胶枪缁绘劙藝闁秵鍋熸繛鎴欏灩濡﹢姊洪锝囶灱闂傚棗缍婇弻锝夘敂閸℃鐝㈢紓浣介哺閻涱槝otues
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]濠电偞鍨堕幐绋棵洪妶澶婄濡わ絽鍟崒銊╂煕閻愭潙袨otues濠电偛顕慨鎯р枖閺囩儑鑰块柨娑樺閻瑩鎮楅敐搴濈敖缁炬澘绉电换婵婎槼闁告梹顨婇幃銉╂晸閿燂拷
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]51闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬鏌涘┑鍡楊仼闁秆冿功缁辨帞鈧綀鍩栫€氾拷 protues濠电偛顕慨鎯р枖閺囩儑鑰块柨鐕傛嫹
热门文章
  • 此栏目下没有热点文章
最新文章
 简单三极管逆变器
 TL494制作50HZ逆变
 80W简单的功放电路
 555制作的简易电子
 850热风枪电路图原
 直流12v荧光灯电路
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询