C# Modbus通信从入门到精通(11)——调试软件Modbus Slave和Modbus Poll的使用

2023-11-05

前言

我们在开发Modbus程序的时候,会需要测试以下我们写的Modbus程序有没有问题,这时候就需要使用到Modbus Slave和Modbus Poll这两个软件,Modbus Slave是模拟Modbus从站,Modbus Poll是模拟Modbus从站主站的,

1、协议选择

一般情况下我们开发的Modbus主站程序,当我们没有硬件作为从站的时候,我们可以使用Modbus Slave来模拟Modbus从站,然后我们就可以对Modbus Slave进行访问,进行读取线圈状态,读取保持寄存器的值等操作,当然我们在进行Modbus调试的时候可能有三种不同的协议,也就是ModbusRTU、ModbusASCII、ModbusTCP,下面分别介绍如何在Modbus Slave使用这三种不同的协议

1.1 ModbusRTU

当我们使用ModbusRTU协议时,在连接时选择Serial Port,然后Mode中选择RTU即可,如下图:
在这里插入图片描述

1.2 ModbusASCII

当我们使用ModbusASCII协议时,在连接时选择Serial Port,然后Mode中选择ASCII即可,如下图:

在这里插入图片描述

1.3 ModbusTCP

当我们使用ModbusTCP协议时,在连接时选择Modbus TCP/IP,然后设置IP Address、Port即可,如下图:
在这里插入图片描述

2、Modbus Slave

2.1 Modbus Slave创建0到9一共10个地址的线圈

这里以Modbus RTU为例,我们通过Modbus Slave创建0到9一共10个地址的输出线圈,并且将地址0、1、2这三个地址的值赋值为1,其余地址值为0,操作步骤如下:
1)点击“Connect”
在这里插入图片描述
2)设置通信参数
尤其注意,因为我电脑使用虚拟串口助手,虚拟了COM1、COM2这一对串口,所以我在这里选择的是COM2,因为我会在Modbus主站打开COM1,然后点击“OK”
在这里插入图片描述
3)点击“Slave Definition”
在这里插入图片描述
4)设置读取、写入参数

在这里插入图片描述
设置从站地址(Slave Id)为1
设置功能(Function)为01 线圈状态,这里特别要注意的是:
4.1)当主站使用0x01、0x05、0x0F这三个功能码时,ModbusSlave的Function都是选择01 Coil Status
4.2)主站使用0x02这个功能码时,ModbusSlave的Function都是选择02 Input Status
在这里插入图片描述
4.3)当主站使用0x03、0x06、0x10这三个功能码时,ModbusSlave的Function都是选择03 Holding Register,如下图:
在这里插入图片描述
4.4)当主站使用0x04这个功能码时,ModbusSlave的Function都是选择04 Input Register,如下图:
在这里插入图片描述

设置起始地址为0
设置数量为10,
结果如下:
在这里插入图片描述

我们可以手动的更改每个线圈的值如下:
双击箭头所指处,然后弹出一个窗体,我们可以设置该线圈的值时ON还是OFF。
在这里插入图片描述
我们将地址0、1、2设置为ON,如下图:
在这里插入图片描述
5)打开Modbus Poll
在这里插入图片描述

在这里插入图片描述
将Modbus Poll的参数设置的和Modbus Slave一样,就会发现地址0、1、2的值在ModbusPoll中显示的都是1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# Modbus通信从入门到精通(11)——调试软件Modbus Slave和Modbus Poll的使用 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