java modbus tcp_modbus tcp 入门详解

前言:

但是上面的两篇文章是已经封装好的API,只要调用就可以实现功能了,对于想了解modbus tcp的原理的人可能就不适合了,最近有不少网友的想要了解这个协议,所以在这里再写一篇介绍Modbus tcp的文章,不过这篇文章是简易版本的,未来我再研究深入的话,再开一篇高级版,在简易版中,就略去了成功标志位及其他数据标志,这些到等到后面再说。

先分享一下,我自己学习的地址来源:http://blog.csdn.net/thebestleo/article/details/52269999  声明:本文并非转载,并非照搬原文章,是在我参照原博客的基础上,理解了基本的modbus通讯,并结合自己的理解,重新写一篇更好入门的文章,此处贴出原作者的帖子以示尊重知识产权,原文章有些地方有一点错误,而且早就停止更新了,也没有提供方便的测试工具,官方的modbus 测试工具是试验版本的,需要购买序列号才可以,所以此处提供我自己的测试工具,地址如下,下面的介绍的例子都是基于这个工具来实现的。

技术支持QQ群:592132877

准备条件:

在上面的测试工具下载之前,需要一些额外的知识补充,此处不管你是学习什么语言的,对于socket通信层来说,其实是一样的,下面的讲解的内容是直接基于底层的,无关语法的操作。

但是需要你对字节概念非常清晰,一般都是byte数组,一个byte有8个位,这个也要非常的清晰,如果连byte是什么都搞不清楚,那么对本文下面的内容理解会非常的吃力,那么还是建议你再看看计算机原理这些书,对于socket通信,每种语言都有不同的写法,但是所有的语言都有两个共同点,都能实现把数据发送到socket和从socket接收数据,至于这个如果去做,就参照你自己需要使用的语言了,此处不做这方面的说明了。

关于十六进制文本,在本文的下面的内容上,所有的byte字节数组都表示成十六进制形式,比如 FF 10 代表2个字节,一个是255,另一个是16。

如果将上述的temp看作是读取到的线圈的数据,那么转换规则如下:

先将上述数据转化成二进制 : 1111 1111    (第一个byte,我们从高位写到地位)             0001 0000   (第二个byte,我们从高位写到地位)

对应的线圈就是,线圈7-线圈0,,,,第二个byte对应的线圈是,线圈15-线圈8     这里一定要好好理解,从byte上来说,temp[0]是地位,temp[1]是高位,深入到每个byte里面的二进制,高位在前,低位在后。

在C#里等同于下面的代码,和C语言,java也是非常的相近,还算比较好理解。

如果我说,发送 00 00 00 00 00 06 FF 01 00 00 00 01 到socket上去,那么也就是:

先不要管上面的数据是什么含义,知道上面的代码是啥含义就行了。接下来就是下载上面的测试工具,开始真正的学习modbus tcp协议了!

测试工具初始化

先运行Server.exe文件,端口里输入502,然后点击启动服务即可,如下:

5b423fd4942afd85fb37586b99f161f5.png

然后运行Client.exe程序,在Ip地址里输入127.0.0.1,端口里输入502ÿ

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值