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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

快速開發(fā)一個(gè)簡(jiǎn)單的ModBus TCP主站上位機(jī)(附源碼)

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

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

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

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

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

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

安裝完成后,我們進(jìn)入下一步。

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

創(chuàng)建工程

1、打開Visual Studio依次點(diǎn)擊“文件”->“新建”->“項(xiàng)目”

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

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

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

ModBus庫(kù)的安裝

工程創(chuàng)建完成后,中間紅色部分窗體就是我們?cè)摴こ棠J(rèn)生成的界面,默認(rèn)程序運(yùn)行起來(lái)后會(huì)加載該界面,但我們先不管界面,我們先為工程安裝Easy ModBusTcp庫(kù)。

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

EasyModBusTCP的特點(diǎn)如下:

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

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

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

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

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

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

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

在上圖紅色區(qū)域點(diǎn)擊鼠標(biāo)右鍵然后點(diǎn)擊“查看代碼”(或者鍵盤單機(jī)“F7”),進(jìn)入工程代碼文件,然后點(diǎn)擊”項(xiàng)目”->“管理NuGet程序包”。

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

在“瀏覽”菜單欄的搜索框中輸入“easy ModBusTCP”,找到如下圖擴(kuò)展庫(kù)后點(diǎn)擊“下載”;

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

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

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

代碼編寫

(1)界面設(shè)計(jì)

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

{

}

}

}

}

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

    關(guān)注

    2541

    文章

    49951

    瀏覽量

    747465
  • MODBUS
    +關(guān)注

    關(guān)注

    28

    文章

    1718

    瀏覽量

    76418
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1324

    瀏覽量

    78755
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于QT的Modbus RTU站上位工具設(shè)計(jì)

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

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

    現(xiàn)在在做基于MODBUS/Tcp協(xié)議的上位機(jī),求大家能給我個(gè)教程!不勝感激!實(shí)在不會(huì)!來(lái)個(gè)例子也不錯(cuò)!
    發(fā)表于 05-20 15:50

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

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

    Modbus站問(wèn)題

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

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

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

    基于Modbus TCP的MCGS上位機(jī)軟件教程

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

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

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

    labview涂料機(jī)串口DIY上位機(jī)源碼

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

    EPSON機(jī)器人如何與視覺(jué)上位機(jī)實(shí)現(xiàn)TCP通信

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

    ModBus RTU 與 ModBus TCP

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

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

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

    上位機(jī)的入門

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

    基于QT的簡(jiǎn)單上位機(jī)

    。同樣的,我們也從編寫個(gè)簡(jiǎn)單的基于QT的上位機(jī)來(lái)體會(huì)體會(huì)上位
    發(fā)表于 05-08 10:57 ?16次下載
    基于QT的<b class='flag-5'>簡(jiǎn)單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    QT|編寫個(gè)簡(jiǎn)單上位機(jī)

    QT | 編寫個(gè)簡(jiǎn)單上位機(jī) 時(shí)間 :2023-03-19文章目錄QT | 編寫
    發(fā)表于 05-08 10:12 ?3次下載
    QT|編寫<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    EtherCAT站網(wǎng)關(guān)HT5S-ECM-MTP接半導(dǎo)體用空氣流量計(jì)與MODBUS TCP上位機(jī)通訊測(cè)試

    EtherCAT站網(wǎng)關(guān)HT5S-ECM-MTP接半導(dǎo)體用空氣流量計(jì)與MODBUS TCP上位機(jī)通訊測(cè)試 HT5S-ECM-MTP 是
    的頭像 發(fā)表于 06-12 15:43 ?259次閱讀
    EtherCAT<b class='flag-5'>主</b>站網(wǎng)關(guān)HT5S-ECM-MTP接半導(dǎo)體用空氣流量計(jì)與<b class='flag-5'>MODBUS</b> <b class='flag-5'>TCP</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>通訊測(cè)試