在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

快速開發一個簡單的ModBus TCP主站上位機(附源碼)

億佰特物聯網應用專家 ? 2024-04-12 08:20 ? 次閱讀

現如今,ModBus協議可以說是工業控、現場數據采集鄰域各種控制設備與傳感器應用最為廣泛的數據交互協議,不管是簡單方便的串口,還是高速穩定的以太網,ModBus協議都有相應的適配其傳輸特點的協議。

雖然目前主流的ModBus人機交互主站是組態王或者各種工控廠家生產的觸摸屏,但如果你想做一些帶邏輯控制或者界面比較自由的上位機,那么該文章將在Visual Studio集成開發環境下,使用C#語言和Visual Studio的Winform框架,從環境安裝、創建工程、ModBus庫的安裝、代碼編寫和程序調試等幾個步驟,帶你快速開發出一個Window平臺環境下的ModBus主站上位機demo。(該文檔以Visual Studio 2017為例)

搭建開發環境

Visual Studio 社區版下載地址:

在“工作負荷”菜單處勾選“.NET桌面開發”(已省略安裝具體步驟)與你需要的其他組件。

安裝完成后,我們進入下一步。

7bb74668-f862-11ee-9118-92fbcf53809c.png

創建工程

1、打開Visual Studio依次點擊“文件”->“新建”->“項目”

7bc19c58-f862-11ee-9118-92fbcf53809c.png

創建Visual C#的 Windows窗體應用,按如下步驟創建Windows窗體應用,下面第四步我們可以自定義工程名稱,這里筆者將該工程命名成“ModBusMaster”,完成后點擊“確定。

7bc587fa-f862-11ee-9118-92fbcf53809c.png

ModBus庫的安裝

工程創建完成后,中間紅色部分窗體就是我們該工程默認生成的界面,默認程序運行起來后會加載該界面,但我們先不管界面,我們先為工程安裝Easy ModBusTcp庫。

EasyModBusTCP是基于.NET Framework和Java平臺上的ModBus TCP/UDP/RTU通訊協議庫。它主要用于工業自動化領域,幫助用戶實現遠程控制和數據采集。

EasyModBusTCP的特點如下:

(1)簡單易用:EasyModBusTCP提供了簡單易用的API,使得用戶可以輕松地實現與ModBus設備的通信

(2)支持多種編程語言:EasyModBusTCP支持多種編程語言,如C#、VB.NET、Java、C++以及更多C#的變體,如Unity、Mono、.NET Core等。

(3)支持多種ModBus協議:EasyModBusTCP不僅支持ModBus TCP協議,還支持ModBus UDP和ModBus RTU協議。

(4)支持點對點通信:EasyModBusTCP支持點對點通信,每個設備都有一個唯一的IP地址,使得用戶可以直接與特定設備進行通信。

(5)支持ModBus報文兩種類型:EasyModBusTCP支持ModBus報文的兩種類型,包括讀取請求和寫入請求。讀取請求用于獲取服務器上的數據,寫入請求用于向服務器寫入數據。

(6)可靠的數據傳輸:EasyModBusTCP使用TCP連接來確保可靠的數據傳輸。在通信之前,需要建立TCP連接,并在通信結束后關閉連接。

7bc96988-f862-11ee-9118-92fbcf53809c.png

在上圖紅色區域點擊鼠標右鍵然后點擊“查看代碼”(或者鍵盤單機“F7”),進入工程代碼文件,然后點擊”項目”->“管理NuGet程序包”。

7bd881f2-f862-11ee-9118-92fbcf53809c.png

在“瀏覽”菜單欄的搜索框中輸入“easy ModBusTCP”,找到如下圖擴展庫后點擊“下載”;

7bef43ce-f862-11ee-9118-92fbcf53809c.png

安裝成功后我們可以在解決方案資源管理器中,引用中找到該擴展庫。

7bf5d3ce-f862-11ee-9118-92fbcf53809c.png

代碼編寫

(1)界面設計

7bff7050-f862-11ee-9118-92fbcf53809c.png

(2)源碼

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using EasyModBus;

