Files
STM32_Modbus/Doc/html/____modbus__data_8c_source.html

284 lines
42 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/__modbus_data.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__data_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">E:/.WORK/STM32/Diod_Test/diode_tester/Core/Modbus/__modbus_data.c</div></div>
</div><!--header-->
<div class="contents">
<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_data.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">Модуль реализует функции валидации адресов и доступа к данным:</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">- Определение указателей на реальные данные в памяти</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">- Поддержка пользовательских массивов регистров и coils</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"></span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">@section Валидация адресов:</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">- MB_Check_Address_For_Arr() - проверка принадлежности адреса массиву</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">- MB_DefineRegistersAddress() - получение указателя на регистры</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">- MB_DefineCoilsAddress() - получение указателя на coils</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"></span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment">******************************************************************************/</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__core_8h.html">modbus_core.h</a>&quot;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__coils_8h.html">modbus_coils.h</a>&quot;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__holdregs_8h.html">modbus_holdregs.h</a>&quot;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__inputregs_8h.html">modbus_inputregs.h</a>&quot;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &quot;<a class="code" href="modbus__devid_8h.html">modbus_devid.h</a>&quot;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment"></span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="comment">/** </span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> * @brief Check is address valid for certain array.</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> * @param Addr Начальный адресс.</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment"> * @param Qnt Количество запрашиваемых элементов.</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> * @param R_ARR_ADDR Начальный адресс массива R_ARR.</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> * @param R_ARR_NUMB Количество элементов в массиве R_ARR.</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> * @return ExceptionCode - ET_ILLEGAL_DATA_ADRESS если адресс недействителен, и ET_NO_ERRORS если все ок.</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> *</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="comment"> * @details Позволяет определить, принадлежит ли адресс Addr массиву R_ARR:</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment"> * Если адресс Addr находится в диапазоне адрессов массива R_ARR, то возвращаем NO_ERROR.</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="comment"> * Если адресс Addr находится за пределами адрессов массива R_ARR - ET_ILLEGAL_DATA_ADDRESSю.</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___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50"> 38</a></span><a class="code hl_enumeration" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga4ade64cb3fabf37f010c1e297489980c">MB_ExceptionTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50">MB_Check_Address_For_Arr</a>(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB)</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="comment">// if address from this array</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">if</span>(Addr &gt;= R_ARR_ADDR) </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> { </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// if quantity too big return error</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordflow">if</span> ((Addr - R_ARR_ADDR) + Qnt &gt; R_ARR_NUMB) </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">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a>; <span class="comment">// return exception code</span></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> <span class="comment">// if all ok - return no errors</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> }</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// if address isnt from this array return error</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">else</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a>; <span class="comment">// return exception code </span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>}<span class="comment"></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"> * @brief Define Address Origin for Input/Holding Registers</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> * @param pRegs Указатель на указатель регистров.</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> * @param Addr Адрес начального регистра.</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> * @param Qnt Количество запрашиваемых регистров.</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> * @param WriteFlag Флаг регистр нужны для чтения или записи.</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * @return ExceptionCode Код исключения если есть, и ET_NO_ERRORS если нет.</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> *</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * @details Определение адреса начального регистра.</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * @note WriteFlag пока не используется.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00066" data-start="{" data-end="}">
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga1e90bb28a4cf997250daab6470d5ffe3"> 66</a></span><a class="code hl_enumeration" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga4ade64cb3fabf37f010c1e297489980c">MB_ExceptionTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga1e90bb28a4cf997250daab6470d5ffe3">MB_DefineRegistersAddress</a>(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType)</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">/* check quantity error */</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (Qnt &gt; <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="l00070" name="l00070"></a><span class="lineno"> 70</span> { </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3">ET_ILLEGAL_DATA_VALUE</a>; <span class="comment">// return exception code</span></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> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">if</span>(RegisterType == RegisterType_Holding)</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">// Default holding registers</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50">MB_Check_Address_For_Arr</a>(Addr, Qnt, <a class="code hl_define" href="modbus__data_8h.html#a791dfd31cc06338acdd8a2eb3b7032e6">R_HOLDING_ADDR</a>, <a class="code hl_define" href="modbus__data_8h.html#acf40437374a3227e661db1a18bcef7d7">R_HOLDING_QNT</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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>)</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> {</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> *pRegs = <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#ga938b632e20454741b2a7f97928583776">MB_Set_Register_Ptr</a>(&amp;MB_DATA.HoldRegs, Addr - <a class="code hl_define" href="modbus__data_8h.html#a791dfd31cc06338acdd8a2eb3b7032e6">R_HOLDING_ADDR</a>); <span class="comment">// указатель на выбранный по Addr регистр</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// if address doesnt match any array - return illegal data address response</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">else</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a>;</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> }</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="keywordflow">else</span> <span class="keywordflow">if</span>(RegisterType == RegisterType_Input)</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> {</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// Default input registers</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50">MB_Check_Address_For_Arr</a>(Addr, Qnt, <a class="code hl_define" href="modbus__data_8h.html#a22bd1273e01d32f90a279b517d1737b6">R_INPUT_ADDR</a>, <a class="code hl_define" href="modbus__data_8h.html#a97c0b1e20498bca34f6dfe0ac0d97b30">R_INPUT_QNT</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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>)</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> *pRegs = <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#ga938b632e20454741b2a7f97928583776">MB_Set_Register_Ptr</a>(&amp;MB_DATA.InRegs, Addr - <a class="code hl_define" href="modbus__data_8h.html#a22bd1273e01d32f90a279b517d1737b6">R_INPUT_ADDR</a>); <span class="comment">// указатель на выбранный по Addr регистр</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">// if address doesnt match any array - return illegal data address response</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">else</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a>;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> }</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980cae81af967ab54904738ee391eb7478ad1">ET_ILLEGAL_FUNCTION</a>;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// if found requeried array return no err</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>; <span class="comment">// return no errors</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>}<span class="comment"></span></div>
</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span><span class="comment">/** </span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="comment"> * @brief Define Address Origin for coils</span></div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span><span class="comment"> * @param pCoils Указатель на указатель коилов.</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment"> * @param Addr Адресс начального коила.</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span><span class="comment"> * @param Qnt Количество запрашиваемых коилов.</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="comment"> * @param start_shift Указатель на переменную содержащую сдвиг внутри регистра для начального коила.</span></div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span><span class="comment"> * @param WriteFlag Флаг коилы нужны для чтения или записи.</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span><span class="comment"> * @return ExceptionCode Код исключения если есть, и ET_NO_ERRORS если нет.</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="comment"> *</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span><span class="comment"> * @details Определение адреса начального регистра запрашиваемых коилов.</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span><span class="comment"> * @note WriteFlag используется для определния регистров GPIO: ODR или IDR.</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00119" data-start="{" data-end="}">
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gade717a6829a062a8a198bd933c8b2221"> 119</a></span><a class="code hl_enumeration" href="group___m_o_d_b_u_s___m_e_s_s_a_g_e___d_e_f_i_n_e_s.html#ga4ade64cb3fabf37f010c1e297489980c">MB_ExceptionTypeDef</a> <a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gade717a6829a062a8a198bd933c8b2221">MB_DefineCoilsAddress</a>(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag)</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span>{ </div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="comment">/* check quantity error */</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span> (Qnt &gt; 2000) </div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3">ET_ILLEGAL_DATA_VALUE</a>; <span class="comment">// return exception code</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> }</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// Default coils</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50">MB_Check_Address_For_Arr</a>(Addr, Qnt, <a class="code hl_define" href="modbus__data_8h.html#a5057c379abcae88db30ad094eceb952d">C_COILS_ADDR</a>, <a class="code hl_define" href="modbus__data_8h.html#a438d957058fcf102c66922f0eada3af2">C_COILS_QNT</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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>)</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> *pCoils = <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#ga9648b00f955b16e107b901812031cee3">MB_Set_Coil_Reg_Ptr</a>(&amp;MB_DATA.Coils, Addr - <a class="code hl_define" href="modbus__data_8h.html#a5057c379abcae88db30ad094eceb952d">C_COILS_ADDR</a>); <span class="comment">// указатель на выбранный по Addr массив коилов</span></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">// if address doesnt match any array - return illegal data address response</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">else</span> </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> <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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a>;</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> *start_shift = Addr % 16; <span class="comment">// set shift to requested coil</span></div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// if found requeried array return no err</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">return</span> <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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a>; <span class="comment">// return no errors</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span>}</div>
</div>
<div class="ttc" id="agroup___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_html_ga1e90bb28a4cf997250daab6470d5ffe3"><div class="ttname"><a href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga1e90bb28a4cf997250daab6470d5ffe3">MB_DefineRegistersAddress</a></div><div class="ttdeci">MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, uint16_t Qnt, uint8_t RegisterType)</div><div class="ttdoc">Define Address Origin for Input/Holding Registers.</div><div class="ttdef"><b>Definition</b> <a href="#l00066">__modbus_data.c:66</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_html_ga278ca9791c69aef8adeb9e7c4b273c50"><div class="ttname"><a href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga278ca9791c69aef8adeb9e7c4b273c50">MB_Check_Address_For_Arr</a></div><div class="ttdeci">MB_ExceptionTypeDef MB_Check_Address_For_Arr(uint16_t Addr, uint16_t Qnt, uint16_t R_ARR_ADDR, uint16_t R_ARR_NUMB)</div><div class="ttdoc">Check is address valid for certain array.</div><div class="ttdef"><b>Definition</b> <a href="#l00038">__modbus_data.c:38</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s_html_gade717a6829a062a8a198bd933c8b2221"><div class="ttname"><a href="group___m_o_d_b_u_s___c_m_d___p_r_o_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gade717a6829a062a8a198bd933c8b2221">MB_DefineCoilsAddress</a></div><div class="ttdeci">MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint16_t Qnt, uint16_t *start_shift, uint8_t WriteFlag)</div><div class="ttdoc">Define Address Origin for coils.</div><div class="ttdef"><b>Definition</b> <a href="#l00119">__modbus_data.c:119</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_ga4ade64cb3fabf37f010c1e297489980c"><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#ga4ade64cb3fabf37f010c1e297489980c">MB_ExceptionTypeDef</a></div><div class="ttdeci">MB_ExceptionTypeDef</div><div class="ttdoc">Enum for modbus exception codes.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00075">modbus_core.h:76</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_ga938b632e20454741b2a7f97928583776"><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#ga938b632e20454741b2a7f97928583776">MB_Set_Register_Ptr</a></div><div class="ttdeci">#define MB_Set_Register_Ptr(_parr_, _addr_)</div><div class="ttdoc">Macros to set pointer to register.</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00215">modbus_core.h:215</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_ga9648b00f955b16e107b901812031cee3"><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#ga9648b00f955b16e107b901812031cee3">MB_Set_Coil_Reg_Ptr</a></div><div class="ttdeci">#define MB_Set_Coil_Reg_Ptr(_parr_, _coil_)</div><div class="ttdoc">Макрос для установки указателя на регистр, содержащий запрашиваемый коил</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00232">modbus_core.h:232</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_gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3"><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#gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3">ET_ILLEGAL_DATA_VALUE</a></div><div class="ttdeci">@ ET_ILLEGAL_DATA_VALUE</div><div class="ttdoc">Значение, содержащееся в поле данных запроса, является недопустимой величиной</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00081">modbus_core.h:81</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_gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74"><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#gga4ade64cb3fabf37f010c1e297489980caa6980c7a8d924dd975b8fa06a300eb74">ET_NO_ERRORS</a></div><div class="ttdeci">@ ET_NO_ERRORS</div><div class="ttdoc">no errors</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00078">modbus_core.h:78</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_gga4ade64cb3fabf37f010c1e297489980cae81af967ab54904738ee391eb7478ad1"><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#gga4ade64cb3fabf37f010c1e297489980cae81af967ab54904738ee391eb7478ad1">ET_ILLEGAL_FUNCTION</a></div><div class="ttdeci">@ ET_ILLEGAL_FUNCTION</div><div class="ttdoc">Принятый код функции не может быть обработан</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00079">modbus_core.h:79</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_gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425"><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#gga4ade64cb3fabf37f010c1e297489980caea312adaf18aa7ebd17aca8883550425">ET_ILLEGAL_DATA_ADDRESS</a></div><div class="ttdeci">@ ET_ILLEGAL_DATA_ADDRESS</div><div class="ttdoc">Адрес данных, указанный в запросе, недоступен</div><div class="ttdef"><b>Definition</b> <a href="modbus__core_8h_source.html#l00080">modbus_core.h:80</a></div></div>
<div class="ttc" id="amodbus__coils_8h_html"><div class="ttname"><a href="modbus__coils_8h.html">modbus_coils.h</a></div><div class="ttdoc">Работа с коилами Modbus.</div></div>
<div class="ttc" id="amodbus__core_8h_html"><div class="ttname"><a href="modbus__core_8h.html">modbus_core.h</a></div><div class="ttdoc">Ядро Modbus протокола - определения и структуры</div></div>
<div class="ttc" id="amodbus__data_8h_html_a22bd1273e01d32f90a279b517d1737b6"><div class="ttname"><a href="modbus__data_8h.html#a22bd1273e01d32f90a279b517d1737b6">R_INPUT_ADDR</a></div><div class="ttdeci">#define R_INPUT_ADDR</div><div class="ttdoc">Начальный адрес входных регистров</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00061">modbus_data.h:61</a></div></div>
<div class="ttc" id="amodbus__data_8h_html_a438d957058fcf102c66922f0eada3af2"><div class="ttname"><a href="modbus__data_8h.html#a438d957058fcf102c66922f0eada3af2">C_COILS_QNT</a></div><div class="ttdeci">#define C_COILS_QNT</div><div class="ttdoc">Количество регистров коилов</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00070">modbus_data.h:70</a></div></div>
<div class="ttc" id="amodbus__data_8h_html_a5057c379abcae88db30ad094eceb952d"><div class="ttname"><a href="modbus__data_8h.html#a5057c379abcae88db30ad094eceb952d">C_COILS_ADDR</a></div><div class="ttdeci">#define C_COILS_ADDR</div><div class="ttdoc">Начальный адрес коилов</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00069">modbus_data.h:69</a></div></div>
<div class="ttc" id="amodbus__data_8h_html_a791dfd31cc06338acdd8a2eb3b7032e6"><div class="ttname"><a href="modbus__data_8h.html#a791dfd31cc06338acdd8a2eb3b7032e6">R_HOLDING_ADDR</a></div><div class="ttdeci">#define R_HOLDING_ADDR</div><div class="ttdoc">Начальный адрес регистров хранения</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00065">modbus_data.h:65</a></div></div>
<div class="ttc" id="amodbus__data_8h_html_a97c0b1e20498bca34f6dfe0ac0d97b30"><div class="ttname"><a href="modbus__data_8h.html#a97c0b1e20498bca34f6dfe0ac0d97b30">R_INPUT_QNT</a></div><div class="ttdeci">#define R_INPUT_QNT</div><div class="ttdoc">Количество входных регистров</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00062">modbus_data.h:62</a></div></div>
<div class="ttc" id="amodbus__data_8h_html_acf40437374a3227e661db1a18bcef7d7"><div class="ttname"><a href="modbus__data_8h.html#acf40437374a3227e661db1a18bcef7d7">R_HOLDING_QNT</a></div><div class="ttdeci">#define R_HOLDING_QNT</div><div class="ttdoc">Количество регистров хранения</div><div class="ttdef"><b>Definition</b> <a href="modbus__data_8h_source.html#l00066">modbus_data.h:66</a></div></div>
<div class="ttc" id="amodbus__devid_8h_html"><div class="ttname"><a href="modbus__devid_8h.html">modbus_devid.h</a></div><div class="ttdoc">Идентификаторы устройства Modbus.</div></div>
<div class="ttc" id="amodbus__holdregs_8h_html"><div class="ttname"><a href="modbus__holdregs_8h.html">modbus_holdregs.h</a></div><div class="ttdoc">Работа с регистрами хранения Modbus.</div></div>
<div class="ttc" id="amodbus__inputregs_8h_html"><div class="ttname"><a href="modbus__inputregs_8h.html">modbus_inputregs.h</a></div><div class="ttdoc">Работа с входными регистрами Modbus.</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"><b>__modbus_data.c</b></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>