<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>北岛夜话</title><link>https://blog.founderchip.com/</link><description>原创工业智能控制（PLC、单片机、通信）的技术及经验分享。</description><item><title>再谈gettext的工作原理</title><link>https://blog.founderchip.com/?id=571</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;今天这篇文章继续讨论gettext。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614125710178141303011797.png&quot;/&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、gettext如何判断加载哪种语言？&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;gettext根据环境变量来决定加载哪个便携对象的二进制数据文件(.mo)，按以下顺序进行查找（优先级由高到低）：&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: decimal;&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;LANGUAGE（最高优先级）：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其键值可以是单个语言（&lt;span style=&quot;font-size: 16px;&quot;&gt;比如：zh_CN.UTF-8&lt;/span&gt;），也可以是多种语言，以冒号分割（比如：&lt;span style=&quot;font-size: 16px;&quot;&gt;zh_CN.UTF-8:en_US.UTF-8&lt;/span&gt;）。这种情况下，gettext 会从左到右依次尝试每种语言，直到找到可用的翻译（即存在对应的 .mo文件）。如果某种语言的 .mo文件不存在或未加载，则继续尝试下一个。如果所有列出的语言选项都失效，则回退到源代码中的原始字符串；&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;LC_ALL：这是一个全局变量，包括所有的LC_*。可以读取，尽量不要直接写；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;LC_MESSAGES：专门控制消息翻译区的变量；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;LANG（最低优先级）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、gettext加载语言数据的时机&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;函数：bindtextdomain(domain, dir)、bind_textdomain_codeset(domain, codeset)、textdomain(domain)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;均&lt;strong&gt;不会&lt;/strong&gt;触发&lt;span style=&quot;font-size: 16px;&quot;&gt;便携对象二进制数据文件&lt;/span&gt;(.mo)的加载。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; 1、&lt;/span&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: nowrap;&quot;&gt;bindtextdomain(domain, dir)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;告诉 gettext：域domain的 .mo文件存放在 dir目录下。只是记录路径，不读取任何文件。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2、bind_textdomain_codeset(domain, codeset)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;指定域的输出编码（例如 UTF-8）。只设置编码转换规则，不触发加载。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3、textdomain(domain)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;设置当前活动的域。只是切换当前域的名称，不加载 .mo。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;真正触发加载(.mo)文件的是第一次调用gettext(msg)函数。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;为了提高性能，gettext会缓存加载的&lt;span style=&quot;font-size: 16px;&quot;&gt;便携对象二进制数据&lt;/span&gt;文件(.mo)，默认不会自动检测其文件的变化。换句话说，当更新了翻译文件后，正在运行的程序不会自动加载最新的翻译。可以通过重新启动的方式设置环境变量，从而切换语言。另外在Linux(glibc)下，可以通过改变外部变量&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF; font-family: arial, helvetica, sans-serif;&quot;&gt;_nl_msg_cat_cntr&lt;/span&gt;的值，使gettext刷新缓存，这种情况下不用重启软件。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#ifdef __GLIBC__&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern int _nl_msg_cat_cntr; // 这是 GLIBC 内部的翻译缓存计数器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_nl_msg_cat_cntr++;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // 通过增加计数器来强制刷新 gettext 缓存&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endif&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、获取及设置环境变量的函数&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.1、Windows平台（&lt;span style=&quot;font-size: 16px;&quot;&gt;包含头文件&amp;lt;windows.h&amp;gt;&lt;/span&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.1.1、用getenv()或getenv_s()函数获取环境变量&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;函数声明：&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;hljs-function&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;char&lt;/span&gt; *&lt;span class=&quot;hljs-title&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;getenv&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;box-sizing: inherit; outline-color: inherit;&quot;&gt;(&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;char&lt;/span&gt; *varname)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #161616; white-space: pre; background-color: #FAFAFA; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数：环境变量的名称&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #161616; white-space: pre; background-color: #FAFAFA; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：指向环境变量的指针，失败返回NULL&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #161616; white-space: pre; background-color: #FAFAFA; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;例如：&lt;span style=&quot;color: #161616; white-space: pre; font-size: 16px; font-family: 微软雅黑, &amp;quot;Microsoft YaHei&amp;quot;; background-color: #8DB3E2;&quot;&gt;getenv(&amp;quot;LANGUAGE&amp;quot;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;errno_t &lt;/span&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;getenv_s&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; *pReturnValue,&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;* buffer,&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;size_t&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; numberOfElements,&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;&lt;span style=&quot;color:#161616&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; *varname);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; 名称中的s表示security（安全），参数：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;pReturnValue：所需的缓冲区大小，如果找不到该变量，则为 0。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;buffer：用于存储环境变量值的缓冲区。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;numberOfElements：缓存区的大小。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;varname：环境变量名称。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：如果成功，则为零；如果失败，则返回错误代码。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.1.2、可以用_putenv_s()函数设置环境变量，声明如下：&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;errno_t &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;_putenv_s&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; *varname,&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt; *value_string);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;varname：环境变量名称。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;value_string：要将环境变量设置为的值。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：如果成功，则返回 0；否则，返回错误代码。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;例如：&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;_putenv_s(&amp;quot;LANGUAGE&amp;quot;, &amp;quot;zh_CN.UTF-8&amp;quot;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.2、POSIX平台（Linux），&lt;span style=&quot;font-size: 16px;&quot;&gt;包含头文件&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 3.2.1、用getenv()函数获取环境变量，函数声明：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;char&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;getenv&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;(&lt;span class=&quot;hljs-function&quot; style=&quot;font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;const char&lt;/span&gt; *name)&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数：name -- 包含被请求变量名称的 C 字符串。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：一个以 null 结尾的字符串，该字符串为被请求环境变量的值。如果该环境变量不存在，则返回 NULL。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 3.2.2、用setenv()函数设置环境变量，函数声明：&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; box-sizing: inherit; outline-color: inherit; color: #0101FD; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;int &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;setenv&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;const char&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt; *name, &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;const char&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt; *value, &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;int &lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;overwrite)&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数：&lt;/span&gt;&lt;/p&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 style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;name：环境变量的名称；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;value：环境变量的值；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;overwrie：是否覆盖。0=不覆盖，非0值=覆盖&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0=成功，非0值表示失败，会设置errno&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3.2.3、用unsetenv()函数删除环境变量&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;int &lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #006881;&quot;&gt;unsetenv&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-size: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA; box-sizing: inherit; outline-color: inherit; color: #0101FD;&quot;&gt;const char&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt; *name)&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: #161616; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; white-space: pre; background-color: #FAFAFA;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;参数：name-&amp;gt;要删除的环境变量&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;返回值：同&lt;span style=&quot;font-size: 16px;&quot;&gt;setenv()函数&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=571&quot; target=&quot;_blank&quot;&gt;继续阅读《再谈gettext的工作原理》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 上位机/视觉 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=876&quot;&gt;gettext&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=571#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=571#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 15 Jun 2026 11:37:31 +0800</pubDate></item><item><title>使用gettext实现软件的多国语言支持</title><link>https://blog.founderchip.com/?id=570</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;gettext是GNU发布的多国语言工具包，是国际化(i18n)和本地化(l10n)的工具合集，便于管理软件中的文本翻译，使其支持多国语言。“i18n”&lt;span style=&quot;font-size: 16px;&quot;&gt;是英文&amp;quot;internationalization&amp;quot;的缩写，由于字母i和n之间有18个字符，因此简写为“i18n”，表示“国际化”的意思。另外还有“l10n”是&amp;quot;localization&amp;quot;的缩写，表示“本地化”；“g11n”是“globalization”的缩写，表示“全球化”；“m17n”是“multilingualization”的缩写，表示“多语言化”。&lt;span style=&quot;font-size: 16px;&quot;&gt;今天这篇文章，介绍下gettext的使用（包括Windows和Linux两个平台）。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614125710178141303011797.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一、gettext软件包的获取&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1.Windows平台&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1.1、手动获取&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;下载路径：&lt;a href=&quot;https://mlocati.github.io/articles/gettext-iconv-windows.html&quot; _src=&quot;https://mlocati.github.io/articles/gettext-iconv-windows.html&quot;&gt;https://mlocati.github.io/articles/gettext-iconv-windows.html&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;选择你的操作系统的位数、要下载的版本类型及文件类型。版本类型包括：动态库（shared）和静态库（static）两种，文件类型包括：安装版，非安装版及开发包。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;我下载的是动态库的非安装版，当然要在程序中调用其函数的话还需要下载开发包。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614093808_26456.png&quot; title=&quot;download.png&quot; alt=&quot;download.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;如果下载的安装版，直接单击运行安装即可。如果是非安装版，则将其解压到某个目录，比如C:\gettext下，然后全局环境变量Path中添加该路径(bin文件夹），如下图所示：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614093808_18133.png&quot; title=&quot;env-variables.png&quot; alt=&quot;env-variables.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1.2、使用MSYS2自动获取&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;如果你使用了MSYS2，可以通过包管理器自动获取，命令如下：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;pacman -S gettext&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、Linux平台获取&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;以Ubnutu系统为例，输入如下命令：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;sudo apt-get update&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;sudo apt-get install gettext&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;二、gettext的工具简介&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、xgettext&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;从源代码中提取标记的可翻译字符串，生成.pot文件。&amp;quot;pot&amp;quot;是&amp;quot;portable object template&amp;quot;的缩写，即“便携对象模版”，是用于多国语言翻译的模版。其基本语法为：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;&amp;nbsp;xgettext -o &amp;lt;输出文件&amp;gt;&amp;nbsp; --from-code=&amp;lt;编码&amp;gt;&amp;nbsp; --keyword=&amp;lt;关键字&amp;gt;&amp;nbsp; &amp;lt;输入文件&amp;gt;&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;xgettext -o&amp;nbsp; ./locale/fltk_i18n.pot&amp;nbsp; ../src/main.cpp --from-code=UTF-8&amp;nbsp; --keyword=_&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、msginit&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; 将便携对象模版文件(.pot)转换为特定语言的便携对象文本(.po)文件。&amp;quot;po&amp;quot;是&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;quot;portable object&amp;quot;的缩写，它其实是文本文件。其基本语法为：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msginit -i &amp;lt;输入文件&amp;gt; -o &amp;lt;输出文件&amp;gt; -l &amp;lt;目标语系[.编码]&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;其中：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;输入文件是.pot的模版文件，如果没有指明，则在当前文件夹下查找。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;输出文件是.po的文件；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;目标语系是LL_CC的格式，比如：中文简体 zh_CN，中文繁体 zh_TW，美式英语 en_US，德语 de_DE。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;目标语系后面可以添加编码，比如：zh_CN.UTF-8&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msginit -i ./locale/fltk_i18n.pot -o ./locale/zh_CN/LC_MESSAGES/fltk_i18n.po -l zh_CN.UTF-8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、msgfmt&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;将翻译完成的便携对象文本文件(.po)编译成二进制的语言文件(.mo)，便于程序读取。其基本语法为：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msgfmt -o &amp;lt;输出文件&amp;gt;&amp;nbsp; &amp;lt;输入文件&amp;gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;其中：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;输出文件：其路径格式遵循规则&amp;quot;locale/&lt;span style=&quot;font-size: 16px; background-color: #D99694;&quot;&gt;LL_CC&lt;/span&gt;/LC_MESSAGES/文件名.mo&amp;quot;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;LL_CC是语系的泛写，使用时应替换为具体语系。比如zh_CN 或zh_TW等。假设程序名为myapp.exe，则输出中文简体文件的路径为 “./locale/zh_CN/LC_MESSAGES/myapp.mo”。&amp;quot;LC&amp;quot;是“Local Category”的缩写，即“本地类别”；MESSAGES表示界面消息。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;输入文件是已经翻译完成的.po文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;文件结构一般如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;your_project/&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;└── locale/&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # ← bindtextdomain(domain, &amp;quot;这里&amp;quot;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; ├── en_US/&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp;└── LC_MESSAGES/&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # ← 固定名，大小写敏感&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└── myapp.po&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # ← 人工编辑&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└── myapp.mo&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# ← msgfmt 编译产物，程序真正加载&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; ├── zh_CN/&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp;└── LC_MESSAGES/&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└── myapp.po&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; │&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;└── myapp.mo&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp; &amp;nbsp; └── myapp.pot&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # 模板文件，放根目录，不属于任何语言&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msgfmt -o ./locale/zh_CN/LC_MESSAGES/fltk_i18n.mo ./locale/zh_CN/LC_MESSAGES/fltk_i18n.po&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4、msgunfmt&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;将二进制语言文件(.mo)转换为便携对象文本文件(.po)，可用于查看二进制语言文件是否被损坏。其基本语法为：&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msgunfmt&amp;nbsp; &amp;lt;输入文件&amp;gt;&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;例如：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;&amp;nbsp;msgunfmt ./locale/zh_CN/LC_MESSAGES/myapp.mo&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;5、msgmerge&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;将旧的便携对象文本文件(.po)与新模版(.pot)合并，保留已有翻译的同时标记新增、修改或删除的条目，其基本语法为：&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msgmerge --update old.po new_template.pot&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;上述命令会直接覆盖老的翻译文件。如果想生成新的，可以使用：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;msgmerge old.po new_template.pot&amp;nbsp; new.po&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;三、实现步骤&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、头文件与宏定义&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;需要包含头文件&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;#include &amp;lt;libintl.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;#include &amp;lt;locale.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;为了方便调用gettext，定义宏&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;#define _(str)&amp;nbsp; gettext(str)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、添加必要代码：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;setlocale(LC_ALL, &amp;quot;&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;bindtextdomain(&amp;quot;myapp&amp;quot;, &amp;quot;./locale&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;textdomain(&amp;quot;myapp&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.1、setlocale()函数：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;C 标准库 &amp;lt;locale.h&amp;gt; 中的一个函数，用于设置或查询程序的本地化信息。它允许程序员指定用于字符分类、字符转换、货币格式、日期和时间格式、数字格式等的区域设置。&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;#include &amp;lt;locale.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;char *setlocale(int category, const char *locale);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;参数：&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;category：指定要设置或查询的本地化类别。可以是以下宏之一：&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_ALL：设置或查询所有本地化类别。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_COLLATE：设置或查询字符串比较的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_CTYPE：设置或查询字符处理的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_MONETARY：设置或查询货币格式的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_NUMERIC：设置或查询数字格式的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;LC_TIME：设置或查询时间格式的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;locale：指定要设置的本地化信息。可以是以下之一：&lt;/p&gt;&lt;ul style=&quot;list-style-type: square;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;quot;&amp;quot;：设置为用户环境变量中的默认设置。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;NULL：查询当前的本地化信息。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;具体的区域设置名称：如 &amp;quot;en_US.UTF-8&amp;quot;，用于设置特定的区域设置。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;返回值&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;如果 locale 为 NULL，返回一个指向当前区域设置信息字符串的指针。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;如果 locale 非 NULL 并且成功设置，返回一个指向该区域设置信息字符串的指针。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;如果 locale 非 NULL 并且设置失败，返回 NULL。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;参考：https://www.runoob.com/cprogramming/c-function-setlocale.html&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.2、bindtextdomain()函数&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #8DB3E2; font-size: 16px;&quot;&gt;#include &amp;lt;libintl.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #8DB3E2; font-size: 16px;&quot;&gt;char * bindtextdomain (const char * domainname, const char * dirname);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: #8DB3E2; font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该函数用于设置包含指定消息域（message domain）消息目录的目录层级的根目录。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一个消息域是一组可翻译的msgid消息集合。通常，每个软件包都拥有自己的消息域。之所以需要调用 bindtextdomain是因为软件包的安装前缀并不总是与 &amp;lt;libintl.h&amp;gt;头文件及 libc/libintl库的安装前缀相同。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;消息目录的预期路径为：dirname/locale/category/domainname.mo，其中 locale是区域设置名称，category是区域设置的某个类别（如 LC_MESSAGES）。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;domainname必须是一个非空字符串。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若 dirname不为 NULL，则属于domainname域的消息目录根目录将被设置为dirname。该函数会在需要时复制传入的字符串。如果程序后续打算调用chdir函数，则务必确保dirname是一个绝对路径；否则无法保证能正确找到消息目录。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若dirname为NULL，则函数返回此前为domainname域设置的基目录。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 16px;&quot;&gt;返回值&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;成功时，bindtextdomain函数在可能更新后，返回domainname域当前的基目录。返回的字符串在下一次针对同一 domainname调用bindtextdomain之前均有效，且不得修改或释放。若发生内存分配失败，该函数会将errno设为 ENOMEM。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;参考：https://www.man7.org/linux/man-pages/man3/bindtextdomain.3.html&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.3、textdomain()函数&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;#include &amp;lt;libintl.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;char * textdomain (const char * domainname);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该函数用于设置或获取当前的消息域。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;一个消息域是一组可翻译的msgid消息集合。通常，每个软件包都拥有自己的消息域。域名用于确定查找翻译时所使用的消息目录；它必须是一个非空字符串。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当前消息域会被gettext、ngettext函数使用，同时也会被dgettext、dcgettext、dngettext和dcngettext函数在传入NULL作为 domainname参数时采用。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若domainname不为NULL，则将当前消息域设置为domainname。函数内部存储的是domainname参数的副本。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若domainname为NULL，则函数返回当前的消息域。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;返回值&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;成功时，textdomain函数在可能更新后，返回当前的消息域。返回的字符串在下一次调用 textdomain之前均有效，且不得修改或释放。若发生内存分配失败，该函数会将errno设为 ENOMEM并返回 NULL。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;参考：https://www.man7.org/linux/man-pages/man3/textdomain.3.html&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、在代码中标记需要翻译的字符串，用&amp;quot;_()&amp;quot;修饰。比如：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;printf(&amp;quot;%s\n&amp;quot;, _(&amp;quot;Hello World!&amp;quot;));&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4、使用xgettext工具从源代码中提取标记的字符串，生成便携对象模版文件(.pot)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;5、使用msginit工具将&lt;span style=&quot;font-size: 16px;&quot;&gt;便携对象模版文件(.pot)转换为特定语言的便携对象文本文件(.po)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;6、对特定语言的&lt;span style=&quot;font-size: 16px;&quot;&gt;便携对象文本文件&lt;/span&gt;进行翻译&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;7、使用msgfmt工具将翻译完成的&lt;span style=&quot;font-size: 16px;&quot;&gt;便携对象文本文件(.po)转换成二进制消息文件(.mo)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;8、编译程序的源代码&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;例如：&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;g++ -o fltk_i18n.exe ../src/main.cpp -lintl -lfltk&amp;nbsp; -L ../lib/lib/windows_release -I ../lib/include&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;四、示例及可能的问题&lt;/span&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;下面是一个简单的程序示例：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#include &amp;lt;locale.h&amp;gt; // 用于 setlocale&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#include &amp;lt;libintl.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#define _(str) gettext(str)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;#define FORCE_UTF8_BAIT()&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; do&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; {&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; volatile const char *__u = _(&amp;quot;ø&amp;quot;); \&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (void)__u;&amp;nbsp; &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;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; } while (0)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;int main()&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; // 设置本地信息&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; setlocale(LC_ALL, &amp;quot;&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; // 绑定域名&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; bindtextdomain(&amp;quot;myapp&amp;quot;, &amp;quot;./locale&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&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 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; textdomain(&amp;quot;myapp&amp;quot;);&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; // --- UTF-8 诱饵 ---&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; FORCE_UTF8_BAIT();&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; // --- 测试输出 ---&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; printf(&amp;quot;%s\n&amp;quot;, _(&amp;quot;Hello World!&amp;quot;));&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; return 0;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：&lt;br style=&quot;text-align: left;&quot;/&gt;宏定义&amp;nbsp;FORCE_UTF8_BAIT()是我在测试中发现如果源代码中没有非ASCII字符，则.pot .po等文件不能被设置为UTF-8编码格式。因此增加了一个不需要翻译的非ASCII码字符。后续可观察，若无该问题，则该宏不必要。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;另外我在Windows命令行试图打印中文字符，折腾了很久，发现Windows的命令行窗口默认不采用UTF-8编码，导致转换后的输出为乱码。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;为了使其支持中文，需要在控制面板-&amp;gt;区域中设置支持UTF-8，如下图：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614093808_29496.png&quot; title=&quot;Windows_region.png&quot; alt=&quot;Windows_region.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260614093808_95583.png&quot; title=&quot;Windows_region2.png&quot; alt=&quot;Windows_region2.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=570&quot; target=&quot;_blank&quot;&gt;继续阅读《使用gettext实现软件的多国语言支持》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 上位机/视觉 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=876&quot;&gt;gettext&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=877&quot;&gt;多语言软件&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=570#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=570#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 14 Jun 2026 09:17:42 +0800</pubDate></item><item><title>跨平台编译图形库FLTK(Windows下使用MinGW-w64)</title><link>https://blog.founderchip.com/?id=569</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;FLTK是基于C++语言开发的高效图形界面库，今天这篇文章，记录下如何在Windows下使用MinGW-W64来编译FLTK的源代码，生成相应的库文件。另外也对Ubuntu系统下的编译方法进行介绍。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/06/20260613113209178132152934440.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;首先去官网（&lt;/span&gt;&lt;a href=&quot;https://www.fltk.org/&quot; target=&quot;_self&quot; title=&quot;FLTK官网&quot; textvalue=&quot;www.fltk.org&quot; style=&quot;text-wrap-mode: wrap; font-size: 16px; text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;www.fltk.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;）下载最新的版本。以目前最新的1.4.4版本为例，下载“fltk-1.4.4-source.tar.bz2”到本地文件夹。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;对压缩包进行解压：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法①：使用7-Zip解压到“fltk-1.4.4-source.tar”，然后在命令行输入“&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;tar -xvf &lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap; background-color: #8DB3E2;&quot;&gt;fltk-1.4.4-source.tar&lt;/span&gt;&lt;/span&gt;”;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;方法②：如果已经安装了“Git for Windows ”或MSYS2或GnuWin32的bzip2，在命令行中直接使用命令“tar -xjvf fltk-1.4.4-source.tar.bz2”解压；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;解压完成后，在目录中新建两个文件夹“_build”和“_install”。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;进入“_build”文件夹，启动命令行，输入以下内容：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;cmake&amp;nbsp; .. -DCMAKE_BUILD_TYPE=Release&amp;nbsp; -DFLTK_BUILD_SHARED_LIBS=ON -DFLTK_BUILD_EXAMPLES=OFF -DFLTK_BUILD_TEST=OFF -DFLTK_USE_WINDOWS=ON -DFLTK_USE_PANGO=ON&amp;nbsp;&amp;nbsp;-G &amp;quot;MinGW Makefiles&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;①.. 表示&lt;span style=&quot;font-size: 16px;&quot;&gt;CMakeLists.txt位于上级目录；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;②&lt;/span&gt;CMAKE_BUILD_TYPE=Release：表示编译成发行版本，这样不包含调试信息，体积会变小；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;③&lt;/span&gt;FLTK_BUILD_SHARED_LIBS=ON：表示打开共享库的开关，编译结果会包括动态库；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;④&lt;/span&gt;FLTK_BUILD_EXAMPLES=OFF：表示不构建例程；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;⑤&lt;/span&gt;FLTK_BUILD_TEST=OFF：表示不构建测试程序；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;⑥&lt;/span&gt;FLTK_USE_WINDOWS=ON：表示使用Windows原生API（Windows下建议开启）；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;⑦&lt;/span&gt;FLTK_USE_PANGO=ON：Pango是跨平台的文本布局和渲染引擎，专门用于处理国际文本。在Ubuntu下中文可能显示乱码，打开此开关能让FLTK支持中文显示；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;⑧-G &amp;quot;MinGW Makefiles&amp;quot;&amp;nbsp; ：表示使用MinGW作为编译器（..表示CMakeLists.txt位于上级目录）；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;上述选项根据操作系统及编译目的进行删减，比如在Ubuntu下就不需要使用&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px; background-color: #8DB3E2;&quot;&gt;-G &amp;quot;MinGW Makefiles&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;配置完成后，输入命令&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap; background-color: #8DB3E2;&quot;&gt;make -j8&lt;/span&gt;编译源文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;编译完成后，输入命令：&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px; background-color: #8DB3E2;&quot;&gt;cmake --install .&amp;nbsp; --prefix “../_install”&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;会将编译生成的头文件、动态库等内容写到_install目录中。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;我在Ubuntu下编译时提示找不到文件&amp;lt;GL/gl.h&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;这是因为：FLTK启用了OpenGL，但系统里没有OpenGL的头文件，Ubuntu默认不安装OpenGL的开发包。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;解决方法：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;安装包：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;sudo apt-get update&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;sudo apt-get install libgl1-mesa-dev&amp;nbsp; libglu1-mesa-dev&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Ubuntu下FLTK可能还需要的其它支持包：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;sudo apt-get install libxft-dev \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;libx11-dev \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;libxext-dev \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;libxfixes-dev \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;libxrender-dev \&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #8DB3E2;&quot;&gt;libpango1.0-dev&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;其中：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;①libxft-d&lt;/span&gt;&lt;span style=&quot;background-color: #FFFFFF; font-size: 16px;&quot;&gt;ev&amp;nbsp; 是 X FreeType 字体渲染（FLTK 常用）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;②libx11-dev&amp;nbsp; 是 X11 核心库&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;③libxext-dev 是 X11 扩展&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;④libxfixes-dev 是 XFixes 扩展&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;⑤libxrender-dev 是 Render 扩展&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;⑥libpango1.0-dev 是 Pango 文本渲染（启用了 -DFLTK_USE_PANGO=on）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=569&quot; target=&quot;_blank&quot;&gt;继续阅读《跨平台编译图形库FLTK(Windows下使用MinGW-w64)》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 上位机/视觉 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=875&quot;&gt;FLTK&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=569#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=569#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 12 Apr 2026 19:42:15 +0800</pubDate></item><item><title>车辆以太网诊断协议连载(4)——路由激活请求与应答</title><link>https://blog.founderchip.com/?id=568</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;收到车辆信息后，测试仪尝试与车辆的DoIP网关通过TCP_DATA端口建立通信（测试仪为客户端）。成功建立通信后，测试仪发送路由激活请求指令，网关将对该指令进行应答。本文将详细介绍DoIP协议的路由激活请求与应答。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/02/20260226192220177210494062669.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、路由激活请求&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;测试仪通过TCP_DATA端口（13400）发送路由激活请求。以版本号0x03为例，报文格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #A5A5A5;&quot;&gt;0x03 0xFC 0x00 0x05 0x00 0x00 0x00 0x0B 0xXX ...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：0x0005是负载类型，0x0B是负载长度（11个字节），负载的格式如下表所示：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;名称&lt;br/&gt;&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;位置&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;长度&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;描述&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Source address&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;8&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;请求路由激活的实体&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;（测试仪）&lt;/span&gt;的逻辑地址&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Activation type&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;10&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活的类型&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Reserved&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;11&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ISO 13400协议保留（默认0）&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Reserved for VM-specific&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;15&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;为车辆制造商预留&lt;/span&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;测试仪的逻辑地址可向车辆制造商获取，一般从0x0E80开始；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;VM是“Vehicle Manufacture”的缩写，即“车辆制造商”；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活的类型见下面的表格：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;值&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;描述&lt;br/&gt;&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;请求动作&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;默认&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;无&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x01&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;法规要求的诊断通信 (例如 遵循 ISO 27145-1, ISO 20730-1 等标准)&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;无&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x02 ~ 0xDF&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ISO 13400协议保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xE0&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;中央安全 (通常指需要中央网关或安全模块处理的安全激活类型)&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆制造商定义&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xE1 ~ 0xFF&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;可供车辆制造商 (VM) 额外定义使用&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;车辆制造商定义&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、路由激活应答&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆的DoIP网关通过TCP_DATA端口（13400）发送路由应答。以版本号0x03为例，报文格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #A5A5A5;&quot;&gt;0x03 0xFC 0x00 0x06 0x00 0x00 0x00 0x11 0xXX ...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：0x0006是负载类型，0x11是负载长度（17个字节）。有的长度可能会是13字节或21字节，取决于车辆是否发送保留数据，参考下面表格介绍的负载格式：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;名称&lt;br/&gt;&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;位置&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;长度&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-top-color: rgb(221, 221, 221); word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;描述&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Logical address of DoIP client Entity&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;8&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活请求实体（测试仪）的逻辑地址&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;Logical address of DoIP Entity&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;10&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活应答实体（网关）的逻辑地址&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Routing activation response code&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;12&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活的应答码&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;reserved&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;13&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;ISO 13400协议保留（默认0）&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;reserved for VM-specific&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;17&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;为车辆制造商预留&lt;/span&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;width: 777.729px; text-wrap-mode: wrap;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;测试仪的逻辑地址可向车辆制造商获取，一般从0x0E80开始；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活应答码的含义如下面的表格所示：&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table width=&quot;803&quot;&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;border-color: rgb(221, 221, 221); word-break: break-all;&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;值&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-color: rgb(221, 221, 221); word-break: break-all;&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;描述&lt;br/&gt;&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;border-color: rgb(221, 221, 221); word-break: break-all;&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;请求动作&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：源地址未知&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x01&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：所有当前支持的TCP_DATA套接字均已注册并激活&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x02&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：收到的源地址或路由激活类型与已激活的TCP_DATA套接字上的连接表条目不符&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x03&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：该源地址已在另一个TCP_DATA套接字上注册并激活&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x04&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：缺少认证(missing authentication)&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，但将此连接注册为 [等待认证] 状态&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x05&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：原因是确认被拒绝（rejected confirmamtion）&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x06&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：不支持所请求的路由激活类型&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;不激活路由，关闭该套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x07&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：因为指定的激活类型需要使用安全的套接字&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;不激活路由，并关闭该（非安全）套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x08&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;拒绝：由于车辆处于关键状态&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;说明[1]&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x09 ~ 0x0F&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ISO 13400协议保留&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x10&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活成功&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;激活路由，并在该套接字上注册该源地址&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x11&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由已激活，但需要（车辆内部）确认&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;仅在收到来自车辆内部的确认后才激活路由&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x12&amp;nbsp;~&amp;nbsp;0xDF&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;ISO 13400协议保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xE0 ~ 0xFE&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆制造商预留（专用）&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;99&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xFF&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot; width=&quot;442&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;ISO 13400协议保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot; width=&quot;262&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;说明&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;[1]：&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当车辆处于关键状态收到路由激活请求消息时，DoIP实体应发送该响应码设。比如车辆正在进行不可中断的软件更新。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;好了，关于DoIP协议的路由激活请求及应答就先介绍到这里。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;本文参考文档：ISO 13400-2-2025 第12.5节&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;欢迎扫一扫微信小程序【李工谈工控】查看本站信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/zb_users/upload/2018/11/20181112195330154202361055645.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=568&quot; target=&quot;_blank&quot;&gt;继续阅读《车辆以太网诊断协议连载(4)——路由激活请求与应答》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 通信 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=869&quot;&gt;DoIP&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=874&quot;&gt;路由激活&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=568#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=568#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 24 Feb 2026 19:25:24 +0800</pubDate></item><item><title>车辆以太网诊断协议连载(3)——车辆识别请求及应答</title><link>https://blog.founderchip.com/?id=567</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆识别请求有三种负载类型：（通用）车辆识别请求、带实体识别码（EID）的车辆识别请求和&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;带车辆识别码（VIN）的车辆识别请求&lt;/span&gt;。&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/02/20260213163832_24256.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1、通用车辆识别请求&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;通用车辆识别请求&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;通过UDP_DISCOVER端口（13400）发送广播数据，所有收到该广播的车辆都将对其进行回应。该报文没有&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;负载，&lt;/span&gt;&lt;/span&gt;仅通过报文头发送数据。以版本号为0x03为例，报文格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #BFBFBF;&quot;&gt;0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&lt;/span&gt;&lt;/p&gt;&lt;p&gt;其中：0x0001是负载类型，后面跟着负载长度（当前负载长度为0）。关于报文结构的更多详细信息见本连载第（1）篇文章。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2、带实体识别码（EID）的车辆识别请求&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;EID是“entity identification”的缩写，表示“实体识别码”。所谓“实体”，是指DoIP网络中的通信单元，在其它网络中也被称为“节点”。实体识别码是唯一能够标识该实体的一串字符，比如其网卡的物理地址（MAC address）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该报文也通过&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;UDP_DISCOVER端口（13400）发送广播数据，实体收到请求后，与识别码相匹配的实体进行应答。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;该报文的负载类型为0x0002，负载长度为6。&lt;/span&gt;以版本号为0x03为例，报文格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #BFBFBF;&quot;&gt;0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x06&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xXX&amp;nbsp; &amp;nbsp;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xXX&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 14px;&quot;&gt;其中：0xXX ... 0xXX为实体识别码（长度为6字节）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3、带车辆识别码（VIN）的车辆识别请求&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;VIN是“Vehicle Identification Number”的缩写，表示“车辆识别码”，由17位字母和数字组成，包括：世界制造厂识别码、车辆特征码、车辆提示信息三部分 。&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1~3位是制造厂识别码。其中：第1位代表国家和地区，第2~3位代表厂商；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4~9位是车辆特征码。其中：第4~8位代表车辆的种类、系列、车身和发动机类型等信息，第9位是校验位；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;10~17位是车辆提示信息。包括生产年份（代码）、装配厂、独有系列号等等；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;带车辆识别码的车辆识别请求信息，是将车辆识别码作为负载发送到&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;UDP_DISCOVER端口（13400），与该识别码相匹配的车辆将进行应答。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;该报文的负载类型为0x0003，负载长度为17。以版本号为0x03为例，报文格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #BFBFBF;&quot;&gt;0x03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x03&amp;nbsp; &amp;nbsp; 0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x11&amp;nbsp; &amp;nbsp; 0xXX&amp;nbsp; &amp;nbsp;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0xXX&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;其中：0xXX ... 0xXX为车辆识别码（长度为17字节）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4、车辆识别应答/车辆广播&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;收到车辆识别请求后，与之匹配的车辆将进行应答。其负载类型为0x0004，负载的格式如下：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;名称&lt;br/&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;位置&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;长度&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;描述&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;VIN&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;8&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;17&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆识别码&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Logical Address&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;25&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP应答实体的逻辑地址&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;EID&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;27&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;6&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;实体识别码&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;GID&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;33&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;6&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;组识别码&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;Further action required&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;39&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;下一步动作要求&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;VIN/GID sync. status&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;40&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆识别码/组识别码的同步状态&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：位置从字节8开始，是因为字节0~7为报文头；&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;“&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;下一步动作要求&lt;/span&gt;”的取值如下表所示：&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;值&lt;/th&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;描述&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;没有进一步的要求&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x01~0x0F&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x10&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活需要初始化安全策略&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x11~0xFF&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留给制造厂商&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;“&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;车辆识别码/组识别&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap;&quot;&gt;码的同步状态&lt;/span&gt;”的取值如下：&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;值&lt;/th&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;描述&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;车辆识别码/组识别码已经同步&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x01~0x0F&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x10&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;车辆识别码/组识别码同步未完成&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x11~0xFF&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;好了，关于车辆识别的请求及应答就先介绍到这里。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;本文参考文档：ISO 13400-2-2025 第7.4节&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;欢迎扫一扫微信小程序【李工谈工控】查看本站信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/zb_users/upload/2018/11/20181112195330154202361055645.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=567&quot; target=&quot;_blank&quot;&gt;继续阅读《车辆以太网诊断协议连载(3)——车辆识别请求及应答》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 通信 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=872&quot;&gt;车辆识别请求及应答&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=873&quot;&gt;DOIP&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=567#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=567#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 11 Feb 2026 09:40:56 +0800</pubDate></item><item><title>车辆以太网诊断协议连载(2)——通用报文头负响应</title><link>https://blog.founderchip.com/?id=566</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当接收到的DoIP报文格式错误或者负载类型不支持时，接收方应发送“&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;通用报文头负响应报文&lt;/span&gt;”。&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/01/20260130194935_88121.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;“&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;通用报文头负响应报文&lt;/span&gt;”由报文头（8字节）+负响应码（1字节）组成，其负载类型的取值为0x0000（更多信息见上一篇文章）。以协议版本号为0x03为例，其报文格式为：&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: #A5A5A5;&quot;&gt;0x03 0xFC 0x00 0x00 0x00 0x00 0x00 0x01 0xXX&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中0xXX为负响应码，其取值及含义如下面的表格所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;取值&lt;br/&gt;&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;描述&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;动作&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;格式不正确&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;关闭套接字&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x01&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;未知的负载类型&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;丢弃报文&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x02&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;报文过长&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;丢弃报文&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x03&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;内存溢出&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;丢弃报文&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x04&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;负载长度无效&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;253&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;text-wrap-mode: wrap; font-size: 16px;&quot;&gt;丢弃报文&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x05 ~ 0xFF&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;解释如下：&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: decimal;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若接收到的报文不符合DoIP报文头的规范（比如“协议版本号”与“版本号取反”不匹配），或DoIP服务器不支持该版本，则应发送一条“通用报文头负响应”报文，并将否定码设置为0x00；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若接收到的报文的负载类型不被支持，则DoIP实体应发送一条“通用报文头负响应”报文，并将否定码设置为0x01；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若接收到的报文的负载长度超过了当前DoIP实体所支持的最大值，无论当前内存使用情况如何，均应发送一条“通用报文头负响应”报文，并将否定码设置为0x02；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若接收到的报文的负载长度超过了当前DoIP 实体可用的内存，则应发送一条“通用报文头负响应”报文，并将否定码设置为0x03；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;若接收到的报文的负载长度与特定负载类型所期望的长度不匹配，则 DoIP 实体应发送一条“通用报文头负响应”报文，并将否定码设置为0x04。这包括针对特定负载类型的最小长度、固定长度和最大长度的检查；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;当DoIP实体作为服务器运行并通过UDP接收到负载类型为0x0000或0x0004的DoIP消息时，应丢弃该消息且不发送“通用报文头负响应”报文；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;欢迎扫一扫微信小程序【李工谈工控】查看本站信息：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-wrap-mode: wrap;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/zb_users/upload/2018/11/20181112195330154202361055645.png&quot;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=566&quot; target=&quot;_blank&quot;&gt;继续阅读《车辆以太网诊断协议连载(2)——通用报文头负响应》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 通信 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=869&quot;&gt;DoIP&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=870&quot;&gt;UDS&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=871&quot;&gt;车辆诊断&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=566#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=566#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 30 Jan 2026 19:28:25 +0800</pubDate></item><item><title>车辆以太网诊断协议连载(1)——报文结构</title><link>https://blog.founderchip.com/?id=565</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;随着汽车新功能（辅助驾驶、信息娱乐、软件更新、远程诊断等）的出现，其内部电子系统需要传输的数据量日益增多，以往基于CAN/CANFD网络的诊断协议逐渐不能满足要求，于是基于以太网的诊断协议便应运而生了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/01/20260127190645176951200543503.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆以太网诊断协议，英文名称“Diagnostic over Internet Protocol”，简称“DoIP”。2011年，国际标准化组织首次发布了ISO 13400-1:2011国际标准，其中明确了DoIP的概念、应用场景。2012年发布了ISO 13400-2:2012，详细规定了传输层、网络层的服务，以及DoIP报文的具体格式。2019年发布了ISO 13400-2:2019，对之前的协议进行改进，提升了稳定性。2025年发布了ISO 13400-2:2025，本文基于该版本进行介绍。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP协议在开放互联参考模型（OSI）中的位置如下图所示（与传统协议进行对比）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2026/01/20260127074508_33996.png&quot; title=&quot;OSI参考模型.png&quot; alt=&quot;OSI参考模型.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;简单理解：DoIP协议的物理层和数据链路层依赖于百兆以太网，位于传输层TCP/UDP协议之上，同时又位于应用层协议（比如UDS）之下。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP协议的报文由报文头和负载两部分组成。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;报文头长度固定为8字节，包括：协议版本号、版本号取反、负载类型和负载长度，如下面的表格所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;名称&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;长度（字节数）&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;协议版本号&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;版本号取反&lt;br/&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;负载类型&lt;/span&gt;&lt;/td&gt;&lt;td width=&quot;389&quot; valign=&quot;top&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;负载长度&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;1.协议版本号：长度1字节，取值范围包括：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x00（ISO 13400-1:2011）；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x02（ISO 13400-2:2012）；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x03（ISO 13400-2:2012）；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x04（ISO 13400-2:2025）；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x05~0xFE（保留）；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;2.协议版本号取反：协议版本号按位取反（长度1字节）。与协议版本号配合使用，作为协议验证模式，以确保接收到格式正确的DoIP报文；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;3.负载类型：长度2字节，取值范围：0x0000~0xFFFF（下文详述）。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;4.负载长度：长度4字节，取值范围：0~4 294 967 295。（四字节无符号数的表达范围，2的32次方）。负载长度的单位为字节。有些报文不需要负载，因此长度可以为0；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP协议对负载类型进行了定义与归类，如下面的表格所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;取值&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;名称&lt;/span&gt;&lt;/th&gt;&lt;th style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;协议&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0000&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;通用报文头负响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;generic DoIP header negative acknowledge&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_TEST_EQUIPMENT_REQUEST&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0001&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆识别请求消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;vehicle identification request message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0002&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;带EID的车辆识别请求消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;vehicle identification request message with EID&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0003&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;带VIN的车辆识别请求消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;vehicle identification request message with VIN&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0004&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆声明消息/车辆识别应答消息&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;vehicle announcement message/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;vehicle identification response message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_TEST_EQUIPMENT_REQUEST&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0005&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活请求&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;routing activation request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0006&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;路由激活应答&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;routing activation response&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0007&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆保活请求alive check request&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0008&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;车辆保活应答alive check response&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x0009&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4000&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4001&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP实体状态请求&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP entity status request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4002&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP实体状态应答&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DoIP entity status response&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_TEST_EQUIPMENT_REQUEST&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4003&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;诊断电源模式信息请求&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;diagnostic power mode information request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_DISCOVER&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4004&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;诊断电源模式信息应答&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;diagnostic power mode information response&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;UDP_TEST_EQUIPMENT_REQUEST&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x4005&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8000&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8001&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;诊断消息diagnostic message&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8002&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;诊断消息正响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;diagnostic message positive acknowledgement&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8003&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;诊断消息负响应&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;diagnostic message negative acknowledgement&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8004&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;周期性诊断消息&lt;/span&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;periodic diagnostic message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8005&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x8FFF&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x9000&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x9001&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;DOIP网关连接的子网传输协议负载消息结构&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;TCP_DATA&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x9002&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0x9FFF&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;保留&lt;/span&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xF000&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;~&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;0xFFFF&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;word-break: break-all; border-color: rgb(221, 221, 221);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;为制造商保留&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;reserved for manufacture-specific use&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(221, 221, 221);&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;其中，缩略词：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;EID：&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;entity identification（实体识别码）&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;VIN：vehicle identification number（车辆识别码）&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;负载的内容根据类型不同而有所不同，将在后面的文章中陆续介绍。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;好了，关于DoIP的报文结构就先介绍到这里。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;欢迎通过微信小程序【李工谈工控】查看本站信息：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/zb_users/upload/2018/11/20181112195330154202361055645.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=565&quot; target=&quot;_blank&quot;&gt;继续阅读《车辆以太网诊断协议连载(1)——报文结构》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 通信 | Tags: &lt;a href=&quot;https://blog.founderchip.com/?tags=869&quot;&gt;DoIP&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=870&quot;&gt;UDS&lt;/a&gt;，&lt;a href=&quot;https://blog.founderchip.com/?tags=871&quot;&gt;车辆诊断&lt;/a&gt;， | &lt;a href=&quot;https://blog.founderchip.com/?id=565#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=565#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 27 Jan 2026 07:41:41 +0800</pubDate></item><item><title>汇川中型PLC(AM521)ST语言编程及下载示例</title><link>https://blog.founderchip.com/?id=564</link><description>&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;今天这篇文章给大家介绍下汇川中型PLC使用结构化文本语言（ST）编写程序及下载示例。例程使用的控制器为AM521-0808TN，写一个测试数字量输出的跑马灯程序。&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_78633.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;打开InoProShop，新建工程，设备选择“AM521-0808TP/TN”，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_26661.png&quot; title=&quot;新建工程.png&quot; alt=&quot;新建工程.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;在设备树的【PLC逻辑】-&amp;gt;【应用（Application）】单击右键，在弹出的对话框中选择“添加程序组织单元”。填写名称“testDQs”，选择类型为“功能块”，实现语言为“结构化文本”，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_11137.png&quot; title=&quot;testDQs.png&quot; alt=&quot;testDQs.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;在testDQs中编写代码如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_79285.png&quot; title=&quot;testDQs2.png&quot; alt=&quot;testDQs2.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;该功能块使用一个延时接通定时器，控制字节变量（_tmpBytes）的位依次输出。输入参数为定时器的时间间隔，输出参数为要控制的字节变量。&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;在主程序（PLC_PRG）中实例化功能块testDQs为testLocalDQs，并定义本地变量_localDQs，调用实例化的功能块，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_51643.png&quot; title=&quot;主程序调用.PNG&quot; alt=&quot;主程序调用.PNG&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;将变量_localDQs映射到模块的本地输出，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_19029.png&quot; title=&quot;本地IO映射.PNG&quot; alt=&quot;本地IO映射.PNG&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;编译程序。&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;点击【在线】-【登录到】（或工具栏快捷按钮）登录到设备，首次登录时会查找设备，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_34355.png&quot; title=&quot;连接控制器1.png&quot; alt=&quot;连接控制器1.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_99086.png&quot; title=&quot;连接控制器2.png&quot; alt=&quot;连接控制器2.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;登录后自动下载程。单击工具栏【启动】按钮运行程序，能实现需要的跑马灯效果，如下图所示：&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/12/20251204152748_89078.png&quot; title=&quot;执行程序.png&quot; alt=&quot;执行程序.png&quot;/&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;span style=&quot;word-wrap:break-word;font-size: 16px;&quot;&gt;好了，关于汇川中型PLC（AM521）的ST语言编程及下载示例就先介绍到这里。&lt;/span&gt;
&lt;/p&gt;
&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;
    &lt;span style=&quot;font-size: 16px;&quot;&gt;下面是汇川中型PLC结构化文本语言编程的文章归档链接：&lt;/span&gt;
