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

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

3天內不再提示

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

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

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

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

搭建開發(fā)環(huán)境

Visual Studio 社區(qū)版下載地址:

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

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

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

創(chuàng)建工程

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

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

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

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

ModBus庫的安裝

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

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

EasyModBusTCP的特點如下:

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

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

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

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

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

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

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

在上圖紅色區(qū)域點擊鼠標右鍵然后點擊“查看代碼”(或者鍵盤單機“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

{

}

}

}

}

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

    關注

    2542

    文章

    50279

    瀏覽量

    750201
  • MODBUS
    +關注

    關注

    28

    文章

    1747

    瀏覽量

    76682
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1337

    瀏覽量

    78868
收藏 人收藏

    評論

    相關推薦

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

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

    求基于Modbus/tcp協(xié)議的上位

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

    【NanoPi M2試用體驗】之Modbus-TCP開發(fā)Modbus協(xié)議二)

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

    Modbus站問題

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

    TCP通信協(xié)議-Labview上位

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

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

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

    如何快速實現(xiàn)Modbus RTU和Modbus TCP協(xié)議轉換?

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

    labview涂料串口DIY上位源碼

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

    EPSON機器人如何與視覺上位實現(xiàn)TCP通信

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

    ModBus RTU 與 ModBus TCP

    、兩密切相關的協(xié)議:RTU 與 TCP ModBus RTU和ModBus TCP作為
    的頭像 發(fā)表于 02-07 10:05 ?2905次閱讀

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

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

    上位的入門

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

    基于QT的簡單上位

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

    QT|編寫簡單上位

    QT | 編寫簡單上位 時間 :2023-03-19文章目錄QT | 編寫
    發(fā)表于 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 是
    的頭像 發(fā)表于 06-12 15:43 ?309次閱讀
    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>通訊測試