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

390 lines
57 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_coils.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__coils_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_coils.c</div></div>
</div><!--header-->
<div class="contents">
<a href="modbus__coils_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_coils.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">Модуль для доступа к coils внутри программы:</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">- Функции для доступа к coils по глобальным адресам</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">- Макросы для доступа к coils по локальным адресам</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"></span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">Модуль обработки команд для coils (битовых данных):</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">- Чтение coils (0x01) - упаковка битов в байты для передачи</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">- Запись одиночного coil (0x05) - установка/сброс бита</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">- Запись множественных coils (0x0F) - распаковка битов из байтов</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"></span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">@section cvalid Валидация данных:</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><span class="comment">- Валидация адресов через MB_DefineRegistersAddress()</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment">- Обработка исключений при некорректных запросах</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="preprocessor">#include &quot;<a class="code" href="modbus__coils_8h.html">modbus_coils.h</a>&quot;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#ifdef MODBUS_ENABLE_COILS</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="comment"></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"> * @brief Выставить/сбросить коил по глобальному адресу.</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment"> * @param Addr Адрес коила.</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment"> * @param WriteVal Что записать в коил: 0 или 1.</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment"> * @return ExceptionCode Код исключения если коила по адресу не существует, и ET_NO_ERRORS если все ок.</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment"> *</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="comment"> * @details Позволяет обратиться к любому коилу по его глобальному адрессу.</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="comment"> Вне зависимости от того как коилы размещены в памяти.</span></div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00034" data-start="{" data-end="}">
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gae9b8595911d93cfbf8597f3356a494cc"> 34</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___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gae9b8595911d93cfbf8597f3356a494cc">MB_Coil_Write_Global</a>(uint16_t Addr, <a class="code hl_enumeration" href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga8ccf569b78a17a10ac7c80d52730753a">MB_CoilsOpTypeDef</a> WriteVal)</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>{</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="comment">//---------CHECK FOR ERRORS----------</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</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> Exception = <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="l00038" name="l00038"></a><span class="lineno"> 38</span> uint16_t *coils;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> uint16_t start_shift = 0; <span class="comment">// shift in coils register</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="comment">//------------WRITE COIL-------------</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> Exception = <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>(&amp;coils, Addr, 1, &amp;start_shift, 1);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordflow">if</span>(Exception == <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="l00044" name="l00044"></a><span class="lineno"> 44</span> {</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">switch</span>(WriteVal)</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">case</span> SET_COIL:</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> *coils |= (1&lt;&lt;start_shift); </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">break</span>;</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="keywordflow">case</span> RESET_COIL:</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> *coils &amp;= ~(1&lt;&lt;start_shift); </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">case</span> TOOGLE_COIL:</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> *coils ^= (1&lt;&lt;start_shift); </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> } </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> }</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordflow">return</span> Exception;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>}</div>
</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"></span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment">/** </span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * @brief Считать коил по глобальному адресу.</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * @param Addr Адрес коила.</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> * @param Exception Указатель на переменную для кода исключения, в случае неудачи при чтении.</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> * @return uint16_t Возвращает весь регистр с маской на запрошенном коиле.</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> *</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> * @details Позволяет обратиться к любому коилу по его глобальному адрессу.</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="comment"> Вне зависимости от того как коилы размещены в памяти.</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00074" data-start="{" data-end="}">
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga82334048256e266170a4b3373be59b59"> 74</a></span>uint16_t <a class="code hl_function" href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga82334048256e266170a4b3373be59b59">MB_Coil_Read_Global</a>(uint16_t Addr, <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> *Exception)</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">//---------CHECK FOR ERRORS----------</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</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> Exception_tmp;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keywordflow">if</span>(Exception == NULL) <span class="comment">// if exception is not given to func fill it</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> Exception = &amp;Exception_tmp;</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> uint16_t *coils;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> uint16_t start_shift = 0; <span class="comment">// shift in coils register</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="comment">//------------READ COIL--------------</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> *Exception = <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>(&amp;coils, Addr, 1, &amp;start_shift, 0); </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">if</span>(*Exception == <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="l00087" name="l00087"></a><span class="lineno"> 87</span> {</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> <span class="keywordflow">return</span> ((*coils)&amp;(1&lt;&lt;start_shift));</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">else</span></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> <span class="keywordflow">return</span> 0;</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>}</div>
</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="comment"></span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span><span class="comment">/**</span></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span><span class="comment"> * @brief Обработать функцию Read Coils (01 - 0x01).</span></div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="comment"> * @param modbus_msg Указатель на структуру собщения modbus.</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="comment"> * @return fMessageHandled Статус о результате обработки комманды.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="comment"> * @details Обработка команды Read Coils.</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00103" data-start="{" data-end="}">
<div class="line"><a id="l00103" name="l00103"></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#ga39a02e8e4911a74a619d2ef29adcbad8"> 103</a></span>uint8_t <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#ga39a02e8e4911a74a619d2ef29adcbad8">MB_Process_Read_Coils</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="l00104" name="l00104"></a><span class="lineno"> 104</span>{</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//---------CHECK FOR ERRORS----------</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> uint16_t *coils;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> uint16_t start_shift = 0; <span class="comment">// shift in coils register</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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>(&amp;coils, 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>, &amp;start_shift, 0);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="comment">//-----------READING COIL------------</span></div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// setup output message data size </span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> = Divide_Up(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>, 8);</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// create mask for coils</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> uint16_t mask_for_coils = 0; <span class="comment">// mask for coils that&#39;ve been chosen</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> uint16_t setted_coils = 0; <span class="comment">// value of setted coils</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> uint16_t temp_reg = 0; <span class="comment">// temp register for saving coils that hasnt been chosen</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> uint16_t coil_cnt = 0; <span class="comment">// counter for processed coils</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// cycle until all registers with requered coils would be processed</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">int</span> shift = start_shift; <span class="comment">// set shift to first coil in first register</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordtype">int</span> ind = 0; <span class="comment">// index for coils registers and data</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span>(; ind &lt;= Divide_Up(start_shift + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>, 16); ind++)</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">//----SET MASK FOR COILS REGISTER----</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> mask_for_coils = 0;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">for</span>(; shift &lt; 0x10; shift++)</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> {</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> mask_for_coils |= 1&lt;&lt;(shift); <span class="comment">// choose certain coil</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">if</span>(++coil_cnt &gt;= 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="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">break</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> shift = 0; <span class="comment">// set shift to zero for the next step</span></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> <span class="comment">//-----------READ COILS--------------</span></div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind] = (*(coils+ind)&amp;mask_for_coils) &gt;&gt; start_shift;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span>(ind &gt; 0)</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind-1] |= ((*(coils+ind)&amp;mask_for_coils) &lt;&lt; 16) &gt;&gt; start_shift;</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> }</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// т.к. MbData 16-битная, для 8-битной передачи, надо поменять местами верхний и нижний байты</span></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">for</span>(; ind &gt;= 0; --ind) </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind] = ByteSwap16(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind]);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>}</div>
</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment"></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="comment"> * @brief Обработать функцию Write Single Coils (05 - 0x05).</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span><span class="comment"> * @param modbus_msg Указатель на структуру собщения modbus.</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span><span class="comment"> * @return fMessageHandled Статус о результате обработки комманды.</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="comment"> * @details Обработка команды Write Single Coils.</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00156" data-start="{" data-end="}">
<div class="line"><a id="l00156" name="l00156"></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#ga918102931c9125a5e44a30e103d17e14"> 156</a></span>uint8_t <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#ga918102931c9125a5e44a30e103d17e14">MB_Process_Write_Single_Coil</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="l00157" name="l00157"></a><span class="lineno"> 157</span>{</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="comment">//---------CHECK FOR ERRORS----------</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> ((modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> != 0x0000) &amp;&amp; (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> != 0xFF00))</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> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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#gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3">ET_ILLEGAL_DATA_VALUE</a>;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> 0;</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">// define position of coil</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> uint16_t *coils;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> uint16_t start_shift = 0; <span class="comment">// shift in coils register</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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>(&amp;coils, modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#af99048a71119ba4c17772bd5544b3eef">Addr</a>, 0, &amp;start_shift, 1);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </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="comment">//----------WRITTING COIL------------</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span>(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a> == 0xFF00)</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> *(coils) |= 1&lt;&lt;start_shift; <span class="comment">// write flags corresponding to received data</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> *(coils) &amp;= ~(1&lt;&lt;start_shift); <span class="comment">// write flags corresponding to received data</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div>
</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="comment"></span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="comment">/**</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span><span class="comment"> * @brief Обработать функцию Write Multiple Coils (15 - 0x0F).</span></div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="comment"> * @param modbus_msg Указатель на структуру собщения modbus.</span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="comment"> * @return fMessageHandled Статус о результате обработки комманды.</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="comment"> * @details Обработка команды Write Multiple Coils.</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="comment"> */</span></div>
<div class="foldopen" id="foldopen00187" data-start="{" data-end="}">
<div class="line"><a id="l00187" name="l00187"></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#ga6f4498cec8634820025aaa9c4623ba55"> 187</a></span>uint8_t <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#ga6f4498cec8634820025aaa9c4623ba55">MB_Process_Write_Miltuple_Coils</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="l00188" name="l00188"></a><span class="lineno"> 188</span>{</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//---------CHECK FOR ERRORS----------</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">if</span> (modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a5c69bf212dc5e7dc2eaa50971e27e2a6">ByteCnt</a> != Divide_Up(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>, 8))</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> { <span class="comment">// if quantity too large OR if quantity and bytes count arent match</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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#gga4ade64cb3fabf37f010c1e297489980ca47d6168d0692ccb7e09e19084287aba3">ET_ILLEGAL_DATA_VALUE</a>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">return</span> 0;</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="comment">// define position of coil</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> uint16_t *coils; <span class="comment">// pointer to coils</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> uint16_t start_shift = 0; <span class="comment">// shift in coils register</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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>(&amp;coils, 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>, &amp;start_shift, 1);</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#a3dab5eaf3a1dd5719b8bfec1adad0d39">Except_Code</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="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="comment">//----------WRITTING COILS-----------</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// create mask for coils</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> uint16_t mask_for_coils = 0; <span class="comment">// mask for coils that&#39;ve been chosen</span></div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> uint32_t setted_coils = 0; <span class="comment">// value of setted coils</span></div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> uint16_t temp_reg = 0; <span class="comment">// temp register for saving coils that hasnt been chosen</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> uint16_t coil_cnt = 0; <span class="comment">// counter for processed coils</span></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> <span class="comment">// cycle until all registers with requered coils would be processed</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">int</span> shift = start_shift; <span class="comment">// set shift to first coil in first register</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> ind = 0; ind &lt;= Divide_Up(start_shift + modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>, 16); ind++)</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> { </div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//----SET MASK FOR COILS REGISTER----</span></div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> mask_for_coils = 0;</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">for</span>(; shift &lt; 0x10; shift++)</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> mask_for_coils |= 1&lt;&lt;(shift); <span class="comment">// choose certain coil</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(++coil_cnt &gt;= 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="l00219" name="l00219"></a><span class="lineno"> 219</span> <span class="keywordflow">break</span>;</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> shift = 0; <span class="comment">// set shift to zero for the next step</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> </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="comment">//-----------WRITE COILS-------------</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// get current coils</span></div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> temp_reg = *(coils+ind);</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// set coils</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> setted_coils = ByteSwap16(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind]) &lt;&lt; start_shift;</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> <span class="keywordflow">if</span>(ind &gt; 0)</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> setted_coils |= ((ByteSwap16(modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#aacbc6754621bd84742cd6c2ba65ad094">MbData</a>[ind-1]) &lt;&lt; start_shift) &gt;&gt; 16);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> }</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// write coils</span></div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> *(coils+ind) = setted_coils &amp; mask_for_coils; </div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="comment">// restore untouched coils</span></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> *(coils+ind) |= temp_reg&amp;(~mask_for_coils);</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> </div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keywordflow">if</span>(coil_cnt &gt;= modbus_msg-&gt;<a class="code hl_variable" href="struct_r_s___msg_type_def.html#a1ccb2bf492218a6ae3a5b6ad5cd4c82f">Qnt</a>) <span class="comment">// if all coils written - break cycle</span></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <span class="keywordflow">break</span>; <span class="comment">// *kind of unnecessary</span></div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">return</span> 1;</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span>}</div>
</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="preprocessor">#endif </span><span class="comment">//MODBUS_ENABLE_COILS</span></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_ga39a02e8e4911a74a619d2ef29adcbad8"><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#ga39a02e8e4911a74a619d2ef29adcbad8">MB_Process_Read_Coils</a></div><div class="ttdeci">uint8_t MB_Process_Read_Coils(RS_MsgTypeDef *modbus_msg)</div><div class="ttdoc">Обработать функцию Read Coils (01 - 0x01).</div><div class="ttdef"><b>Definition</b> <a href="#l00103">modbus_coils.c:103</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_ga6f4498cec8634820025aaa9c4623ba55"><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#ga6f4498cec8634820025aaa9c4623ba55">MB_Process_Write_Miltuple_Coils</a></div><div class="ttdeci">uint8_t MB_Process_Write_Miltuple_Coils(RS_MsgTypeDef *modbus_msg)</div><div class="ttdoc">Обработать функцию Write Multiple Coils (15 - 0x0F).</div><div class="ttdef"><b>Definition</b> <a href="#l00187">modbus_coils.c:187</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_ga918102931c9125a5e44a30e103d17e14"><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#ga918102931c9125a5e44a30e103d17e14">MB_Process_Write_Single_Coil</a></div><div class="ttdeci">uint8_t MB_Process_Write_Single_Coil(RS_MsgTypeDef *modbus_msg)</div><div class="ttdoc">Обработать функцию Write Single Coils (05 - 0x05).</div><div class="ttdef"><b>Definition</b> <a href="#l00156">modbus_coils.c:156</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="____modbus__data_8c_source.html#l00119">__modbus_data.c:119</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_html_ga82334048256e266170a4b3373be59b59"><div class="ttname"><a href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga82334048256e266170a4b3373be59b59">MB_Coil_Read_Global</a></div><div class="ttdeci">uint16_t MB_Coil_Read_Global(uint16_t Addr, MB_ExceptionTypeDef *Exception)</div><div class="ttdoc">Считать коил по глобальному адресу.</div><div class="ttdef"><b>Definition</b> <a href="#l00074">modbus_coils.c:74</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_html_ga8ccf569b78a17a10ac7c80d52730753a"><div class="ttname"><a href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#ga8ccf569b78a17a10ac7c80d52730753a">MB_CoilsOpTypeDef</a></div><div class="ttdeci">MB_CoilsOpTypeDef</div><div class="ttdoc">Enum for coils operation.</div><div class="ttdef"><b>Definition</b> <a href="modbus__coils_8h_source.html#l00056">modbus_coils.h:57</a></div></div>
<div class="ttc" id="agroup___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s_html_gae9b8595911d93cfbf8597f3356a494cc"><div class="ttname"><a href="group___m_o_d_b_u_s___d_a_t_a___a_c_c_e_s_s___f_u_n_c_t_i_o_n_s.html#gae9b8595911d93cfbf8597f3356a494cc">MB_Coil_Write_Global</a></div><div class="ttdeci">MB_ExceptionTypeDef MB_Coil_Write_Global(uint16_t Addr, MB_CoilsOpTypeDef WriteVal)</div><div class="ttdoc">Выставить/сбросить коил по глобальному адресу.</div><div class="ttdef"><b>Definition</b> <a href="#l00034">modbus_coils.c:34</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_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="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="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_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_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_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__coils_8c.html">modbus_coils.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>