Files
UKSI_TEST/AllLibs/Modbus/Doc/html/modbus__master_8c_source.html
2025-12-16 17:57:59 +03:00

957 lines
161 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Modbus: E:/.WORK/STM32/Diod_Test/diode_tester/Core/Modbus/Src/modbus_master.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js"></script>
<script type="text/javascript" src="darkmode_toggle.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">Modbus<span id="projectnumber">&#160;0.3</span>
</div>
<div id="projectbrief">Библиотека Modbus для STM</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('modbus__master_8c_source.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">modbus_master.c</div></div>
</div><!--header-->
<div class="contents">
<a href="modbus__master_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/** </span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">*******************************************************************************</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">* @file modbus_master.c</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">* @brief Модуль для реализации мастера MODBUS.</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">*******************************************************************************</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">* @details </span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">Файл содержит реализацию функций для работы Modbus в режиме мастера.</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"></span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">@section mast Функции и макросы</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">- MB_RespGet_RegisterAll() — Считать все регистра из ответа</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">- MB_RespGet_RegisterValue() — Считать один регистр из ответа</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">- MB_RespGet_CoilAll() — Считать все коилы из ответа</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">- MB_RespGet_CoilState() — Считать один коил из ответа</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">- MB_RespGet_NumberOfObjects() — Считать количество принятых объектов идентификатора</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">- MB_RespGet_ObjectById() — Считать объект идентификатора по </span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> его ID</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">- MB_RespGet_ObjectByIndex() — Считать объект идентификатора по </span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="comment"> порядковому номеру в сообщении</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">- MB_RespGet_Diagnostic() — Считать запрошенный диагностический счетчик</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment"></span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">- MB_Master_Collect_Message() — Сбор сообщения в режиме мастера</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="comment">- MB_Master_Parse_Message() — Парс сообщения в режиме мастера</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">******************************************************************************/</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &quot;<a class="code" href="modbus_8h.html">modbus.h</a>&quot;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#ifdef MODBUS_ENABLE_MASTER</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">//-----------------------------FOR USER------------------------------</span><span class="comment"></span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment">/**</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> * @brief Получить значение ВСЕХ регистров в ответе</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> * @param reg_addr Адрес регистра, значение которого нужно получить</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> * @param reg_arr Указатель для массив для сохранения значений регистров</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> * @return количество считанных регистров, 0 - ошибка</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00038" data-start="{" data-end="}">
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga86160c23899d6ece041e3680ba863019"> 38</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga86160c23899d6ece041e3680ba863019">MB_RespGet_RegisterAll</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint16_t *reg_arr)</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>{</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordflow">if</span>(modbus_msg == NULL || reg_arr == NULL)</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> read_cnt = 0;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> addr = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a>; addr &lt; modbus_msg-&gt;Addr + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>; addr++)</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga1f80317087624a23f84224c6f2c1d596">MB_RespGet_RegisterValue</a>(modbus_msg, addr, &amp;reg_arr[i]))</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> read_cnt++;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> i++;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> read_cnt;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}</div>
</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment"></span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment">/**</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> * @brief Получить значение регистра в ответе по его адресу</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * @param reg_addr Адрес регистра, значение которого нужно получить</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> * @param reg_value Указатель для значения регистра</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * @return 1 - успех, 0 - ошибка или reg_addr вне диапазона запроса</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00063" data-start="{" data-end="}">
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga1f80317087624a23f84224c6f2c1d596"> 63</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga1f80317087624a23f84224c6f2c1d596">MB_RespGet_RegisterValue</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint16_t reg_addr, uint16_t *reg_value)</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span>{</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">if</span>(modbus_msg == NULL || reg_value == NULL)</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// Проверяем что ответ связан с регистрами</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span>((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a438c348676901d3e0263fd1f8d94bf11">FC_R_DISC_IN</a>) &amp;&amp;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2ae03921b16750ef290fdd7d19a08a29a2">FC_R_HOLD_REGS</a>) &amp;&amp;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a76139e9b7ae78856fd3a297c9f751944">FC_R_IN_REGS</a>))</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// Проверяем что reg_addr в пределах запрошенного диапазона</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(reg_addr &lt; modbus_msg-&gt;Addr || reg_addr &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>)</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// Вычисляем индекс регистра в полученных данных</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> uint16_t reg_index = reg_addr - modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a>;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// Проверяем что регистр существует в данных</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span>(reg_index &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> / 2)</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// Получаем значение регистра</span></div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> *reg_value = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[reg_index];</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span>}</div>
</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span><span class="comment"></span> </div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment">/**</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"> * @brief Получить состояние ВСЕХ coil в ответе</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * @param coil_arr Указатель для массив доя сохранения состояний coil (1 - ON, 0 - OFF)</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * @return 1 - успех, 0 - ошибка или coil_addr вне диапазона запроса</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00101" data-start="{" data-end="}">
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga14750bad3976a9fcc6bdece1c800dbf5"> 101</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga14750bad3976a9fcc6bdece1c800dbf5">MB_RespGet_CoilAll</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, <span class="keywordtype">int</span> *coil_arr)</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>{</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(modbus_msg == NULL || coil_arr == NULL)</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> read_cnt = 0;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> addr = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a>; addr &lt; modbus_msg-&gt;Addr + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>; addr++)</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga643a0be1ccd587a6dfe544d9fd5ed018">MB_RespGet_CoilState</a>(modbus_msg, addr, &amp;coil_arr[i]))</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> {</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> read_cnt++;</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> i++;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> }</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span>}</div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="comment"></span> </div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span><span class="comment">/**</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="comment"> * @brief Получить состояние coil в ответе по его адресу</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span><span class="comment"> * @param coil_addr Адрес coil, состояние которого нужно получить</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment"> * @param coil_state Указатель для состояния coil (1 - ON, 0 - OFF)</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="comment"> * @return 1 - успех, 0 - ошибка или coil_addr вне диапазона запроса</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00127" data-start="{" data-end="}">
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga643a0be1ccd587a6dfe544d9fd5ed018"> 127</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga643a0be1ccd587a6dfe544d9fd5ed018">MB_RespGet_CoilState</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint16_t coil_addr, <span class="keywordtype">int</span> *coil_state)</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span>{</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span>(modbus_msg == NULL || coil_state == NULL)</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// Проверяем что ответ связан с коилами</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a399bcd53bc32faca81bbc3d1ff8b5bb6">FC_R_COILS</a>)</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="comment">// Проверяем что coil_addr в пределах запрошенного диапазона</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(coil_addr &lt; modbus_msg-&gt;Addr || coil_addr &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>)</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// Вычисляем индекс coil в полученных данных</span></div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> uint16_t coil_index = coil_addr - modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a>;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// Вычисляем байт и бит</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> uint8_t byte_index = coil_index / 8;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> uint8_t data_index = coil_index / 16;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> uint8_t bit_index = coil_index % 16;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// Проверяем что байт существует в данных</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span>(byte_index &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a>)</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// Получаем байт и проверяем бит </span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">if</span>(bit_index &lt; 8)</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> *coil_state = (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[data_index] &gt;&gt; (bit_index+8)) &amp; 0x01;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> *coil_state = ((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[data_index]&amp;0xFF) &gt;&gt; (bit_index-8)) &amp; 0x01;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span>}</div>
</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span><span class="comment"></span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="comment">/**</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment"> * @brief Получить количество объектов в сообщении</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span><span class="comment"> * @return int Количество объектов</span></div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00170" data-start="{" data-end="}">
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga16b90d4a74a249514161aa4576724d1c"> 170</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga16b90d4a74a249514161aa4576724d1c">MB_RespGet_NumberOfObjects</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg)</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span>{</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span>(modbus_msg == NULL)</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> }</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// Проверяем что ответ связан с диагностикой</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>)</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> {</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NumbOfObj;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span>}</div>
</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"></span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment">/**</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> * @brief Найти объект по ID в сообщении</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span><span class="comment"> * @param obj_id ID искомого объекта</span></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="comment"> * @param obj_data Буфер для данных объекта (может быть NULL)</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment"> * @param obj_length Указатель для длины объекта</span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span><span class="comment"> * @return int Найден ли объект (1 - да, 0 - нет)</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00193" data-start="{" data-end="}">
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga0dc4119c008af34d5997eab339c437be"> 193</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga0dc4119c008af34d5997eab339c437be">MB_RespGet_ObjectById</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint8_t obj_id, <span class="keywordtype">char</span> *obj_data, uint8_t *obj_length)</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span>{</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span>((modbus_msg == NULL) || (obj_data == NULL))</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// Проверяем что ответ связан с диагностикой</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>)</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> {</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> uint8_t *data = (uint8_t*)modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>;</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">unsigned</span> ind = 0;</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NumbOfObj; i++)</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> uint8_t current_id = data[ind++];</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> uint8_t current_length = data[ind++];</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span>(current_id == obj_id)</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(obj_length) </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> *obj_length = current_length;</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j = 0; j &lt; current_length; j++)</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> {</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> obj_data[j] = data[ind++];</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> obj_data[current_length] = <span class="charliteral">&#39;\0&#39;</span>; <span class="comment">// добавляем \0</span></div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> {</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// Пропускаем данные этого объекта</span></div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> ind += current_length;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> }</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> }</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span>}</div>
</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span><span class="comment"></span> </div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span><span class="comment">/**</span></div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="comment"> * @brief Получить объект по индексу в сообщении</span></div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span><span class="comment"> * @param index Индекс объекта (0..N-1)</span></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span><span class="comment"> * @param obj_id Указатель для ID объекта</span></div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="comment"> * @param obj_data Буфер для данных объекта</span></div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span><span class="comment"> * @param obj_length Указатель для длины объекта</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span><span class="comment"> * @return int Успешность получения (1 - получен, 0 - не найден)</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00244" data-start="{" data-end="}">
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga3fc5fc5abfe4f8767ccee5c11ea3d5d5"> 244</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga3fc5fc5abfe4f8767ccee5c11ea3d5d5">MB_RespGet_ObjectByIndex</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, <span class="keywordtype">int</span> index, uint8_t *obj_id, <span class="keywordtype">char</span> *obj_data, uint8_t *obj_length)</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span>{</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> <span class="keywordflow">if</span>((modbus_msg == NULL) || (obj_data == NULL))</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// Проверяем что ответ связан с диагностикой</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>)</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">if</span>(index &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NumbOfObj) </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> uint8_t *data = (uint8_t*)modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordtype">unsigned</span> ind = 0;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt;= index; i++)</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> {</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> uint8_t current_id = data[ind++];</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> uint8_t current_length = data[ind++];</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span>(obj_id)</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> *obj_id = current_id;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="keywordflow">if</span>(obj_length)</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> *obj_length = current_length;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keywordflow">if</span>(i == index)</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> {</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j = 0; j &lt; current_length; j++)</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> {</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> obj_data[j] = data[ind++];</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> }</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> obj_data[current_length] = <span class="charliteral">&#39;\0&#39;</span>; <span class="comment">// добавляем \0</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> }</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> {</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// Пропускаем данные этого объекта</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> ind += current_length;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> }</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>}</div>
</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span><span class="comment"></span> </div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="comment">/**</span></div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="comment"> * @brief Получить данные диагностики из сообщения (MbData[1])</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><span class="comment"> * @param data Указатель куда положить данные</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span><span class="comment"> * @return 1 - успех, 0 - ошибка</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00297" data-start="{" data-end="}">
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q___d_i_a_g___a_p_i.html#ga46a9650ec68832e6f95eda579f4d9ded"> 297</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q___d_i_a_g___a_p_i.html#ga46a9650ec68832e6f95eda579f4d9ded">MB_RespGet_Diagnostic</a>(<a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint16_t *data)</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span>{</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">if</span>(modbus_msg == NULL || data == NULL)</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// Проверяем что ответ связан с диагностикой</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> != <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a>)</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> {</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> }</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> *data = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[1];</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span>}</div>
</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> </div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span><span class="comment">//-------------------------------------------------------------------</span></div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span><span class="comment">//-----------------------------INTERNAL------------------------------</span><span class="comment"></span></div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span><span class="comment">/** </span></div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span><span class="comment"> * @brief Определить размер модбас запроса (МАСТЕР версия).</span></div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span><span class="comment"> * @param hRS Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span><span class="comment"> * @param rx_data_size Указатель на переменную для записи кол-ва байт для принятия.</span></div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span><span class="comment"> * @return RS_RES Статус о корректности рассчета кол-ва байт для принятия.</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment"> * @details Определение сколько байтов надо принять по протоколу.</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00326" data-start="{" data-end="}">
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"><a class="line" href="modbus__master_8c.html#a79e3f84b9daba8a42c8ca6026133acc5"> 326</a></span><span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code hl_function" href="modbus__master_8c.html#a79e3f84b9daba8a42c8ca6026133acc5">MB_Define_Size_of_Function</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hmodbus, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg)</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span>{ </div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> MB_RES = 0;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keywordtype">int</span> mb_func_size = 0;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="comment">// Master mode - calculating response size from slave</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="keywordflow">if</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> &amp; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a>) </div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> {</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="comment">// Error response: [Addr][Func|0x80][ExceptCode][CRC]</span></div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> mb_func_size = -1; <span class="comment">// Only Exception Code</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> }</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a>)</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> {</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="comment">// Diagnostics response: [SubFunc_HI][SubFunc_LO][Data_HI][Data_LO]</span></div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> mb_func_size = 1;</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> }</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>)</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// Device identifications: variable size, need to read first to determine</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> mb_func_size = 0; <span class="comment">// Will be determined after reading header</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> }</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">else</span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> {</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">switch</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> &amp; ~<a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a>)</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> {</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keywordflow">case</span> 0x01: <span class="comment">// Read Coils</span></div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">case</span> 0x02: <span class="comment">// Read Discrete Inputs</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordflow">case</span> 0x03: <span class="comment">// Read Holding Registers </span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keywordflow">case</span> 0x04: <span class="comment">// Read Input Registers</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="comment">// Response: [ByteCount][Data...]</span></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> mb_func_size = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> + 2; <span class="comment">// ByteCount + variable data</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keywordflow">case</span> 0x05: <span class="comment">// Write Single Coil</span></div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordflow">case</span> 0x06: <span class="comment">// Write Single Register</span></div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="comment">// Echo response: [Addr][Value][CRC]</span></div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> mb_func_size = 4; <span class="comment">// Address(2) + Value(2)</span></div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">case</span> 0x0F: <span class="comment">// Write Multiple Coils</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">case</span> 0x10: <span class="comment">// Write Multiple Registers</span></div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="comment">// Echo response: [Addr][Qty][CRC] </span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> mb_func_size = 4; <span class="comment">// Address(2) + Quantity(2)</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> mb_func_size = 0;</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> }</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> mb_func_size = <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga18eb6d0d9fdb6274341e892e2b41d88b">RX_FIRST_PART_SIZE</a> + mb_func_size; <span class="comment">// size of whole message</span></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <span class="keywordflow">return</span> mb_func_size;</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span>}</div>
</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span><span class="comment"></span> </div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span><span class="comment">/** </span></div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span><span class="comment"> * @brief Сбор сообщения в буфер UART в режиме мастер (фрейм мастера из msg -&gt; uart).</span></div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span><span class="comment"> * @param hmodbus Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span><span class="comment"> * @param modbus_uart_buff Указатель на буффер UART.</span></div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="comment"> * @return RS_RES Статус о результате заполнения буфера.</span></div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00388" data-start="{" data-end="}">
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga096d2790ab887eb815e17d8cd9ede125"> 388</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga096d2790ab887eb815e17d8cd9ede125">MB_Master_Collect_Message</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hmodbus, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint8_t *modbus_uart_buff)</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span>{</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordtype">int</span> ind = 0; <span class="comment">// ind for modbus-uart buffer</span></div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="comment">//------INFO ABOUT DATA/MESSAGE------</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> <span class="comment">//-----------[first bytes]-----------</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// set ID of slave device</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a277ed439b65aedbf03bd112c073e6a32">MbAddr</a>; </div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// set function code</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a>; </div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> </div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> &lt; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a>) <span class="comment">// if no error occur</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> {</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="comment">// fill modbus header</span></div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span>(0) {}</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span><span class="preprocessor">#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS</span></div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>) <span class="comment">// device identifications request</span></div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> {</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.<a class="code hl_variable" href="struct_m_b___dev_id_msg_type_def.html#aefb693da9f6b86a6da833c4177302092">MEI_Type</a>;</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.ReadDevId;</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NextObjId;</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> }</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_DEVICE_IDENTIFICATIONS</span></div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="preprocessor">#ifdef MODBUS_ENABLE_DIAGNOSTICS</span></div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a>)</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> {</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="comment">// Diagnostics: [SubFunc_HI][SubFunc_LO][Data_HI][Data_LO]</span></div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[0] &gt;&gt; 8; <span class="comment">// Sub-function HI</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[0] &amp; 0xFF; <span class="comment">// Sub-function LO</span></div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[1] &gt;&gt; 8; <span class="comment">// Data HI</span></div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[1] &amp; 0xFF; <span class="comment">// Data LO</span></div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> }</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_DIAGNOSTICS</span></div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">else</span> <span class="comment">// classic modbus request</span></div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> {</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="comment">// set address</span></div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> &gt;&gt; 8;</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> &amp; 0xFF;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> <span class="comment">// set quantity</span></div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> &gt;&gt; 8;</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> &amp; 0xFF;</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> </div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="comment">// for write multiple functions</span></div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keywordflow">if</span>((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x0F) || (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x10))</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> {</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> modbus_uart_buff[ind++] = modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a>;</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> </div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <span class="comment">// write data bytes</span></div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> uint8_t *tmp_data_addr = (uint8_t *)modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>;</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a>; i++)</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> {</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> modbus_uart_buff[ind++] = tmp_data_addr[i];</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> }</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> }</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> }</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> }</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">if</span>(ind &lt; 0)</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">return</span> RS_COLLECT_MSG_ERR;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> </div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="comment">//---------------CRC----------------</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="comment">//---------[last 2 bytes]----------</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a423ab838d4c113fd6392452fd44dc1c0">MbCRC</a> = CRC_VALUE;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> modbus_uart_buff[ind++] = CRC_VALUE &amp; 0xFF;</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> modbus_uart_buff[ind++] = CRC_VALUE &gt;&gt; 8;</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> </div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> hmodbus-&gt;<a class="code hl_variable" href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_Message_Size</a> = ind;</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span>}</div>
</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span><span class="comment"></span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span><span class="comment">/** </span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span><span class="comment"> * @brief Парс сообщения в режиме мастер (фрейм слейва из uart -&gt; msg).</span></div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span><span class="comment"> * @param hmodbus Указатель на хендлер RS.</span></div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span><span class="comment"> * @param modbus_msg Указатель на структуру сообщения.</span></div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span><span class="comment"> * @param modbus_uart_buff Указатель на буффер UART.</span></div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span><span class="comment"> * @return RS_RES Статус о результате заполнения структуры.</span></div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00469" data-start="{" data-end="}">
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga461e77fe31ce64c7ee5f1a932dc1183f"> 469</a></span><a class="code hl_enumeration" href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga461e77fe31ce64c7ee5f1a932dc1183f">MB_Master_Parse_Message</a>(<a class="code hl_struct" href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a> *hmodbus, <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> *modbus_msg, uint8_t *modbus_uart_buff)</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span>{</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> <span class="keywordtype">int</span> ind = 0; <span class="comment">// ind for modbus-uart buffer</span></div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keywordtype">int</span> expected_size = 0;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> </div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// get ID of slave device</span></div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a277ed439b65aedbf03bd112c073e6a32">MbAddr</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <span class="comment">// get function code (check if error response)</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> &amp; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a>) <span class="comment">// error response</span></div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> {</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> }</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> &lt; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a>) <span class="comment">// normal response</span></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> {</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keywordflow">if</span>(0) {}</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><span class="preprocessor">#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS</span></div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>) <span class="comment">// device identifications response</span></div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> {</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.<a class="code hl_variable" href="struct_m_b___dev_id_msg_type_def.html#aefb693da9f6b86a6da833c4177302092">MEI_Type</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.ReadDevId = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.<a class="code hl_variable" href="struct_m_b___dev_id_msg_type_def.html#a1ef4b6db2785f723b26b0d9abe6f371e">Conformity</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.MoreFollows = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NextObjId = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NumbOfObj = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> </div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> = 0;</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> </div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <span class="comment">// Парсинг объектов идентификации устройства</span></div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> uint8_t *tmp_data_addr = (uint8_t *)modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>;</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keywordtype">int</span> data_index = 0;</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> </div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> obj = 0; obj &lt; modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">DevId</a>.NumbOfObj; obj++)</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> {</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="comment">// Читаем ID объекта</span></div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> uint8_t object_id = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> tmp_data_addr[data_index++] = object_id;</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> </div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="comment">// Читаем длину объекта</span></div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> uint8_t object_length = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> tmp_data_addr[data_index++] = object_length;</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="comment">// Читаем данные объекта</span></div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; object_length; i++)</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> {</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> tmp_data_addr[data_index++] = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> }</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> </div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> += (2 + object_length); <span class="comment">// ID + длина + данные</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> }</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> }</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_DEVICE_IDENTIFICATIONS</span></div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span><span class="preprocessor">#ifdef MODBUS_ENABLE_DIAGNOSTICS</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a>)</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> {</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="comment">// Diagnostics response: [SubFunc_HI][SubFunc_LO][Data_HI][Data_LO]</span></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[0] = modbus_uart_buff[ind++] &lt;&lt; 8; </div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[0] |= modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[1] = modbus_uart_buff[ind++] &lt;&lt; 8; </div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[1] |= modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> }</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_DIAGNOSTICS</span></div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">else</span> <span class="comment">// classic modbus response</span></div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> {</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="comment">// get byte count for read functions</span></div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">if</span>((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x01) || (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x02) || </div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x03) || (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x04))</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> {</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// read data bytes</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> uint16_t *tmp_data_addr = (uint16_t *)modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>;</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a>; i++)</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> {</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keywordflow">if</span>(i % 2 == 0) <span class="comment">// HI byte</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> tmp_data_addr[i/2] = (uint16_t)modbus_uart_buff[ind++] &lt;&lt; 8;</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keywordflow">else</span> <span class="comment">// LO byte</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> tmp_data_addr[i/2] |= modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> }</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> }</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="comment">// for write functions - echo address and quantity</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x05) || (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x06) ||</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x0F) || (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">FuncCode</a> == 0x10))</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> {</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> = modbus_uart_buff[ind++] &lt;&lt; 8;</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a> |= modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> = modbus_uart_buff[ind++] &lt;&lt; 8;</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> |= modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> }</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> }</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> }</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> </div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> </div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="comment">//---------------CRC----------------</span></div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="comment">//----------[last 2 bytes]----------</span></div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> uint16_t CRC_VALUE = crc16(modbus_uart_buff, ind);</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a423ab838d4c113fd6392452fd44dc1c0">MbCRC</a> = modbus_uart_buff[ind++];</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a423ab838d4c113fd6392452fd44dc1c0">MbCRC</a> |= modbus_uart_buff[ind++] &lt;&lt; 8;</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> </div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a423ab838d4c113fd6392452fd44dc1c0">MbCRC</a> != CRC_VALUE)</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> {</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <a class="code hl_define" href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a>(hmodbus-&gt;rs_err);</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">return</span> RS_PARSE_MSG_ERR;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> } </div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">return</span> RS_OK;</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span>}</div>
</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> </div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> </div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> </div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span><span class="comment"></span> </div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span><span class="comment">/** @brief Сформировать запрос на чтение коилов */</span></div>
<div class="foldopen" id="foldopen00584" data-start="{" data-end="}">
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#gadb1b59bd6832b017b7ff4f5d694f59aa"> 584</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#gadb1b59bd6832b017b7ff4f5d694f59aa">MB_REQUEST_READ_COILS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span>{</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a399bcd53bc32faca81bbc3d1ff8b5bb6">FC_R_COILS</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span>}</div>
</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span><span class="comment"></span> </div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span><span class="comment">/** @brief Сформировать запрос на чтение дискретных регистров */</span></div>
<div class="foldopen" id="foldopen00591" data-start="{" data-end="}">
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga85028c4de63ca63cb04e332a3fdcd676"> 591</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga85028c4de63ca63cb04e332a3fdcd676">MB_REQUEST_READ_DISCRETE_INPUTS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span>{</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a438c348676901d3e0263fd1f8d94bf11">FC_R_DISC_IN</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span>}</div>
</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span><span class="comment"></span> </div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span><span class="comment">/** @brief Сформировать запрос на чтение холдинг регистров */</span></div>
<div class="foldopen" id="foldopen00598" data-start="{" data-end="}">
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga4a4798a15608f3aac04150115a628f8e"> 598</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga4a4798a15608f3aac04150115a628f8e">MB_REQUEST_READ_HOLDING_REGS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span>{</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2ae03921b16750ef290fdd7d19a08a29a2">FC_R_HOLD_REGS</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span>}</div>
</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span><span class="comment"></span> </div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span><span class="comment">/** @brief Сформировать запрос на чтение инпут регистров */</span></div>
<div class="foldopen" id="foldopen00605" data-start="{" data-end="}">
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga72f91a70586546171fe9190a4e0e5518"> 605</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga72f91a70586546171fe9190a4e0e5518">MB_REQUEST_READ_INPUT_REGS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span>{</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a76139e9b7ae78856fd3a297c9f751944">FC_R_IN_REGS</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span>}</div>
</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span><span class="comment"></span> </div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span><span class="comment">/** @brief Сформировать запрос на запись одного коила */</span></div>
<div class="foldopen" id="foldopen00612" data-start="{" data-end="}">
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga1ac5f38ac244039a63b2714044778ffc"> 612</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga1ac5f38ac244039a63b2714044778ffc">MB_REQUEST_WRITE_SINGLE_COIL</a>(uint8_t slave_addr, uint16_t coil_addr, uint8_t value)</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span>{</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a832b94af2c427d0daae721da2528f44a">FC_W_COIL</a>, {0}, coil_addr, (value ? 0xFF00 : 0x0000), 0, {0}, 0, 0};</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span>}</div>
</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span><span class="comment"></span> </div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span><span class="comment">/** @brief Сформировать запрос на запись одного регистра */</span></div>
<div class="foldopen" id="foldopen00619" data-start="{" data-end="}">
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga0126cfaf44c73d84d521b16c0f6ab7b6"> 619</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga0126cfaf44c73d84d521b16c0f6ab7b6">MB_REQUEST_WRITE_SINGLE_REG</a>(uint8_t slave_addr, uint16_t reg_addr, uint16_t value)</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span>{</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a1b66683f704ef9072329e997312e3b83">FC_W_HOLD_REG</a>, {0}, reg_addr, value, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span>}</div>
</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span><span class="comment"></span> </div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">/** @brief Сформировать запрос на запись нескольких регистров */</span></div>
<div class="foldopen" id="foldopen00626" data-start="{" data-end="}">
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga92c7c61bc6b3e249350d93d20b530fa3"> 626</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga92c7c61bc6b3e249350d93d20b530fa3">MB_REQUEST_WRITE_MULTIPLE_COILS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint8_t *coils_data)</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span>{</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a43a1b810697ea15ef91008dbc0187127">FC_W_COILS</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> </div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="comment">// Calculate byte count and prepare data</span></div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> uint8_t byte_count = (quantity + 7) / 8;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> msg.<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> = byte_count;</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> </div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="comment">// Copy coil data to message MbData array</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; byte_count; i++) {</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">if</span>(i &lt; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gaf55149bc1f05cf18af067a302e31e3f9">DATA_SIZE</a>) {</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> msg.<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[i] = coils_data[i];</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> }</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> </div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span>}</div>
</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span><span class="comment"></span> </div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span><span class="comment">/** @brief Сформировать запрос на запись нескольких коилов */</span></div>
<div class="foldopen" id="foldopen00645" data-start="{" data-end="}">
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga9b89a034f1c5ed96572621b2ebe7f6af"> 645</a></span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga9b89a034f1c5ed96572621b2ebe7f6af">MB_REQUEST_WRITE_MULTIPLE_REGS</a>(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint16_t *regs_data)</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span>{</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2affa24c54ee0b59e9810f1dbdc949e684">FC_W_HOLD_REGS</a>, {0}, start_addr, quantity, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> </div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> msg.<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> = quantity * 2; <span class="comment">// Each register is 2 bytes</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> </div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <span class="comment">// Copy register data to message MbData array</span></div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; quantity &amp;&amp; i &lt; <a class="code hl_define" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gaf55149bc1f05cf18af067a302e31e3f9">DATA_SIZE</a>; i++) {</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> msg.<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[i] = regs_data[i];</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> }</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> </div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span>}</div>
</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> </div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span><span class="comment">//---------ДИАГНОСТИЧЕСКИЕ ДАННЫЕ-----------</span></div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_DIAGNOSTIC_QUERY(uint8_t slave_addr, uint16_t sub_function, uint16_t data)</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span>{</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a>, {0}, 0, 0, 0, {sub_function, data}, 0, 0};</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span>}</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_QUERY_DATA(uint8_t slave_addr)</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span>{</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0000, 0x0000);</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span>}</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> </div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RESTART_COMMUNICATIONS(uint8_t slave_addr, uint16_t data)</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span>{</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0001, data);</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span>}</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> </div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_DIAGNOSTIC_REGISTER(uint8_t slave_addr)</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span>{</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0002, 0x0000);</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span>}</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_FORCE_LISTEN_ONLY_MODE(uint8_t slave_addr)</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span>{</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0004, 0x0000);</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span>}</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> </div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_CLEAR_COUNTERS_AND_DIAGNOSTIC_REGISTER(uint8_t slave_addr)</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span>{</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000A, 0x0000);</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span>}</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> </div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_BUS_MESSAGE_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span>{</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000B, 0x0000);</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span>}</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> </div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_BUS_COMMUNICATION_ERROR_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span>{</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000C, 0x0000);</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span>}</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> </div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_SLAVE_EXCEPTION_ERROR_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span>{</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000D, 0x0000);</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span>}</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> </div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_SLAVE_MESSAGE_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span>{</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000E, 0x0000);</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span>}</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_SLAVE_NO_RESPONSE_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span>{</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x000F, 0x0000);</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span>}</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> </div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_SLAVE_NAK_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span>{</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0010, 0x0000);</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span>}</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> </div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_SLAVE_BUSY_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span>{</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0011, 0x0000);</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span>}</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> </div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_RETURN_BUS_CHARACTER_OVERRUN_COUNT(uint8_t slave_addr)</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span>{</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="keywordflow">return</span> MB_REQUEST_DIAGNOSTIC_QUERY(slave_addr, 0x0012, 0x0000);</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span>}</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> </div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span><span class="comment">//---------ИДЕНТИФИКАТОРЫ МОДБАС-----------</span></div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_READ_DEVICE_ID_BASIC(uint8_t slave_addr)</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span>{</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>, {0x0E, 0x01, 0x00, 0, 0, 0}, 0, 0, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span>}</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_READ_DEVICE_ID_REGULAR(uint8_t slave_addr)</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span>{</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>, {0x0E, 0x02, 0x00, 0, 0, 0}, 0, 0, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span>}</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_READ_DEVICE_ID_EXTENDED(uint8_t slave_addr)</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span>{</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>, {0x0E, 0x03, 0x00, 0, 0, 0}, 0, 0, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span>}</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> </div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span><a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t object_id)</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span>{</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <a class="code hl_struct" href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a> msg = {slave_addr, <a class="code hl_enumvalue" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a>, {0x0E, 0x04, object_id, 0, 0, 0}, 0, 0, 0, {0}, 0, 0};</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <span class="keywordflow">return</span> msg;</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span>}</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> </div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_MASTER</span></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_a_s_t_e_r_html_ga096d2790ab887eb815e17d8cd9ede125"><div class="ttname"><a href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga096d2790ab887eb815e17d8cd9ede125">MB_Master_Collect_Message</a></div><div class="ttdeci">RS_StatusTypeDef MB_Master_Collect_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)</div><div class="ttdoc">Сбор сообщения в буфер UART в режиме мастер (фрейм мастера из msg -&gt; uart).</div><div class="ttdef"><b>Definition</b> <a href="#l00388">modbus_master.c:388</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_a_s_t_e_r_html_ga461e77fe31ce64c7ee5f1a932dc1183f"><div class="ttname"><a href="group___m_o_d_b_u_s___m_a_s_t_e_r.html#ga461e77fe31ce64c7ee5f1a932dc1183f">MB_Master_Parse_Message</a></div><div class="ttdeci">RS_StatusTypeDef MB_Master_Parse_Message(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, uint8_t *modbus_uart_buff)</div><div class="ttdoc">Парс сообщения в режиме мастер (фрейм слейва из uart -&gt; msg).</div><div class="ttdef"><b>Definition</b> <a href="#l00469">modbus_master.c:469</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_ga18eb6d0d9fdb6274341e892e2b41d88b"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga18eb6d0d9fdb6274341e892e2b41d88b">RX_FIRST_PART_SIZE</a></div><div class="ttdeci">#define RX_FIRST_PART_SIZE</div><div class="ttdoc">Size of first part of message that will be received first receive info part of message,...</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00066">modbus_core.h:66</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_ga822b0fd9ae9ff25dfa6748473e8e8627"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga822b0fd9ae9ff25dfa6748473e8e8627">FC_ERR_VALUES_START</a></div><div class="ttdeci">#define FC_ERR_VALUES_START</div><div class="ttdoc">from this value starts error func codes</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00088">modbus_core.h:88</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gaf55149bc1f05cf18af067a302e31e3f9"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gaf55149bc1f05cf18af067a302e31e3f9">DATA_SIZE</a></div><div class="ttdeci">#define DATA_SIZE</div><div class="ttdoc">maximum number of data: DWORD (NOT MESSAGE SIZE)</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00053">modbus_core.h:53</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a1b66683f704ef9072329e997312e3b83"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a1b66683f704ef9072329e997312e3b83">FC_W_HOLD_REG</a></div><div class="ttdeci">@ FC_W_HOLD_REG</div><div class="ttdoc">Запись одиночного регистра</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00109">modbus_core.h:109</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a37ddf147e08b6d205319c31e6750d47c">FC_R_DEVICE_ID</a></div><div class="ttdeci">@ FC_R_DEVICE_ID</div><div class="ttdoc">Чтение информации об устройстве</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00114">modbus_core.h:114</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a399bcd53bc32faca81bbc3d1ff8b5bb6"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a399bcd53bc32faca81bbc3d1ff8b5bb6">FC_R_COILS</a></div><div class="ttdeci">@ FC_R_COILS</div><div class="ttdoc">Чтение битовых ячеек</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00097">modbus_core.h:97</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a438c348676901d3e0263fd1f8d94bf11"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a438c348676901d3e0263fd1f8d94bf11">FC_R_DISC_IN</a></div><div class="ttdeci">@ FC_R_DISC_IN</div><div class="ttdoc">Чтение дискретных входов</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00098">modbus_core.h:98</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a43a1b810697ea15ef91008dbc0187127"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a43a1b810697ea15ef91008dbc0187127">FC_W_COILS</a></div><div class="ttdeci">@ FC_W_COILS</div><div class="ttdoc">Запись нескольких битовых ячеек</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00110">modbus_core.h:110</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a76139e9b7ae78856fd3a297c9f751944"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a76139e9b7ae78856fd3a297c9f751944">FC_R_IN_REGS</a></div><div class="ttdeci">@ FC_R_IN_REGS</div><div class="ttdoc">Чтение регистров хранения</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00101">modbus_core.h:101</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2a832b94af2c427d0daae721da2528f44a"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2a832b94af2c427d0daae721da2528f44a">FC_W_COIL</a></div><div class="ttdeci">@ FC_W_COIL</div><div class="ttdoc">Запись битовой ячейки</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00108">modbus_core.h:108</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2aa6423de9e908dc38ce9f1c8027ad72ec">FC_R_DIAGNOSTICS</a></div><div class="ttdeci">@ FC_R_DIAGNOSTICS</div><div class="ttdoc">Чтение диагностической информации устройства</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00113">modbus_core.h:113</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2ae03921b16750ef290fdd7d19a08a29a2"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2ae03921b16750ef290fdd7d19a08a29a2">FC_R_HOLD_REGS</a></div><div class="ttdeci">@ FC_R_HOLD_REGS</div><div class="ttdoc">Чтение входных регистров</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00100">modbus_core.h:100</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s_html_gga38d42495bf262b70048e6d6a7af175d2affa24c54ee0b59e9810f1dbdc949e684"><div class="ttname"><a href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#gga38d42495bf262b70048e6d6a7af175d2affa24c54ee0b59e9810f1dbdc949e684">FC_W_HOLD_REGS</a></div><div class="ttdeci">@ FC_W_HOLD_REGS</div><div class="ttdoc">Запись нескольких регистров</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00111">modbus_core.h:111</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_g_s___a_p_i_html_ga1f80317087624a23f84224c6f2c1d596"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga1f80317087624a23f84224c6f2c1d596">MB_RespGet_RegisterValue</a></div><div class="ttdeci">int MB_RespGet_RegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint16_t *reg_value)</div><div class="ttdoc">Получить значение регистра в ответе по его адресу</div><div class="ttdef"><b>Definition</b> <a href="#l00063">modbus_master.c:63</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_g_s___a_p_i_html_ga86160c23899d6ece041e3680ba863019"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_g_s___a_p_i.html#ga86160c23899d6ece041e3680ba863019">MB_RespGet_RegisterAll</a></div><div class="ttdeci">int MB_RespGet_RegisterAll(RS_MsgTypeDef *modbus_msg, uint16_t *reg_arr)</div><div class="ttdoc">Получить значение ВСЕХ регистров в ответе</div><div class="ttdef"><b>Definition</b> <a href="#l00038">modbus_master.c:38</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i_html_ga14750bad3976a9fcc6bdece1c800dbf5"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga14750bad3976a9fcc6bdece1c800dbf5">MB_RespGet_CoilAll</a></div><div class="ttdeci">int MB_RespGet_CoilAll(RS_MsgTypeDef *modbus_msg, int *coil_arr)</div><div class="ttdoc">Получить состояние ВСЕХ coil в ответе</div><div class="ttdef"><b>Definition</b> <a href="#l00101">modbus_master.c:101</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i_html_ga643a0be1ccd587a6dfe544d9fd5ed018"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___c_o_i_l_s___a_p_i.html#ga643a0be1ccd587a6dfe544d9fd5ed018">MB_RespGet_CoilState</a></div><div class="ttdeci">int MB_RespGet_CoilState(RS_MsgTypeDef *modbus_msg, uint16_t coil_addr, int *coil_state)</div><div class="ttdoc">Получить состояние coil в ответе по его адресу</div><div class="ttdef"><b>Definition</b> <a href="#l00127">modbus_master.c:127</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i_html_ga0dc4119c008af34d5997eab339c437be"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga0dc4119c008af34d5997eab339c437be">MB_RespGet_ObjectById</a></div><div class="ttdeci">int MB_RespGet_ObjectById(RS_MsgTypeDef *modbus_msg, uint8_t obj_id, char *obj_data, uint8_t *obj_length)</div><div class="ttdoc">Найти объект по ID в сообщении</div><div class="ttdef"><b>Definition</b> <a href="#l00193">modbus_master.c:193</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i_html_ga16b90d4a74a249514161aa4576724d1c"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga16b90d4a74a249514161aa4576724d1c">MB_RespGet_NumberOfObjects</a></div><div class="ttdeci">int MB_RespGet_NumberOfObjects(RS_MsgTypeDef *modbus_msg)</div><div class="ttdoc">Получить количество объектов в сообщении</div><div class="ttdef"><b>Definition</b> <a href="#l00170">modbus_master.c:170</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i_html_ga3fc5fc5abfe4f8767ccee5c11ea3d5d5"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___d_e_f_i_d___a_p_i.html#ga3fc5fc5abfe4f8767ccee5c11ea3d5d5">MB_RespGet_ObjectByIndex</a></div><div class="ttdeci">int MB_RespGet_ObjectByIndex(RS_MsgTypeDef *modbus_msg, int index, uint8_t *obj_id, char *obj_data, uint8_t *obj_length)</div><div class="ttdoc">Получить объект по индексу в сообщении</div><div class="ttdef"><b>Definition</b> <a href="#l00244">modbus_master.c:244</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q___d_i_a_g___a_p_i_html_ga46a9650ec68832e6f95eda579f4d9ded"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q___d_i_a_g___a_p_i.html#ga46a9650ec68832e6f95eda579f4d9ded">MB_RespGet_Diagnostic</a></div><div class="ttdeci">int MB_RespGet_Diagnostic(RS_MsgTypeDef *modbus_msg, uint16_t *data)</div><div class="ttdoc">Получить данные диагностики из сообщения (MbData[1])</div><div class="ttdef"><b>Definition</b> <a href="#l00297">modbus_master.c:297</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga0126cfaf44c73d84d521b16c0f6ab7b6"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga0126cfaf44c73d84d521b16c0f6ab7b6">MB_REQUEST_WRITE_SINGLE_REG</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_WRITE_SINGLE_REG(uint8_t slave_addr, uint16_t reg_addr, uint16_t value)</div><div class="ttdoc">Сформировать запрос на запись одного регистра</div><div class="ttdef"><b>Definition</b> <a href="#l00619">modbus_master.c:619</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga1ac5f38ac244039a63b2714044778ffc"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga1ac5f38ac244039a63b2714044778ffc">MB_REQUEST_WRITE_SINGLE_COIL</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_WRITE_SINGLE_COIL(uint8_t slave_addr, uint16_t coil_addr, uint8_t value)</div><div class="ttdoc">Сформировать запрос на запись одного коила</div><div class="ttdef"><b>Definition</b> <a href="#l00612">modbus_master.c:612</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga4a4798a15608f3aac04150115a628f8e"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga4a4798a15608f3aac04150115a628f8e">MB_REQUEST_READ_HOLDING_REGS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_READ_HOLDING_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div><div class="ttdoc">Сформировать запрос на чтение холдинг регистров</div><div class="ttdef"><b>Definition</b> <a href="#l00598">modbus_master.c:598</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga72f91a70586546171fe9190a4e0e5518"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga72f91a70586546171fe9190a4e0e5518">MB_REQUEST_READ_INPUT_REGS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_READ_INPUT_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div><div class="ttdoc">Сформировать запрос на чтение инпут регистров</div><div class="ttdef"><b>Definition</b> <a href="#l00605">modbus_master.c:605</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga85028c4de63ca63cb04e332a3fdcd676"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga85028c4de63ca63cb04e332a3fdcd676">MB_REQUEST_READ_DISCRETE_INPUTS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_READ_DISCRETE_INPUTS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div><div class="ttdoc">Сформировать запрос на чтение дискретных регистров</div><div class="ttdef"><b>Definition</b> <a href="#l00591">modbus_master.c:591</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga92c7c61bc6b3e249350d93d20b530fa3"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga92c7c61bc6b3e249350d93d20b530fa3">MB_REQUEST_WRITE_MULTIPLE_COILS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_WRITE_MULTIPLE_COILS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint8_t *coils_data)</div><div class="ttdoc">Сформировать запрос на запись нескольких регистров</div><div class="ttdef"><b>Definition</b> <a href="#l00626">modbus_master.c:626</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_ga9b89a034f1c5ed96572621b2ebe7f6af"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#ga9b89a034f1c5ed96572621b2ebe7f6af">MB_REQUEST_WRITE_MULTIPLE_REGS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_WRITE_MULTIPLE_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity, uint16_t *regs_data)</div><div class="ttdoc">Сформировать запрос на запись нескольких коилов</div><div class="ttdef"><b>Definition</b> <a href="#l00645">modbus_master.c:645</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g_html_gadb1b59bd6832b017b7ff4f5d694f59aa"><div class="ttname"><a href="group___m_o_d_b_u_s___r_e_q_u_e_s_t___m_s_g.html#gadb1b59bd6832b017b7ff4f5d694f59aa">MB_REQUEST_READ_COILS</a></div><div class="ttdeci">RS_MsgTypeDef MB_REQUEST_READ_COILS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)</div><div class="ttdoc">Сформировать запрос на чтение коилов</div><div class="ttdef"><b>Definition</b> <a href="#l00584">modbus_master.c:584</a></div></div>
<div class="ttc" id="agroup___r_s___d_e_b_u_g_html_ga49af29ab3927cad105c1d2b018a767e9"><div class="ttname"><a href="group___r_s___d_e_b_u_g.html#ga49af29ab3927cad105c1d2b018a767e9">TrackerCnt_Err</a></div><div class="ttdeci">#define TrackerCnt_Err(_cntstruct_)</div><div class="ttdoc">Инкрементировать переменную - ошибок</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00108">rs_message.h:108</a></div></div>
<div class="ttc" id="agroup___r_s___t_o_o_l_s_html_ga727154b368397b4796aa892de12a2289"><div class="ttname"><a href="group___r_s___t_o_o_l_s.html#ga727154b368397b4796aa892de12a2289">RS_StatusTypeDef</a></div><div class="ttdeci">RS_StatusTypeDef</div><div class="ttdoc">Enums for respond CMD about RS status.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00163">rs_message.h:164</a></div></div>
<div class="ttc" id="amodbus_8h_html"><div class="ttname"><a href="modbus_8h.html">modbus.h</a></div><div class="ttdoc">Главный заголовочный файл Modbus библиотеки</div></div>
<div class="ttc" id="amodbus__master_8c_html_a79e3f84b9daba8a42c8ca6026133acc5"><div class="ttname"><a href="modbus__master_8c.html#a79e3f84b9daba8a42c8ca6026133acc5">MB_Define_Size_of_Function</a></div><div class="ttdeci">static int MB_Define_Size_of_Function(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)</div><div class="ttdoc">Определить размер модбас запроса (МАСТЕР версия).</div><div class="ttdef"><b>Definition</b> <a href="#l00326">modbus_master.c:326</a></div></div>
<div class="ttc" id="astruct_m_b___dev_id_msg_type_def_html_a1ef4b6db2785f723b26b0d9abe6f371e"><div class="ttname"><a href="struct_m_b___dev_id_msg_type_def.html#a1ef4b6db2785f723b26b0d9abe6f371e">MB_DevIdMsgTypeDef::Conformity</a></div><div class="ttdeci">uint8_t Conformity</div><div class="ttdoc">Identification conformity level of the device and type of supported access MODBUS_DEVICE_CONFORMITY.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00168">modbus_core.h:168</a></div></div>
<div class="ttc" id="astruct_m_b___dev_id_msg_type_def_html_aefb693da9f6b86a6da833c4177302092"><div class="ttname"><a href="struct_m_b___dev_id_msg_type_def.html#aefb693da9f6b86a6da833c4177302092">MB_DevIdMsgTypeDef::MEI_Type</a></div><div class="ttdeci">MB_MEITypeDef MEI_Type</div><div class="ttdoc">MEI Type assigned number for Device Identifications Interface.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00166">modbus_core.h:166</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html"><div class="ttname"><a href="struct_r_s___handle_type_def.html">RS_HandleTypeDef</a></div><div class="ttdoc">Handle for RS communication.</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00227">rs_message.h:228</a></div></div>
<div class="ttc" id="astruct_r_s___handle_type_def_html_a495a29011412451e53459f9e1513814d"><div class="ttname"><a href="struct_r_s___handle_type_def.html#a495a29011412451e53459f9e1513814d">RS_HandleTypeDef::RS_Message_Size</a></div><div class="ttdeci">int32_t RS_Message_Size</div><div class="ttdoc">size of whole message, not only data</div><div class="ttdef"><b>Definition</b> <a href="rs__message_8h_source.html#l00233">rs_message.h:233</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html"><div class="ttname"><a href="struct_r_s___msg_type_def.html">RS_MsgTypeDef</a></div><div class="ttdoc">Structure for modbus messsage.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00176">modbus_core.h:177</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a176d779ab0d7fd06a4303e6e6acb6ca9"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a176d779ab0d7fd06a4303e6e6acb6ca9">RS_MsgTypeDef::FuncCode</a></div><div class="ttdeci">MB_FunctonTypeDef FuncCode</div><div class="ttdoc">Modbus Function Code.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00185">modbus_core.h:185</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a1ccb2bf492218a6ae3a5b6ad5cd4c82f"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">RS_MsgTypeDef::Qnt</a></div><div class="ttdeci">uint16_t Qnt</div><div class="ttdoc">Quantity of modbus data.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00188">modbus_core.h:188</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a277ed439b65aedbf03bd112c073e6a32"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a277ed439b65aedbf03bd112c073e6a32">RS_MsgTypeDef::MbAddr</a></div><div class="ttdeci">uint8_t MbAddr</div><div class="ttdoc">Modbus Slave Address.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00184">modbus_core.h:184</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a3dab5eaf3a1dd5719b8bfec1adad0d39"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">RS_MsgTypeDef::Except_Code</a></div><div class="ttdeci">MB_ExceptionTypeDef Except_Code</div><div class="ttdoc">Exception Code for the command.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00192">modbus_core.h:192</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a423ab838d4c113fd6392452fd44dc1c0"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a423ab838d4c113fd6392452fd44dc1c0">RS_MsgTypeDef::MbCRC</a></div><div class="ttdeci">uint16_t MbCRC</div><div class="ttdoc">Modbus CRC.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00194">modbus_core.h:194</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a51c020dacb24e4ffcff28b1d3c6a01ae"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a51c020dacb24e4ffcff28b1d3c6a01ae">RS_MsgTypeDef::DevId</a></div><div class="ttdeci">MB_DevIdMsgTypeDef DevId</div><div class="ttdoc">Read Device Identifications Header struct.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00186">modbus_core.h:186</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_a5c69bf212dc5e7dc2eaa50971e27e2a6"><div class="ttname"><a href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">RS_MsgTypeDef::ByteCnt</a></div><div class="ttdeci">uint8_t ByteCnt</div><div class="ttdoc">Quantity of bytes of data in message to transmit/receive.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00189">modbus_core.h:189</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_aacbc6754621bd84742cd6c2ba65ad094"><div class="ttname"><a href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">RS_MsgTypeDef::MbData</a></div><div class="ttdeci">uint16_t MbData[DATA_SIZE]</div><div class="ttdoc">Modbus Data.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00191">modbus_core.h:191</a></div></div>
<div class="ttc" id="astruct_r_s___msg_type_def_html_af99048a71119ba4c17772bd5544b3eef"><div class="ttname"><a href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">RS_MsgTypeDef::Addr</a></div><div class="ttdeci">uint16_t Addr</div><div class="ttdoc">Modbus Address of data.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00187">modbus_core.h:187</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_413f4e031a85da0d68269c6fd2f76e1c.html">Src</a></li><li class="navelem"><a href="modbus__master_8c.html">modbus_master.c</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
</ul>
</div>
</body>
</html>