首页 » 软件开发 » 【零基础】5分钟开发一个简单的ModBus TCP主站上位机(附源码)(上位主站开发源码支持)

【零基础】5分钟开发一个简单的ModBus TCP主站上位机(附源码)(上位主站开发源码支持)

落叶飘零 2024-07-23 22:41:47 0

扫一扫用手机浏览

文章目录 [+]

在“工作负荷”菜单处勾选“.NET桌面开发”(已省略安装具体步骤)与你需要的其他组件。

安装完成后,我们进入下一步。

创建工程

【零基础】5分钟开发一个简单的ModBus TCP主站上位机(附源码)(上位主站开发源码支持) 软件开发
(图片来自网络侵删)

1、打开Visual Studio 依次点击“文件”->“新建”->“项目”

创建Visual C#的 Windows窗体应用,按如下步骤创建Windows窗体应用,下面第四步我们可以自定义工程名称,这里我将该工程命名成“ModbusMaster”,完成后点击“确定。

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连接,并在通信结束后关闭连接。

在上图红色区域点击鼠标右键然后点击“查看代码”(或者键盘单机“F7”),进入工程代码文件,然后点击”项目”->“管理NuGet程序包”

在“浏览”菜单栏的搜索框中输入“easy modbusTCP”,找到如下图扩展库后点击“下载”

安装成功后我们可以在解决方案资源管理器中,引用中找到该扩展库。

二、代码编写

(1)界面设计

(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

{

}

}

}

}

相关文章

R语言在求解最值问题中的应用与讨论

最值问题在数学、科学和工程等领域具有重要的应用价值,而R语言作为一种功能强大的统计计算软件,在求解最值问题方面具有独特的优势。本文...

软件开发 2024-12-29 阅读0 评论0

R语言变量名,构建高质量数据处理的基石

在数据科学领域,R语言因其强大的数据处理和分析能力而备受青睐。在R语言编程过程中,变量名作为数据处理的基石,其合理命名对提高代码可...

软件开发 2024-12-29 阅读0 评论0

Go语言在推送技术中的应用与发展

随着互联网技术的飞速发展,推送技术已经成为现代移动应用的重要组成部分。作为一款高性能的编程语言,Go语言在推送领域展现出了巨大的潜...

软件开发 2024-12-29 阅读0 评论0