&lt;/p&gt;
&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;
    &lt;a href=&quot;https://blog.founderchip.com/?id=562&quot; target=&quot;_blank&quot; title=&quot;汇川AM系列控制器结构化文本语言编程&quot; textvalue=&quot;》》汇川AM系列控制器结构化文本语言编程《《&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;》》汇川AM系列控制器结构化文本语言编程《《&lt;/span&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;
    &lt;span style=&quot;font-size: 16px;&quot;&gt;我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件，比较详细的介绍了SCL语言的编程，感兴趣的话可以扫描下面的二维码查看：&lt;/span&gt;
&lt;/p&gt;
&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;
    &lt;img class=&quot;ue-image&quot; src=&quot;https://blog.founderchip.com/mybooks/s7_1200_1500_scl/pic/buy_it.png&quot;/&gt;
&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=564&quot; target=&quot;_blank&quot;&gt;继续阅读《汇川中型PLC(AM521)ST语言编程及下载示例》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: PLC/HMI | Tags:  | &lt;a href=&quot;https://blog.founderchip.com/?id=564#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=564#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 04 Dec 2025 15:26:03 +0800</pubDate></item><item><title>树莓派下安装网络服务器</title><link>https://blog.founderchip.com/?id=563</link><description>&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;今天这篇文章介绍下如何在树莓派下安装Nginx网络服务器。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/11/20251118062405_52526.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;启动树莓派进入命令行界面，如果你长时间没有更新本地软件列表信息，可以输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo apt-get update&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word; &quot;&gt;列表信息更新后，如果你想对软件进行更新，可以输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo apt-get upgrade&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果你不需要更新软件，直接输入以下命令安装Nginx服务器软件：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo apt-get install nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;安装完成后，输入以下命令（查看版本号）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;nginx -v&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果出现类似下面语句（版本可能不同）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;nginx version: nginx/1.14.2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;说明Nginx网络服务器已经安装成功。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;此时用网线将电脑与树莓派相连接（设置二者的网络地址在同一子网），在浏览器中输入树莓派的网络地址（比如：192.168.0.81），应该会看到下面的欢迎界面：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/11/20251118062406_59025.png&quot; title=&quot;nginx_welcome.png&quot; alt=&quot;nginx_welcome.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;到这里，已经成功把树莓派改造成一台网络服务器了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果你的系统安装了简易防火墙（UFW,Uncomplicated Firewall），可以输入以下命令列出可用的应用配置文件：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo ufw app list&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;比如Ubuntu系统下可能会列出：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx Full&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx HTTP&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx HTTPS&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;OpenSSH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;其中：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx Full：启用这个配置文件会同时打开80端口和443端口；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx HTTP：启用这个配置文件只会打开80端口；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;Nginx HTTPS：启用这个配置文件只会打开443端口；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;OpenSSH：启用这个配置文件会允许SSH服务；&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果要启用某个配置，比如Ngnix Full，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo ufw allow &amp;#39;Nginx Full&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果只允许HTTPS协议，则输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo ufw allow &amp;#39;Nginx HTTPS&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo ufw delete allow &amp;#39;Nginx Full&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;检验简易防火墙的规则是否已经生效，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo ufw status&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;更多关于简易防火墙的命令，请参考：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=546&quot; target=&quot;_blank&quot; title=&quot;Linux应用开发之Ubuntu的UFW防火墙配置&quot;&gt;Linux应用开发之Ubuntu的UFW防火墙配置&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果想手动停止Nginx服务器，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl stop nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;再次启动输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl start nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;重启服务器，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl restart nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;如果只是修改了配置文件，Nginx支持无缝加载配置文件，而不必中断现有连接。输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl reload nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;一般情况下，Nginx开机会自动运行。如果想禁止开机自动运行，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl disable nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;启用开机自动运行，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl enable nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;查看Nginx服务的状态，输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;sudo systemctl status nginx&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;看到Acitve(Running)字样，说明服务正常运行，如下图所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/11/20251118062406_41091.png&quot; title=&quot;nginx_status.png&quot; alt=&quot;nginx_status.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;word-wrap:break-word;&quot;&gt;好了，关于树莓派下安装Nginx网络服务器就先介绍到这里。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=563&quot; target=&quot;_blank&quot;&gt;继续阅读《树莓派下安装网络服务器》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 嵌入式 | Tags:  | &lt;a href=&quot;https://blog.founderchip.com/?id=563#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=563#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 18 Nov 2025 06:19:26 +0800</pubDate></item><item><title>汇川AM系列控制器结构化文本编程文章归档</title><link>https://blog.founderchip.com/?id=562</link><description>&lt;blockquote style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;创建【归档】类的目的是把相关的文章放到一起，方便大家系统性的学习。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2025/11/20251110195655176277581579757.png&quot; title=&quot;cover.png&quot; alt=&quot;cover.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;本文是关于【汇川AM系列控制器结构化文本编程】相关文章的归档，包括如下内容：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=257&quot; target=&quot;_blank&quot; title=&quot;从WiringPi入手学树莓派编程（1）-简介&quot; style=&quot;font-size: 16px; text-decoration-line: none;&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=564&quot; target=&quot;_blank&quot; title=&quot;汇川中型PLC(AM521)ST语言编程及下载示例&quot; textvalue=&quot;汇川中型PLC(AM521)ST语言编程及下载示例&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;汇川中型PLC(AM521)ST语言编程及下载示例&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=558&quot; target=&quot;_blank&quot; title=&quot;复杂数据类型(3)——基于汇川AM系列控制器的结构化文本语言编程&quot; textvalue=&quot;复杂数据类型(3)——基于汇川AM系列控制器的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;复杂数据类型(3)——基于汇川AM系列控制器的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=557&quot; target=&quot;_blank&quot; title=&quot;复杂数据类型(2)——基于汇川AM系列PLC的结构化文本语言编程&quot; textvalue=&quot;复杂数据类型(2)——基于汇川AM系列PLC的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;复杂数据类型(2)——基于汇川AM系列PLC的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=556&quot; target=&quot;_blank&quot; title=&quot;复杂数据类型(1)——基于汇川AM系列控制器的结构化文本语言编程&quot; textvalue=&quot;复杂数据类型(1)——基于汇川AM系列控制器的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;复杂数据类型(1)——基于汇川AM系列控制器的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=555&quot; target=&quot;_blank&quot; title=&quot;栈(Stack)指令——基于汇川AM系列控制器的结构化文本语言编程&quot; textvalue=&quot;栈(Stack)指令——基于汇川AM系列控制器的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;栈(Stack)指令——基于汇川AM系列控制器的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=554&quot; target=&quot;_blank&quot; title=&quot;队列(FIFO)指令——基于汇川AM系列控制器的结构化文本语言编程&quot; textvalue=&quot;队列(FIFO)指令——基于汇川AM系列控制器的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;队列(FIFO)指令——基于汇川AM系列控制器的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=553&quot; target=&quot;_blank&quot; title=&quot;产生随机数的算法—基于汇川AM系列控制器的结构化文本语言编程&quot; textvalue=&quot;产生随机数的算法—基于汇川AM系列控制器的结构化文本语言编程&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;产生随机数的算法—基于汇川AM系列控制器的结构化文本语言编程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=545&quot; target=&quot;_blank&quot; title=&quot;汇川AM系列中型PLC的ST语言编程示例&quot; textvalue=&quot;汇川AM系列中型PLC的ST语言编程示例&quot; style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;&lt;span style=&quot;font-size: 16px; text-decoration: none;&quot;&gt;汇川AM系列中型PLC的ST语言编程示例&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;您还可以扫描下方的二维码关注我们的微信公众号或者小程序【李工谈工控】。&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-wrap-mode: wrap;&quot;&gt;&lt;img src=&quot;https://blog.founderchip.com/zb_users/upload/2017/03/20170312214213148932613392377.png&quot; title=&quot;founderchip.png&quot; alt=&quot;founderchip.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Copyright@北岛李工 founderchip 2016~Now&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=562&quot; target=&quot;_blank&quot;&gt;继续阅读《汇川AM系列控制器结构化文本编程文章归档》的全文内容...&lt;/a&gt;&lt;/p&gt;&lt;p&gt;分类: 归档 | Tags:  | &lt;a href=&quot;https://blog.founderchip.com/?id=562#comment&quot; target=&quot;_blank&quot;&gt;添加评论&lt;/a&gt;(0)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blog.founderchip.com/?id=562#comment&quot; target=&quot;_blank&quot;&gt;还没有评论，您来说两句？&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 10 Nov 2025 19:44:37 +0800</pubDate></item></channel></rss><!--8.38 ms , 7 queries , 1132kb memory , 0 error-->