namespace ModBusMaster

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

this.Master = new ModBusClient();

this.slaveIP.Text = "192.168.3.7";

this.serverPort.Text = "502";

Master.UnitIdentifier = 2;

}

EasyModBus.ModBusClient Master = null;

private bool SlaveCoilWrite(int regaddr , bool status)

{

try

{

Master.WriteSingleCoil(regaddr, status);

}

catch

{

return false;

}

return true;

}

private void btn_connect_Click(object sender, EventArgs e)

{

if (Master.Connected) return;

Master.Connect(this.slaveIP.Text, int.Parse(this.serverPort.Text));

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

Master.Disconnect();

}

private void btn_do1_on_Click(object sender, EventArgs e)

{

SlaveCoilWrite(0, true);

}

private void btn_do2_on_Click(object sender, EventArgs e)

{

SlaveCoilWrite(1, true);

}

private void btn_do3_on_Click(object sender, EventArgs e)

{

SlaveCoilWrite(2, true);

}

private void btn_do4_on_Click(object sender, EventArgs e)

{

SlaveCoilWrite(3, true);

}

private void btn_do1_4_on_Click(object sender, EventArgs e)

{

//for (int i = 0; i < 4; i++)

//{

// SlaveCoilWrite(i, true);

//}

bool[] sta = new bool[4] { true , true , true , true};

try

{

Master.WriteMultipleCoils(0, sta);

}

catch

{

}

}

private void btn_do1_off_Click(object sender, EventArgs e)

{

SlaveCoilWrite(0, false);

}

private void btn_do2_off_Click(object sender, EventArgs e)

{

SlaveCoilWrite(1, false);

}

private void btn_do3_off_Click(object sender, EventArgs e)

{

SlaveCoilWrite(2, false);

}

private void btn_do4_off_Click(object sender, EventArgs e)

{

SlaveCoilWrite(3, false);

}

private void btn_do1_4_off_Click(object sender, EventArgs e)

