天下行 發表於 2019-5-10 21:26:00

C#ModBus Tcp 报文解析

<p>上一篇博客已经完成 <strong>C#ModBus Tcp Master的实现</strong></p>
<p>本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文)</p>
<p><strong><span style="font-size: 16px">读操作</span></strong></p>
<p>功能码 0x01 读一组线圈 读取站号为1 从地址12开始的10个线圈</p>
<p>测试结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510181441380-1035543879.png" alt=""></p>
<p>上一篇博客已经总结了<span style="color: rgba(255, 0, 0, 1)">读操作</span>报文格式,就按照格式划分</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190507125605486-1036070568.png" alt=""></p>
<p>&nbsp;</p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510183553735-2007331914.png" alt=""></p>
<p><span style="color: rgba(255, 0, 0, 1)">注意:报文中线圈起始地址 00000 对应设备中 10001 地址,其他顺延</span>&nbsp;</p>
<p>&nbsp;</p>
<p>功能码0x02 报文格式与功能码0x01一致,只是第八字节的功能码变为02 其他完全一致,不再重复解析</p>
<p>功能码0x03 读一组保持寄存器 读取站号为1 从地址12开始的10个值</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510190045552-230039486.png" alt=""></p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510191353804-697453985.png" alt=""></p>
<p>&nbsp;功能码0x04 报文格式与功能码0x03一致,只是第八字节的功能码变为04 其他完全一致,也不再重复解析</p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><strong>写操作</strong></span></p>
<p>操作码:0x05 写单个线圈&nbsp; 将站号为1 地址为21的线圈置为On</p>
<p>注意:在报文中 <span style="color: rgba(255, 0, 0, 1)">指定线圈通断标志&nbsp; FF00 置线圈为ON&nbsp; 0000置线圈为OFF</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510201738294-757735980.png" alt=""></p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510202713559-525769030.png" alt=""></p>
<p>&nbsp;</p>
<p>功能码0x0F 写一组线圈&nbsp; 将站号1 起始地址21&nbsp; 的连续五个线圈置为 通,断,断,通,通</p>
<p>测试结果:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510205207418-869645667.png" alt=""></p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510205259390-1138719863.png" alt=""></p>
<p>&nbsp;</p>
<p>功能码 0x06&nbsp; 写单个保持寄存器&nbsp; 将6666写入从站1 地址为21 的保持寄存器中</p>
<p>测试结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510210234553-451130699.png" alt=""></p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510210250406-1451441253.png" alt=""></p>
<p>功能码0x10&nbsp; 写一组保持寄存器&nbsp;&nbsp; 例如 将12 23 34 45 56 67 78 分别写入从站1 起始地址为21的7个连续的保持寄存器中</p>
<p>测试结果</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510211859008-180180752.png" alt=""></p>
<p>报文解析:</p>
<p><img src="https://img2018.cnblogs.com/blog/1630815/201905/1630815-20190510211938701-1859410713.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>到此为止,我们常用的几个ModBus功能码报文都解析完毕了 有错误之处 希望大家不吝赐教,感谢(抱拳~)</p>
<p><span style="font-size: 16px"><strong>C#ModBus Tcp Master</strong></span></p>
<p>&nbsp;</p>
<div id="mttContainer" class="bootstrapiso notranslate" title="" data-original-title="">&nbsp;</div>

</div>
<div id="MySignature" role="contentinfo">
    <div style="border: solid 1px; padding: 10px; background: #EECFA1 url(&quot;https://images.cnblogs.com/cnblogs_com/grenet/226272/o_o_o_info.png&quot;) no-repeat scroll 15px 50%; padding-left: 80px">
    <p>

            作者:
            Niuery Daily
    </p>
    <p>
            出处:
            https://www.cnblogs.com/pandefu/&gt;
    </p>
<p>邮箱:
defu_pan@163.com

</p>
    <p>
            关于作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控件库,多线程
    </p>
<p>
             本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
             原文链接,否则保留追究法律责任的权利。
             如有问题, 可邮件咨询。
    </p>
</div><br><br>
来源:https://www.cnblogs.com/pandefu/p/10824848.html
頁: [1]
查看完整版本: C#ModBus Tcp 报文解析