初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(二)
由于感觉上一次写的篇幅过长,所以新开一贴,继续介绍Modbus TCP/IP的初步认识,
书接上回
3)、03(0x03)功能码--------读保持寄存器
请求与响应格式

这是一个请求读寄存器108-110 的实例:

- private void send03_Click(object sender, EventArgs e)
- {
- byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x6C, 0x00, 0x03 };
- newclient.Send(data);
- }
- public void showMsg03(string msg)
- {
- //在线程里以安全方式调用控件
- if (receive0x01.InvokeRequired)
- {
- MyInvoke _myinvoke = new MyInvoke(showMsg03);
- receive0x03.Invoke(_myinvoke, new object[] { msg });
- }
- else
- {
- receive0x03.AppendText(msg);
- }
- }
我们再来看一下Modbus Slave设置







- private void send05_Click(object sender, EventArgs e)
- {
- byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, 0x00, 0xAD, 0xFF, 0x00 };
- newclient.Send(data);
- }
- public void showMsg05(string msg)
- {
- //在线程里以安全方式调用控件
- if (receive0x05.InvokeRequired)
- {
- MyInvoke _myinvoke = new MyInvoke(showMsg05);
- receive0x05.Invoke(_myinvoke, new object[] { msg });
- }
- else
- {
- receive0x05.AppendText(msg);
- }
- }
我们再来看一下Modbus Slave设置





5)、06 (0x06)写单个寄存器
请求与应答PDU

这是一个请求将十六进制00 03 写入寄存器2的实例:

程序如下:
- private void send06_Click(object sender, EventArgs e)
- {
- byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x06, 0x00, 0x01, 0x00, 0x03 };
- newclient.Send(data);
- }
- <span style="font-size:14px;">public void showMsg06(string msg)
- {
- //在线程里以安全方式调用控件
- if (receive0x06.InvokeRequired)
- {
- MyInvoke _myinvoke = new MyInvoke(showMsg06);
- receive0x06.Invoke(_myinvoke, new object[] { msg });
- }
- else
- {
- receive0x06.AppendText(msg);
- }
- }</span>
我们再来看一下Modbus Slave设置




6)、15 (0x0F) 写多个线圈
在一个远程设备中,使用该功能码强制线圈序列中的每个线圈为ON 或OFF。
域比特位置中的逻辑“1”请求相应输出为ON。
域比特位置中的逻辑“0”请求相应输出为OFF。
请求与应答PDU

这是一个请求从线圈20 开始写入10 个线圈的实例:

- <span style="font-size:14px;">private void send0F_Click(object sender, EventArgs e)</span>
- <span style="font-size:14px;">{
- byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x01, 0x0F, 0x00, 0x14, 0x00, 0x0A, 0x02, 0xCD, 0x01 };
- newclient.Send(data);
- }</span>
程序如下:
- <span style="font-size:14px;">public void showMsg0F(string msg)
- {
- //在线程里以安全方式调用控件
- if (receive0x0F.InvokeRequired)
- {
- MyInvoke _myinvoke = new MyInvoke(showMsg0F);
- receive0x0F.Invoke(_myinvoke, new object[] { msg });
- }
- else
- {
- receive0x0F.AppendText(msg);
- }
- }</span>
我们再来看一下Modbus Slave设置



Modbus TCP响应

我们的软件所收到的数据

7)、16 (0x10)写多个寄存器
请求与应答PDU

这是一个请求将十六进制00 0A 和01 02 写入以2 开始的两个寄存器的实例:

- <span style="font-size:14px;">private void send10_Click(object sender, EventArgs e)
- {
- byte[] data = new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x01, 0x10, 0x00, 0x02, 0x00, 0x02, 0x04, 0x00,0x0A,0x01, 0x02 };
- newclient.Send(data);
- }</span>
- public void showMsg10(string msg)
- {
- //在线程里以安全方式调用控件
- if (receive0x10.InvokeRequired)
- {
- MyInvoke _myinvoke = new MyInvoke(showMsg10);
- receive0x10.Invoke(_myinvoke, new object[] { msg });
- }
- else
- {
- receive0x10.AppendText(msg);
- }
- }
我们再来看一下Modbus Slave设置





初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(二)的更多相关文章
- 计算机网络通信TCP/IP协议浅析 网络发展简介(二)
本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket 分层的 ...
- TCP/IP源码(59)——TCP中的三个接收队列
http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列 作者:gfree.wind@gmai ...
- TCP/IP协议族之链路层(二)
TCP/IP学习记录,如有错误请指正,谢谢!!! TCP/IP协议族之链路层(二) 链路层是最底层协议,主要有三个目的: 1. 为IP模块发送和接收IP数据报 2. 为ARP模块发送ARP请求和接收A ...
- 图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用
图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用 传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程 ...
- TCP/IP解析(一):TCP/IP的工作方式
本文包括下面内容: 1.TCP/IP协议系统 2.OSI模型 3.数据包 4.TCP/IP的交互方式 1.TCP/IP模型的协议层 分为四层: 网络訪问层:提供与物理网络连接的接口.依据硬件的物理地址 ...
- linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...
- TCP/IP学习笔记:TCP传输控制协议(一)
1 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务.两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中 ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- TCP/IP知识总结(TCP/IP协议族读书笔记二)
接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻 ...
随机推荐
- easyui 放大镜图标
iconCls:search 对应的 easyui的查询图标忒丑 想用放大镜图标 iconCls:zoom 找半天找到放大镜图标的 然后去icon.css文件中查 发现这个样式就叫zoom.
- npm中package-lock.json的作用:npm install安装时使用
简单理解: XYZ 的格式 对应为: 主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的 ...
- Python命令行参数学习
man python 查看python的帮助文件 命令行参数: -B Don't write .py[co] files on import. See a ...
- iOS:新浪微博OAuth认证
新浪微博OAuth认证 1.资源的授权 •在互联网行业,比如腾讯.新浪,那用户人群是非常巨大的 •有时候要把某些用户资源共享出去,比如第三方想访问用户的QQ数据.第三方想访问用户的新浪微博数据 • ...
- 【Hadoop】Hadoop MR Job工作流引擎
Apache Oozie 是用于 Hadoop 平台的一种工作流调度引擎.该框架(如图 1 所示)使用 Oozie 协调器促进了相互依赖的重复工作之间的协调,您可以使用预定的时间或数据可用性来触发 A ...
- ElasticSearch中设置排序Java
有用的链接:http://stackoverflow.com/questions/12215380/sorting-on-several-fields-in-elasticsearch 有的时候,需要 ...
- 编译spark源码及塔建源码阅读环境
编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...
- Swagger2 (3) 集成easymock 生成mock 测试数据
转载:http://blog.csdn.net/sai739295732/article/details/73957138 2.可以集成swagger 3.我们来玩一下 首先你需要一个swagger ...
- 利用gearman同步mysql数据到redis
一.Gearman 1.Gearman是一个分发任务的程序框架. 2.体系:a.client:发送一个jobb.server:找到合适的worker,把job交给该workerc.worker:处理j ...
- php正则表达式基本
一.正则表达式的组成 1.分隔符,可以是除了字母,数字,反斜线及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~ 2.表达式:由一些特殊字符和非特殊字符组成. 3.修饰符:用于开启或 ...