{

//for (int i = 0; i < 4; i++)

//{

// SlaveCoilWrite(i, false);

//}

bool[] sta = new bool[4] { false, false, false, false };

try

{

Master.WriteMultipleCoils(0, sta);

}

catch

{

}

}

}

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2561

    文章

    52298

    瀏覽量

    762359
  • MODBUS
    +關注

    關注

    28

    文章

    1960

    瀏覽量

    78756
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1395

    瀏覽量

    80214
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于QT的Modbus RTU站上位工具設計

    Modbus種常見的工業系統通訊協議。在我們的設計開發工作中經常使用到它。在這篇中我們將簡單實現
    的頭像 發表于 12-13 14:39 ?5234次閱讀
    基于QT的<b class='flag-5'>Modbus</b> RTU<b class='flag-5'>主</b><b class='flag-5'>站上位</b>工具設計

    Modbus TCP Server程序開發與Yocto系統構建

    解壓后,源碼為“modbus_server_tcp.c”,它模擬Modbus TCP傳感器。
    的頭像 發表于 02-14 13:38 ?862次閱讀
    <b class='flag-5'>Modbus</b> <b class='flag-5'>TCP</b> Server程序<b class='flag-5'>開發</b>與Yocto系統構建

    求基于Modbus/tcp協議的上位

    現在在做基于MODBUS/Tcp協議的上位,求大家能給我教程!不勝感激!實在不會!來個例子也不錯!
    發表于 05-20 15:50

    【NanoPi M2試用體驗】之Modbus-TCP開發Modbus協議二)

    的測試成功了。NanoPi M2結合QT、串口、MySQL、Modbus-RTU、Modbus-TCP,已經可是實現功能強大的工業現場數據采集了,只要我們認真去發掘,其實小小的卡片
    發表于 05-29 18:51

    Modbus站問題

    ModbusRTU兩站之間如何交互數據? 工業控制中,般都是主從通訊方式居多,有時也會碰到兩站之間通訊。例如某工作站上位
    發表于 11-24 16:36

    TCP通信協議-Labview上位

    現在用單片進行信息采集,通過GPRS模塊上傳到PC,用Labview做上位TCP通信協議,想請教下,
    發表于 12-10 08:58

    基于Modbus TCP的MCGS上位軟件教程

    配置設備參數圖1.IP地址配置成上位一個網段,例如安裝上位軟件的上位
    發表于 08-09 14:24

    如何快速實現Modbus RTU和Modbus TCP協議轉換?

    Modbus協議是工業現場串口設備之間常用的連接方式,其中最常見的就是Modbus RTU和Modbus TCP兩種。許多工廠需要將現場各種不同型號設備的數據都能夠通過
    發表于 08-18 18:36

    labview涂料串口DIY上位源碼

    labview 涂料串口,自己做的上位源碼,通過串口控制機械臂。
    發表于 01-19 14:41 ?11次下載

    EPSON機器人如何與視覺上位實現TCP通信

    上位開發中經常會有機器人通信,今天跟大家分享下,EPSON機器人如何與視覺上位實現
    發表于 10-10 15:35 ?1967次閱讀

    上位開發新手指南(二)上位通信

    上位開發中,串口通信和TCP通信是兩種常見的通信方式。串口通信是指通過串口將數據發送和接收到控制器或其他外設中,TCP通信則是通過網絡將
    發表于 05-08 11:37 ?8次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>開發</b>新手指南(二)<b class='flag-5'>上位</b><b class='flag-5'>機</b>通信

    上位的入門

    開發上位前,我們應該準備好三軟件modbus poll, modbus Salve, Configure VirtualSerialPo
    發表于 05-08 11:40 ?1次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>的入門

    基于QT的簡單上位

    。同樣的,我們也從編寫簡單的基于QT的上位來體會體會上位
    發表于 05-08 10:57 ?18次下載
    基于QT的<b class='flag-5'>簡單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    QT|編寫簡單上位

    QT | 編寫簡單上位 時間 :2023-03-19文章目錄QT | 編寫
    發表于 05-08 10:12 ?3次下載
    QT|編寫<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    EtherCAT站網關HT5S-ECM-MTP接半導體用空氣流量計與MODBUS TCP上位通訊測試

    EtherCAT站網關HT5S-ECM-MTP接半導體用空氣流量計與MODBUS TCP上位通訊測試 HT5S-ECM-MTP 是
    的頭像 發表于 06-12 15:43 ?594次閱讀
    EtherCAT<b class='flag-5'>主</b>站網關HT5S-ECM-MTP接半導體用空氣流量計與<b class='flag-5'>MODBUS</b> <b class='flag-5'>TCP</b><b class='flag-5'>上位</b><b class='flag-5'>機</b>通訊測試
    主站蜘蛛池模板: 寄宿日记免费看 | 一女被多男玩很肉很黄文 | 欧美熟夫| 亚洲婷婷在线视频 | 天天草天天 | 欧美成人一区亚洲一区 | 午夜剧场黄 | 亚洲成综合人影院在院播放 | 伊人小婷婷色香综合缴缴情 | 人人澡人人澡碰人人看软件 | 人人干人人模 | 丁香婷五月| 69性成熟xxxxhd | 伊人久久大香线蕉综合bd高清 | 久久精品夜夜夜夜夜久久 | 日本aaaa级毛片在线看 | 亚洲大香伊人蕉在人依线 | 日韩特级毛片免费观看视频 | 看全色黄大色大片免费久久怂 | 国产精品久久久香蕉 | 成人国产精品一级毛片了 | 黄色小视频免费看 | 在线免费观看毛片网站 | 男女交性高清视频无遮挡 | 天天色综合1 | 美女网站一区二区三区 | 黄色三级在线看 | 天天摸天天 | 亚洲免费一区二区 | 日本国产视频 | 免费观看视频在线观看 | 日本人69xxxxxxxx69 | 在线观看www妖精免费福利视频 | 午夜黄色影院 | 亚洲成熟| 亚洲精品久久久久午夜福 | 爽天天天天天天天 | 深点再深一点好爽好多水 | 天天操人人 | 国产精品性 | 五月天婷婷免费视频 |