Modbus 0.3
Библиотека Modbus для STM
Loading...
Searching...
No Matches
modbus_devid.c
Go to the documentation of this file.
1/**
2*******************************************************************************
3* @file modbus_devid.c
4* @brief Реализация идентификаторов устройства Modbus
5*******************************************************************************
6* @details
7Модуль обработки запросов идентификации устройства через MEI-тип 0x0E:
8- Формирование иерархии объектов идентификации
9- Поддержка потоковой передачи при большом количестве объектов
10- Автоматический расчет MoreFollows флагов
11
12@section stream Потоковая передача:
13При большом количестве объектов идентификация разбивается на несколько
14сообщений с установкой флага MoreFollows и указанием NextObjId для
15продолжения чтения в следующем запросе.
16******************************************************************************/
17#include "modbus_devid.h"
18
19#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS
20
21MB_DeviceIdentificationsTypeDef MB_DEVID; ///< Глобальная структура идентификаторов устройства
22
23
24
25
26/**
27 * @brief Записать Один Объект Идентификатора в массив данных
28 * @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
29 * @return obj Объект для записи.
30 */
31void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj)
32{
33 mbdata[(*ind)++] = obj->length;
34 for (int i = 0; i < obj->length; i++)
35 {
36 mbdata[(*ind)++] = obj->name[i];
37 }
38}
39
40
41/**
42 * @brief Записать Массив Объектов Идентификатора в массив данных
43 * @param mbdata Указатель на массив данных в структуре RS_MsgTypeDef.
44 * @return obj Объект для записи.
45 */
46void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj)
47{
49 unsigned objidtmp = modbus_msg->DevId.NextObjId;
50 modbus_msg->Except_Code = ET_NO_ERRORS;
51
52 /* Define number of object in one message */
53 unsigned lastobjid = 0;
54 for(int i = 0; i < DATA_SIZE*2;)
55 {
56 /* Если объект за пределами допутимого - выходим из цикла */
57 if(objidtmp >= 0xFF + MODBUS_NUMB_OF_USEROBJECTS)
58 break;
59
60 i += 2;
61 i += obj[objidtmp].length;
62 /* Если все еще помещается в массив переходим на следующий объект */
63 if(i < DATA_SIZE*2)
64 {
65 objidtmp++;
66 }
67
68 /* Если объекты для записи закончились - выходим из цикла*/
69 if(objidtmp > maxidofobj)
70 break;
71 }
72 lastobjid = objidtmp-1;
73
74
75 /* Fill message with objects data */
76 char *mbdata = (char *)&modbus_msg->MbData;
77 unsigned ind = 0;
78 unsigned objid = modbus_msg->DevId.NextObjId;
79 for(; objid <= lastobjid; objid++)
80 {
81 mbdata[ind++] = objid;
82 MB_WriteSingleObjectToMessage(mbdata, &ind, &obj[objid]);
83 }
84 objid--;
85
86 if(modbus_msg->ByteCnt != 0)
87 {
88 modbus_msg->ByteCnt = ind;
89 modbus_msg->DevId.NextObjId = lastobjid+1;
90 if(objid == maxidofobj)
91 {
92 modbus_msg->DevId.MoreFollows = 0;
93 }
94 else
95 {
96 modbus_msg->DevId.MoreFollows = 0xFF;
97 }
98 }
99 else
100 {
102 }
103}
104
105
106/**
107 * @brief Обработать функцию Read Device Identifications (43/14 - 0x2B/0E).
108 * @param modbus_msg Указатель на структуру собщения modbus.
109 * @return fMessageHandled Статус о результате обработки комманды.
110 * @details Обработка команды Write Single Register.
111 */
113{
114 modbus_msg->DevId.Conformity = MODBUS_DEVICE_CONFORMITY;
115
116 switch(modbus_msg->DevId.ReadDevId)
117 {
119 if (modbus_msg->DevId.NextObjId == 0)
120 {
121 modbus_msg->DevId.NextObjId = 0;
122 }
123
124 MB_WriteObjectsToMessage(modbus_msg, 2);
125 modbus_msg->DevId.NumbOfObj = 3;
126 break;
127
129 if (modbus_msg->DevId.NextObjId == 0)
130 {
131 modbus_msg->DevId.NextObjId = 3;
132 }
133
134 MB_WriteObjectsToMessage(modbus_msg, 6);
135 modbus_msg->DevId.NumbOfObj = 4;
136 break;
137
140 {
142 break;
143 }
144
145 if (modbus_msg->DevId.NextObjId == 0)
146 {
147 modbus_msg->DevId.NextObjId = 0x80;
148 }
149
151 modbus_msg->DevId.NumbOfObj = MODBUS_NUMB_OF_USEROBJECTS;
152 break;
153
155 MB_WriteObjectsToMessage(modbus_msg, modbus_msg->DevId.NextObjId);
156 modbus_msg->DevId.NumbOfObj = 1;
157 break;
158 default:
159 return 0;
160 }
161
162 if(modbus_msg->Except_Code != ET_NO_ERRORS)
163 {
164 return 0;
165 }
166 else
167 {
168 return 1;
169 }
170}
171
172
173
174/**
175 * @brief Инициализация идентификаторов.
176 */
178{
179 MB_ObjectInit(&MB_DEVID.VendorName, MODBUS_VENDOR_NAME);
180 MB_ObjectInit(&MB_DEVID.ProductCode, MODBUS_PRODUCT_CODE);
181 MB_ObjectInit(&MB_DEVID.Revision, MODBUS_REVISION);
182 MB_ObjectInit(&MB_DEVID.VendorUrl, MODBUS_VENDOR_URL);
183 MB_ObjectInit(&MB_DEVID.ProductName, MODBUS_PRODUCT_NAME);
184 MB_ObjectInit(&MB_DEVID.ModelName, MODBUS_MODEL_NAME);
185
186#if defined(MODBUS_USEROBJECT_0_NAME) && MODBUS_NUMB_OF_USEROBJECTS>0
188#endif
189#if defined(MODBUS_USEROBJECT_1_NAME) && MODBUS_NUMB_OF_USEROBJECTS>1
190 MB_ObjectInit(&MB_DEVID.User[1], MODBUS_USEROBJECT_1_NAME);
191#endif
192#if defined(MODBUS_USEROBJECT_2_NAME) && MODBUS_NUMB_OF_USEROBJECTS>2
193 MB_ObjectInit(&MB_DEVID.User[2], MODBUS_USEROBJECT_2_NAME);
194#endif
195#if defined(MODBUS_USEROBJECT_3_NAME) && MODBUS_NUMB_OF_USEROBJECTS>3
196 MB_ObjectInit(&MB_DEVID.User[3], MODBUS_USEROBJECT_3_NAME);
197#endif
198#if defined(MODBUS_USEROBJECT_4_NAME) && MODBUS_NUMB_OF_USEROBJECTS>4
199 MB_ObjectInit(&MB_DEVID.User[4], MODBUS_USEROBJECT_4_NAME);
200#endif
201#if defined(MODBUS_USEROBJECT_5_NAME) && MODBUS_NUMB_OF_USEROBJECTS>5
202 MB_ObjectInit(&MB_DEVID.User[5], MODBUS_USEROBJECT_5_NAME);
203#endif
204#if defined(MODBUS_USEROBJECT_6_NAME) && MODBUS_NUMB_OF_USEROBJECTS>6
205 MB_ObjectInit(&MB_DEVID.User[6], MODBUS_USEROBJECT_6_NAME);
206#endif
207#if defined(MODBUS_USEROBJECT_7_NAME) && MODBUS_NUMB_OF_USEROBJECTS>7
208 MB_ObjectInit(&MB_DEVID.User[7], MODBUS_USEROBJECT_7_NAME);
209#endif
210#if defined(MODBUS_USEROBJECT_8_NAME) && MODBUS_NUMB_OF_USEROBJECTS>8
211 MB_ObjectInit(&MB_DEVID.User[8], MODBUS_USEROBJECT_8_NAME);
212#endif
213#if defined(MODBUS_USEROBJECT_9_NAME) && MODBUS_NUMB_OF_USEROBJECTS>9
214 MB_ObjectInit(&MB_DEVID.User[9], MODBUS_USEROBJECT_9_NAME);
215#endif
216#if defined(MODBUS_USEROBJECT_10_NAME) && MODBUS_NUMB_OF_USEROBJECTS>10
217 MB_ObjectInit(&MB_DEVID.User[10], MODBUS_USEROBJECT_10_NAME);
218#endif
219#if defined(MODBUS_USEROBJECT_11_NAME) && MODBUS_NUMB_OF_USEROBJECTS>11
220 MB_ObjectInit(&MB_DEVID.User[11], MODBUS_USEROBJECT_11_NAME);
221#endif
222#if defined(MODBUS_USEROBJECT_12_NAME) && MODBUS_NUMB_OF_USEROBJECTS>12
223 MB_ObjectInit(&MB_DEVID.User[12], MODBUS_USEROBJECT_12_NAME);
224#endif
225#if defined(MODBUS_USEROBJECT_13_NAME) && MODBUS_NUMB_OF_USEROBJECTS>13
226 MB_ObjectInit(&MB_DEVID.User[13], MODBUS_USEROBJECT_13_NAME);
227#endif
228#if defined(MODBUS_USEROBJECT_14_NAME) && MODBUS_NUMB_OF_USEROBJECTS>14
229 MB_ObjectInit(&MB_DEVID.User[14], MODBUS_USEROBJECT_14_NAME);
230#endif
231#if defined(MODBUS_USEROBJECT_15_NAME) && MODBUS_NUMB_OF_USEROBJECTS>15
232 MB_ObjectInit(&MB_DEVID.User[15], MODBUS_USEROBJECT_15_NAME);
233#endif
234#if defined(MODBUS_USEROBJECT_16_NAME) && MODBUS_NUMB_OF_USEROBJECTS>16
235 MB_ObjectInit(&MB_DEVID.User[16], MODBUS_USEROBJECT_16_NAME);
236#endif
237#if defined(MODBUS_USEROBJECT_17_NAME) && MODBUS_NUMB_OF_USEROBJECTS>17
238 MB_ObjectInit(&MB_DEVID.User[17], MODBUS_USEROBJECT_17_NAME);
239#endif
240#if defined(MODBUS_USEROBJECT_18_NAME) && MODBUS_NUMB_OF_USEROBJECTS>18
241 MB_ObjectInit(&MB_DEVID.User[18], MODBUS_USEROBJECT_18_NAME);
242#endif
243#if defined(MODBUS_USEROBJECT_19_NAME) && MODBUS_NUMB_OF_USEROBJECTS>19
244 MB_ObjectInit(&MB_DEVID.User[19], MODBUS_USEROBJECT_19_NAME);
245#endif
246#if defined(MODBUS_USEROBJECT_20_NAME) && MODBUS_NUMB_OF_USEROBJECTS>20
247 MB_ObjectInit(&MB_DEVID.User[20], MODBUS_USEROBJECT_20_NAME);
248#endif
249#if defined(MODBUS_USEROBJECT_21_NAME) && MODBUS_NUMB_OF_USEROBJECTS>21
250 MB_ObjectInit(&MB_DEVID.User[21], MODBUS_USEROBJECT_21_NAME);
251#endif
252#if defined(MODBUS_USEROBJECT_22_NAME) && MODBUS_NUMB_OF_USEROBJECTS>22
253 MB_ObjectInit(&MB_DEVID.User[22], MODBUS_USEROBJECT_22_NAME);
254#endif
255#if defined(MODBUS_USEROBJECT_23_NAME) && MODBUS_NUMB_OF_USEROBJECTS>23
256 MB_ObjectInit(&MB_DEVID.User[23], MODBUS_USEROBJECT_23_NAME);
257#endif
258#if defined(MODBUS_USEROBJECT_24_NAME) && MODBUS_NUMB_OF_USEROBJECTS>24
259 MB_ObjectInit(&MB_DEVID.User[24], MODBUS_USEROBJECT_24_NAME);
260#endif
261#if defined(MODBUS_USEROBJECT_25_NAME) && MODBUS_NUMB_OF_USEROBJECTS>25
262 MB_ObjectInit(&MB_DEVID.User[25], MODBUS_USEROBJECT_25_NAME);
263#endif
264#if defined(MODBUS_USEROBJECT_26_NAME) && MODBUS_NUMB_OF_USEROBJECTS>26
265 MB_ObjectInit(&MB_DEVID.User[26], MODBUS_USEROBJECT_26_NAME);
266#endif
267#if defined(MODBUS_USEROBJECT_27_NAME) && MODBUS_NUMB_OF_USEROBJECTS>27
268 MB_ObjectInit(&MB_DEVID.User[27], MODBUS_USEROBJECT_27_NAME);
269#endif
270#if defined(MODBUS_USEROBJECT_28_NAME) && MODBUS_NUMB_OF_USEROBJECTS>28
271 MB_ObjectInit(&MB_DEVID.User[28], MODBUS_USEROBJECT_28_NAME);
272#endif
273#if defined(MODBUS_USEROBJECT_29_NAME) && MODBUS_NUMB_OF_USEROBJECTS>29
274 MB_ObjectInit(&MB_DEVID.User[29], MODBUS_USEROBJECT_29_NAME);
275#endif
276#if defined(MODBUS_USEROBJECT_30_NAME) && MODBUS_NUMB_OF_USEROBJECTS>30
277 MB_ObjectInit(&MB_DEVID.User[30], MODBUS_USEROBJECT_30_NAME);
278#endif
279#if defined(MODBUS_USEROBJECT_31_NAME) && MODBUS_NUMB_OF_USEROBJECTS>31
280 MB_ObjectInit(&MB_DEVID.User[31], MODBUS_USEROBJECT_31_NAME);
281#endif
282#if defined(MODBUS_USEROBJECT_32_NAME) && MODBUS_NUMB_OF_USEROBJECTS>32
283 MB_ObjectInit(&MB_DEVID.User[32], MODBUS_USEROBJECT_32_NAME);
284#endif
285#if defined(MODBUS_USEROBJECT_33_NAME) && MODBUS_NUMB_OF_USEROBJECTS>33
286 MB_ObjectInit(&MB_DEVID.User[33], MODBUS_USEROBJECT_33_NAME);
287#endif
288#if defined(MODBUS_USEROBJECT_34_NAME) && MODBUS_NUMB_OF_USEROBJECTS>34
289 MB_ObjectInit(&MB_DEVID.User[34], MODBUS_USEROBJECT_34_NAME);
290#endif
291#if defined(MODBUS_USEROBJECT_35_NAME) && MODBUS_NUMB_OF_USEROBJECTS>35
292 MB_ObjectInit(&MB_DEVID.User[35], MODBUS_USEROBJECT_35_NAME);
293#endif
294#if defined(MODBUS_USEROBJECT_36_NAME) && MODBUS_NUMB_OF_USEROBJECTS>36
295 MB_ObjectInit(&MB_DEVID.User[36], MODBUS_USEROBJECT_36_NAME);
296#endif
297#if defined(MODBUS_USEROBJECT_37_NAME) && MODBUS_NUMB_OF_USEROBJECTS>37
298 MB_ObjectInit(&MB_DEVID.User[37], MODBUS_USEROBJECT_37_NAME);
299#endif
300#if defined(MODBUS_USEROBJECT_38_NAME) && MODBUS_NUMB_OF_USEROBJECTS>38
301 MB_ObjectInit(&MB_DEVID.User[38], MODBUS_USEROBJECT_38_NAME);
302#endif
303#if defined(MODBUS_USEROBJECT_39_NAME) && MODBUS_NUMB_OF_USEROBJECTS>39
304 MB_ObjectInit(&MB_DEVID.User[39], MODBUS_USEROBJECT_39_NAME);
305#endif
306#if defined(MODBUS_USEROBJECT_40_NAME) && MODBUS_NUMB_OF_USEROBJECTS>40
307 MB_ObjectInit(&MB_DEVID.User[40], MODBUS_USEROBJECT_40_NAME);
308#endif
309#if defined(MODBUS_USEROBJECT_41_NAME) && MODBUS_NUMB_OF_USEROBJECTS>41
310 MB_ObjectInit(&MB_DEVID.User[41], MODBUS_USEROBJECT_41_NAME);
311#endif
312#if defined(MODBUS_USEROBJECT_42_NAME) && MODBUS_NUMB_OF_USEROBJECTS>42
313 MB_ObjectInit(&MB_DEVID.User[42], MODBUS_USEROBJECT_42_NAME);
314#endif
315#if defined(MODBUS_USEROBJECT_43_NAME) && MODBUS_NUMB_OF_USEROBJECTS>43
316 MB_ObjectInit(&MB_DEVID.User[43], MODBUS_USEROBJECT_43_NAME);
317#endif
318#if defined(MODBUS_USEROBJECT_44_NAME) && MODBUS_NUMB_OF_USEROBJECTS>44
319 MB_ObjectInit(&MB_DEVID.User[44], MODBUS_USEROBJECT_44_NAME);
320#endif
321#if defined(MODBUS_USEROBJECT_45_NAME) && MODBUS_NUMB_OF_USEROBJECTS>45
322 MB_ObjectInit(&MB_DEVID.User[45], MODBUS_USEROBJECT_45_NAME);
323#endif
324#if defined(MODBUS_USEROBJECT_46_NAME) && MODBUS_NUMB_OF_USEROBJECTS>46
325 MB_ObjectInit(&MB_DEVID.User[46], MODBUS_USEROBJECT_46_NAME);
326#endif
327#if defined(MODBUS_USEROBJECT_47_NAME) && MODBUS_NUMB_OF_USEROBJECTS>47
328 MB_ObjectInit(&MB_DEVID.User[47], MODBUS_USEROBJECT_47_NAME);
329#endif
330#if defined(MODBUS_USEROBJECT_48_NAME) && MODBUS_NUMB_OF_USEROBJECTS>48
331 MB_ObjectInit(&MB_DEVID.User[48], MODBUS_USEROBJECT_48_NAME);
332#endif
333#if defined(MODBUS_USEROBJECT_49_NAME) && MODBUS_NUMB_OF_USEROBJECTS>49
334 MB_ObjectInit(&MB_DEVID.User[49], MODBUS_USEROBJECT_49_NAME);
335#endif
336#if defined(MODBUS_USEROBJECT_50_NAME) && MODBUS_NUMB_OF_USEROBJECTS>50
337 MB_ObjectInit(&MB_DEVID.User[50], MODBUS_USEROBJECT_50_NAME);
338#endif
339#if defined(MODBUS_USEROBJECT_51_NAME) && MODBUS_NUMB_OF_USEROBJECTS>51
340 MB_ObjectInit(&MB_DEVID.User[51], MODBUS_USEROBJECT_51_NAME);
341#endif
342#if defined(MODBUS_USEROBJECT_52_NAME) && MODBUS_NUMB_OF_USEROBJECTS>52
343 MB_ObjectInit(&MB_DEVID.User[52], MODBUS_USEROBJECT_52_NAME);
344#endif
345#if defined(MODBUS_USEROBJECT_53_NAME) && MODBUS_NUMB_OF_USEROBJECTS>53
346 MB_ObjectInit(&MB_DEVID.User[53], MODBUS_USEROBJECT_53_NAME);
347#endif
348#if defined(MODBUS_USEROBJECT_54_NAME) && MODBUS_NUMB_OF_USEROBJECTS>54
349 MB_ObjectInit(&MB_DEVID.User[54], MODBUS_USEROBJECT_54_NAME);
350#endif
351#if defined(MODBUS_USEROBJECT_55_NAME) && MODBUS_NUMB_OF_USEROBJECTS>55
352 MB_ObjectInit(&MB_DEVID.User[55], MODBUS_USEROBJECT_55_NAME);
353#endif
354#if defined(MODBUS_USEROBJECT_56_NAME) && MODBUS_NUMB_OF_USEROBJECTS>56
355 MB_ObjectInit(&MB_DEVID.User[56], MODBUS_USEROBJECT_56_NAME);
356#endif
357#if defined(MODBUS_USEROBJECT_57_NAME) && MODBUS_NUMB_OF_USEROBJECTS>57
358 MB_ObjectInit(&MB_DEVID.User[57], MODBUS_USEROBJECT_57_NAME);
359#endif
360#if defined(MODBUS_USEROBJECT_58_NAME) && MODBUS_NUMB_OF_USEROBJECTS>58
361 MB_ObjectInit(&MB_DEVID.User[58], MODBUS_USEROBJECT_58_NAME);
362#endif
363#if defined(MODBUS_USEROBJECT_59_NAME) && MODBUS_NUMB_OF_USEROBJECTS>59
364 MB_ObjectInit(&MB_DEVID.User[59], MODBUS_USEROBJECT_59_NAME);
365#endif
366#if defined(MODBUS_USEROBJECT_60_NAME) && MODBUS_NUMB_OF_USEROBJECTS>60
367 MB_ObjectInit(&MB_DEVID.User[60], MODBUS_USEROBJECT_60_NAME);
368#endif
369#if defined(MODBUS_USEROBJECT_61_NAME) && MODBUS_NUMB_OF_USEROBJECTS>61
370 MB_ObjectInit(&MB_DEVID.User[61], MODBUS_USEROBJECT_61_NAME);
371#endif
372#if defined(MODBUS_USEROBJECT_62_NAME) && MODBUS_NUMB_OF_USEROBJECTS>62
373 MB_ObjectInit(&MB_DEVID.User[62], MODBUS_USEROBJECT_62_NAME);
374#endif
375#if defined(MODBUS_USEROBJECT_63_NAME) && MODBUS_NUMB_OF_USEROBJECTS>63
376 MB_ObjectInit(&MB_DEVID.User[63], MODBUS_USEROBJECT_63_NAME);
377#endif
378#if defined(MODBUS_USEROBJECT_64_NAME) && MODBUS_NUMB_OF_USEROBJECTS>64
379 MB_ObjectInit(&MB_DEVID.User[64], MODBUS_USEROBJECT_64_NAME);
380#endif
381#if defined(MODBUS_USEROBJECT_65_NAME) && MODBUS_NUMB_OF_USEROBJECTS>65
382 MB_ObjectInit(&MB_DEVID.User[65], MODBUS_USEROBJECT_65_NAME);
383#endif
384#if defined(MODBUS_USEROBJECT_66_NAME) && MODBUS_NUMB_OF_USEROBJECTS>66
385 MB_ObjectInit(&MB_DEVID.User[66], MODBUS_USEROBJECT_66_NAME);
386#endif
387#if defined(MODBUS_USEROBJECT_67_NAME) && MODBUS_NUMB_OF_USEROBJECTS>67
388 MB_ObjectInit(&MB_DEVID.User[67], MODBUS_USEROBJECT_67_NAME);
389#endif
390#if defined(MODBUS_USEROBJECT_68_NAME) && MODBUS_NUMB_OF_USEROBJECTS>68
391 MB_ObjectInit(&MB_DEVID.User[68], MODBUS_USEROBJECT_68_NAME);
392#endif
393#if defined(MODBUS_USEROBJECT_69_NAME) && MODBUS_NUMB_OF_USEROBJECTS>69
394 MB_ObjectInit(&MB_DEVID.User[69], MODBUS_USEROBJECT_69_NAME);
395#endif
396#if defined(MODBUS_USEROBJECT_70_NAME) && MODBUS_NUMB_OF_USEROBJECTS>70
397 MB_ObjectInit(&MB_DEVID.User[70], MODBUS_USEROBJECT_70_NAME);
398#endif
399#if defined(MODBUS_USEROBJECT_71_NAME) && MODBUS_NUMB_OF_USEROBJECTS>71
400 MB_ObjectInit(&MB_DEVID.User[71], MODBUS_USEROBJECT_71_NAME);
401#endif
402#if defined(MODBUS_USEROBJECT_72_NAME) && MODBUS_NUMB_OF_USEROBJECTS>72
403 MB_ObjectInit(&MB_DEVID.User[72], MODBUS_USEROBJECT_72_NAME);
404#endif
405#if defined(MODBUS_USEROBJECT_73_NAME) && MODBUS_NUMB_OF_USEROBJECTS>73
406 MB_ObjectInit(&MB_DEVID.User[73], MODBUS_USEROBJECT_73_NAME);
407#endif
408#if defined(MODBUS_USEROBJECT_74_NAME) && MODBUS_NUMB_OF_USEROBJECTS>74
409 MB_ObjectInit(&MB_DEVID.User[74], MODBUS_USEROBJECT_74_NAME);
410#endif
411#if defined(MODBUS_USEROBJECT_75_NAME) && MODBUS_NUMB_OF_USEROBJECTS>75
412 MB_ObjectInit(&MB_DEVID.User[75], MODBUS_USEROBJECT_75_NAME);
413#endif
414#if defined(MODBUS_USEROBJECT_76_NAME) && MODBUS_NUMB_OF_USEROBJECTS>76
415 MB_ObjectInit(&MB_DEVID.User[76], MODBUS_USEROBJECT_76_NAME);
416#endif
417#if defined(MODBUS_USEROBJECT_77_NAME) && MODBUS_NUMB_OF_USEROBJECTS>77
418 MB_ObjectInit(&MB_DEVID.User[77], MODBUS_USEROBJECT_77_NAME);
419#endif
420#if defined(MODBUS_USEROBJECT_78_NAME) && MODBUS_NUMB_OF_USEROBJECTS>78
421 MB_ObjectInit(&MB_DEVID.User[78], MODBUS_USEROBJECT_78_NAME);
422#endif
423#if defined(MODBUS_USEROBJECT_79_NAME) && MODBUS_NUMB_OF_USEROBJECTS>79
424 MB_ObjectInit(&MB_DEVID.User[79], MODBUS_USEROBJECT_79_NAME);
425#endif
426#if defined(MODBUS_USEROBJECT_80_NAME) && MODBUS_NUMB_OF_USEROBJECTS>80
427 MB_ObjectInit(&MB_DEVID.User[80], MODBUS_USEROBJECT_80_NAME);
428#endif
429#if defined(MODBUS_USEROBJECT_81_NAME) && MODBUS_NUMB_OF_USEROBJECTS>81
430 MB_ObjectInit(&MB_DEVID.User[81], MODBUS_USEROBJECT_81_NAME);
431#endif
432#if defined(MODBUS_USEROBJECT_82_NAME) && MODBUS_NUMB_OF_USEROBJECTS>82
433 MB_ObjectInit(&MB_DEVID.User[82], MODBUS_USEROBJECT_82_NAME);
434#endif
435#if defined(MODBUS_USEROBJECT_83_NAME) && MODBUS_NUMB_OF_USEROBJECTS>83
436 MB_ObjectInit(&MB_DEVID.User[83], MODBUS_USEROBJECT_83_NAME);
437#endif
438#if defined(MODBUS_USEROBJECT_84_NAME) && MODBUS_NUMB_OF_USEROBJECTS>84
439 MB_ObjectInit(&MB_DEVID.User[84], MODBUS_USEROBJECT_84_NAME);
440#endif
441#if defined(MODBUS_USEROBJECT_85_NAME) && MODBUS_NUMB_OF_USEROBJECTS>85
442 MB_ObjectInit(&MB_DEVID.User[85], MODBUS_USEROBJECT_85_NAME);
443#endif
444#if defined(MODBUS_USEROBJECT_86_NAME) && MODBUS_NUMB_OF_USEROBJECTS>86
445 MB_ObjectInit(&MB_DEVID.User[86], MODBUS_USEROBJECT_86_NAME);
446#endif
447#if defined(MODBUS_USEROBJECT_87_NAME) && MODBUS_NUMB_OF_USEROBJECTS>87
448 MB_ObjectInit(&MB_DEVID.User[87], MODBUS_USEROBJECT_87_NAME);
449#endif
450#if defined(MODBUS_USEROBJECT_88_NAME) && MODBUS_NUMB_OF_USEROBJECTS>88
451 MB_ObjectInit(&MB_DEVID.User[88], MODBUS_USEROBJECT_88_NAME);
452#endif
453#if defined(MODBUS_USEROBJECT_89_NAME) && MODBUS_NUMB_OF_USEROBJECTS>89
454 MB_ObjectInit(&MB_DEVID.User[89], MODBUS_USEROBJECT_89_NAME);
455#endif
456#if defined(MODBUS_USEROBJECT_90_NAME) && MODBUS_NUMB_OF_USEROBJECTS>90
457 MB_ObjectInit(&MB_DEVID.User[90], MODBUS_USEROBJECT_90_NAME);
458#endif
459#if defined(MODBUS_USEROBJECT_91_NAME) && MODBUS_NUMB_OF_USEROBJECTS>91
460 MB_ObjectInit(&MB_DEVID.User[91], MODBUS_USEROBJECT_91_NAME);
461#endif
462#if defined(MODBUS_USEROBJECT_92_NAME) && MODBUS_NUMB_OF_USEROBJECTS>92
463 MB_ObjectInit(&MB_DEVID.User[92], MODBUS_USEROBJECT_92_NAME);
464#endif
465#if defined(MODBUS_USEROBJECT_93_NAME) && MODBUS_NUMB_OF_USEROBJECTS>93
466 MB_ObjectInit(&MB_DEVID.User[93], MODBUS_USEROBJECT_93_NAME);
467#endif
468#if defined(MODBUS_USEROBJECT_94_NAME) && MODBUS_NUMB_OF_USEROBJECTS>94
469 MB_ObjectInit(&MB_DEVID.User[94], MODBUS_USEROBJECT_94_NAME);
470#endif
471#if defined(MODBUS_USEROBJECT_95_NAME) && MODBUS_NUMB_OF_USEROBJECTS>95
472 MB_ObjectInit(&MB_DEVID.User[95], MODBUS_USEROBJECT_95_NAME);
473#endif
474#if defined(MODBUS_USEROBJECT_96_NAME) && MODBUS_NUMB_OF_USEROBJECTS>96
475 MB_ObjectInit(&MB_DEVID.User[96], MODBUS_USEROBJECT_96_NAME);
476#endif
477#if defined(MODBUS_USEROBJECT_97_NAME) && MODBUS_NUMB_OF_USEROBJECTS>97
478 MB_ObjectInit(&MB_DEVID.User[97], MODBUS_USEROBJECT_97_NAME);
479#endif
480#if defined(MODBUS_USEROBJECT_98_NAME) && MODBUS_NUMB_OF_USEROBJECTS>98
481 MB_ObjectInit(&MB_DEVID.User[98], MODBUS_USEROBJECT_98_NAME);
482#endif
483#if defined(MODBUS_USEROBJECT_99_NAME) && MODBUS_NUMB_OF_USEROBJECTS>99
484 MB_ObjectInit(&MB_DEVID.User[99], MODBUS_USEROBJECT_99_NAME);
485#endif
486#if defined(MODBUS_USEROBJECT_100_NAME) && MODBUS_NUMB_OF_USEROBJECTS>100
487 MB_ObjectInit(&MB_DEVID.User[100], MODBUS_USEROBJECT_100_NAME);
488#endif
489#if defined(MODBUS_USEROBJECT_101_NAME) && MODBUS_NUMB_OF_USEROBJECTS>101
490 MB_ObjectInit(&MB_DEVID.User[101], MODBUS_USEROBJECT_101_NAME);
491#endif
492#if defined(MODBUS_USEROBJECT_102_NAME) && MODBUS_NUMB_OF_USEROBJECTS>102
493 MB_ObjectInit(&MB_DEVID.User[102], MODBUS_USEROBJECT_102_NAME);
494#endif
495#if defined(MODBUS_USEROBJECT_103_NAME) && MODBUS_NUMB_OF_USEROBJECTS>103
496 MB_ObjectInit(&MB_DEVID.User[103], MODBUS_USEROBJECT_103_NAME);
497#endif
498#if defined(MODBUS_USEROBJECT_104_NAME) && MODBUS_NUMB_OF_USEROBJECTS>104
499 MB_ObjectInit(&MB_DEVID.User[104], MODBUS_USEROBJECT_104_NAME);
500#endif
501#if defined(MODBUS_USEROBJECT_105_NAME) && MODBUS_NUMB_OF_USEROBJECTS>105
502 MB_ObjectInit(&MB_DEVID.User[105], MODBUS_USEROBJECT_105_NAME);
503#endif
504#if defined(MODBUS_USEROBJECT_106_NAME) && MODBUS_NUMB_OF_USEROBJECTS>106
505 MB_ObjectInit(&MB_DEVID.User[106], MODBUS_USEROBJECT_106_NAME);
506#endif
507#if defined(MODBUS_USEROBJECT_107_NAME) && MODBUS_NUMB_OF_USEROBJECTS>107
508 MB_ObjectInit(&MB_DEVID.User[107], MODBUS_USEROBJECT_107_NAME);
509#endif
510#if defined(MODBUS_USEROBJECT_108_NAME) && MODBUS_NUMB_OF_USEROBJECTS>108
511 MB_ObjectInit(&MB_DEVID.User[108], MODBUS_USEROBJECT_108_NAME);
512#endif
513#if defined(MODBUS_USEROBJECT_109_NAME) && MODBUS_NUMB_OF_USEROBJECTS>109
514 MB_ObjectInit(&MB_DEVID.User[109], MODBUS_USEROBJECT_109_NAME);
515#endif
516#if defined(MODBUS_USEROBJECT_110_NAME) && MODBUS_NUMB_OF_USEROBJECTS>110
517 MB_ObjectInit(&MB_DEVID.User[110], MODBUS_USEROBJECT_110_NAME);
518#endif
519#if defined(MODBUS_USEROBJECT_111_NAME) && MODBUS_NUMB_OF_USEROBJECTS>111
520 MB_ObjectInit(&MB_DEVID.User[111], MODBUS_USEROBJECT_111_NAME);
521#endif
522#if defined(MODBUS_USEROBJECT_112_NAME) && MODBUS_NUMB_OF_USEROBJECTS>112
523 MB_ObjectInit(&MB_DEVID.User[112], MODBUS_USEROBJECT_112_NAME);
524#endif
525#if defined(MODBUS_USEROBJECT_113_NAME) && MODBUS_NUMB_OF_USEROBJECTS>113
526 MB_ObjectInit(&MB_DEVID.User[113], MODBUS_USEROBJECT_113_NAME);
527#endif
528#if defined(MODBUS_USEROBJECT_114_NAME) && MODBUS_NUMB_OF_USEROBJECTS>114
529 MB_ObjectInit(&MB_DEVID.User[114], MODBUS_USEROBJECT_114_NAME);
530#endif
531#if defined(MODBUS_USEROBJECT_115_NAME) && MODBUS_NUMB_OF_USEROBJECTS>115
532 MB_ObjectInit(&MB_DEVID.User[115], MODBUS_USEROBJECT_115_NAME);
533#endif
534#if defined(MODBUS_USEROBJECT_116_NAME) && MODBUS_NUMB_OF_USEROBJECTS>116
535 MB_ObjectInit(&MB_DEVID.User[116], MODBUS_USEROBJECT_116_NAME);
536#endif
537#if defined(MODBUS_USEROBJECT_117_NAME) && MODBUS_NUMB_OF_USEROBJECTS>117
538 MB_ObjectInit(&MB_DEVID.User[117], MODBUS_USEROBJECT_117_NAME);
539#endif
540#if defined(MODBUS_USEROBJECT_118_NAME) && MODBUS_NUMB_OF_USEROBJECTS>118
541 MB_ObjectInit(&MB_DEVID.User[118], MODBUS_USEROBJECT_118_NAME);
542#endif
543#if defined(MODBUS_USEROBJECT_119_NAME) && MODBUS_NUMB_OF_USEROBJECTS>119
544 MB_ObjectInit(&MB_DEVID.User[119], MODBUS_USEROBJECT_119_NAME);
545#endif
546#if defined(MODBUS_USEROBJECT_120_NAME) && MODBUS_NUMB_OF_USEROBJECTS>120
547 MB_ObjectInit(&MB_DEVID.User[120], MODBUS_USEROBJECT_120_NAME);
548#endif
549#if defined(MODBUS_USEROBJECT_121_NAME) && MODBUS_NUMB_OF_USEROBJECTS>121
550 MB_ObjectInit(&MB_DEVID.User[121], MODBUS_USEROBJECT_121_NAME);
551#endif
552#if defined(MODBUS_USEROBJECT_122_NAME) && MODBUS_NUMB_OF_USEROBJECTS>122
553 MB_ObjectInit(&MB_DEVID.User[122], MODBUS_USEROBJECT_122_NAME);
554#endif
555#if defined(MODBUS_USEROBJECT_123_NAME) && MODBUS_NUMB_OF_USEROBJECTS>123
556 MB_ObjectInit(&MB_DEVID.User[123], MODBUS_USEROBJECT_123_NAME);
557#endif
558#if defined(MODBUS_USEROBJECT_124_NAME) && MODBUS_NUMB_OF_USEROBJECTS>124
559 MB_ObjectInit(&MB_DEVID.User[124], MODBUS_USEROBJECT_124_NAME);
560#endif
561#if defined(MODBUS_USEROBJECT_125_NAME) && MODBUS_NUMB_OF_USEROBJECTS>125
562 MB_ObjectInit(&MB_DEVID.User[125], MODBUS_USEROBJECT_125_NAME);
563#endif
564#if defined(MODBUS_USEROBJECT_126_NAME) && MODBUS_NUMB_OF_USEROBJECTS>126
565 MB_ObjectInit(&MB_DEVID.User[126], MODBUS_USEROBJECT_126_NAME);
566#endif
567#if defined(MODBUS_USEROBJECT_127_NAME) && MODBUS_NUMB_OF_USEROBJECTS>127
568 MB_ObjectInit(&MB_DEVID.User[127], MODBUS_USEROBJECT_127_NAME);
569#endif
570
571}
572
573#endif //MODBUS_ENABLE_DEVICE_IDENTIFICATIONS
uint8_t MB_Process_Read_Device_Identifications(RS_MsgTypeDef *modbus_msg)
Обработать функцию Read Device Identifications (43/14 - 0x2B/0E).
#define MODBUS_NUMB_OF_USEROBJECTS
Количество пользовательских объектов
#define MODBUS_USEROBJECT_0_NAME
Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT.
MB_DeviceIdentificationsTypeDef MB_DEVID
Глобальная структура идентификаторов устройства
void MB_DeviceInentificationInit(void)
Инициализация идентификаторов.
void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj)
Записать Один Объект Идентификатора в массив данных
#define MB_ObjectInit(_p_obj_, _userstring_)
Инициализация объектов
void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj)
Записать Массив Объектов Идентификатора в массив данных
#define DATA_SIZE
maximum number of data: DWORD (NOT MESSAGE SIZE)
Definition modbus_core.h:53
@ ET_ILLEGAL_DATA_VALUE
Значение, содержащееся в поле данных запроса, является недопустимой величиной
Definition modbus_core.h:81
@ ET_NO_ERRORS
no errors
Definition modbus_core.h:78
@ RID_REGULAR_IDENTIFICATIONS
Regular Device Identifications.
@ RID_SPEDIFIC_IDENTIFICATIONS
Specific Device Identifications.
@ RID_BASIC_IDENTIFICATIONS
Basic Device Identifications.
@ RID_EXTENDED_IDENTIFICATIONS
Extended Device Identifications.
Идентификаторы устройства Modbus.
uint8_t Conformity
Identification conformity level of the device and type of supported access MODBUS_DEVICE_CONFORMITY.
Структура со идентификаторами устройства модбас
Структура для объекта (идентификатора устройства модбас)
Structure for modbus messsage.
MB_ExceptionTypeDef Except_Code
Exception Code for the command.
MB_DevIdMsgTypeDef DevId
Read Device Identifications Header struct.
uint8_t ByteCnt
Quantity of bytes of data in message to transmit/receive.
uint16_t MbData[DATA_SIZE]
Modbus Data.