diff --git a/Src/modbus_devid.c b/Src/modbus_devid.c index f2c6f0d..eafb1d2 100644 --- a/Src/modbus_devid.c +++ b/Src/modbus_devid.c @@ -47,11 +47,16 @@ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj) { MB_DeviceObjectTypeDef *obj = (MB_DeviceObjectTypeDef *)&MB_DEVID; unsigned objidtmp = modbus_msg->DevId.NextObjId; - + modbus_msg->Except_Code = NO_ERRORS; + /* Define number of object in one message */ unsigned lastobjid = 0; for(int i = 0; i < DATA_SIZE*2;) { + /* Если объект за пределами допутимого - выходим из цикла */ + if(objidtmp >= 0xFF + MODBUS_NUMB_OF_USEROBJECTS) + break; + i += 2; i += obj[objidtmp].length; /* Если все еще помещается в массив переходим на следующий объект */ @@ -59,6 +64,7 @@ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj) { objidtmp++; } + /* Если объекты для записи закончились - выходим из цикла*/ if(objidtmp > maxidofobj) break; @@ -76,15 +82,23 @@ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj) MB_WriteSingleObjectToMessage(mbdata, &ind, &obj[objid]); } objid--; - modbus_msg->ByteCnt = ind; - modbus_msg->DevId.NextObjId = lastobjid+1; - if(objid == maxidofobj) + + if(modbus_msg->ByteCnt != 0) { - modbus_msg->DevId.MoreFollows = 0; + modbus_msg->ByteCnt = ind; + modbus_msg->DevId.NextObjId = lastobjid+1; + if(objid == maxidofobj) + { + modbus_msg->DevId.MoreFollows = 0; + } + else + { + modbus_msg->DevId.MoreFollows = 0xFF; + } } else { - modbus_msg->DevId.MoreFollows = 0xFF; + modbus_msg->Except_Code = ILLEGAL_DATA_VALUE; } } @@ -122,14 +136,15 @@ uint8_t MB_Process_Read_Device_Identifications(RS_MsgTypeDef *modbus_msg) case MB_EXTENDED_IDENTIFICATIONS: if(MODBUS_NUMB_OF_USEROBJECTS <= 0 || MODBUS_NUMB_OF_USEROBJECTS > 128) { - return 0; + modbus_msg->Except_Code = ILLEGAL_DATA_VALUE; + break; } if (modbus_msg->DevId.NextObjId == 0) { modbus_msg->DevId.NextObjId = 0x80; } - + MB_WriteObjectsToMessage(modbus_msg, 0x80+MODBUS_NUMB_OF_USEROBJECTS); modbus_msg->DevId.NumbOfObj = MODBUS_NUMB_OF_USEROBJECTS; break; @@ -141,7 +156,15 @@ uint8_t MB_Process_Read_Device_Identifications(RS_MsgTypeDef *modbus_msg) default: return 0; } - return 1; + + if(modbus_msg->Except_Code != NO_ERRORS) + { + return 0; + } + else + { + return 1; + } } @@ -158,390 +181,391 @@ void MB_DeviceInentificationInit(void) MB_ObjectInit(&MB_DEVID.ProductName, MODBUS_PRODUCT_NAME); MB_ObjectInit(&MB_DEVID.ModelName, MODBUS_MODEL_NAME); -#ifdef MODBUS_USEROBJECT_0_NAME - MB_ObjectInit(&MB_DEVID.User[0], MODBUS_USEROBJECT_0_NAME); +#if defined(MODBUS_USEROBJECT_0_NAME) && MODBUS_NUMB_OF_USEROBJECTS>0 + MB_ObjectInit(&MB_DEVID.User[0], MODBUS_USEROBJECT_0_NAME); #endif -#ifdef MODBUS_USEROBJECT_1_NAME - MB_ObjectInit(&MB_DEVID.User[1], MODBUS_USEROBJECT_1_NAME); +#if defined(MODBUS_USEROBJECT_1_NAME) && MODBUS_NUMB_OF_USEROBJECTS>1 + MB_ObjectInit(&MB_DEVID.User[1], MODBUS_USEROBJECT_1_NAME); #endif -#ifdef MODBUS_USEROBJECT_2_NAME - MB_ObjectInit(&MB_DEVID.User[2], MODBUS_USEROBJECT_2_NAME); +#if defined(MODBUS_USEROBJECT_2_NAME) && MODBUS_NUMB_OF_USEROBJECTS>2 + MB_ObjectInit(&MB_DEVID.User[2], MODBUS_USEROBJECT_2_NAME); #endif -#ifdef MODBUS_USEROBJECT_3_NAME - MB_ObjectInit(&MB_DEVID.User[3], MODBUS_USEROBJECT_3_NAME); +#if defined(MODBUS_USEROBJECT_3_NAME) && MODBUS_NUMB_OF_USEROBJECTS>3 + MB_ObjectInit(&MB_DEVID.User[3], MODBUS_USEROBJECT_3_NAME); #endif -#ifdef MODBUS_USEROBJECT_4_NAME - MB_ObjectInit(&MB_DEVID.User[4], MODBUS_USEROBJECT_4_NAME); +#if defined(MODBUS_USEROBJECT_4_NAME) && MODBUS_NUMB_OF_USEROBJECTS>4 + MB_ObjectInit(&MB_DEVID.User[4], MODBUS_USEROBJECT_4_NAME); #endif -#ifdef MODBUS_USEROBJECT_5_NAME - MB_ObjectInit(&MB_DEVID.User[5], MODBUS_USEROBJECT_5_NAME); +#if defined(MODBUS_USEROBJECT_5_NAME) && MODBUS_NUMB_OF_USEROBJECTS>5 + MB_ObjectInit(&MB_DEVID.User[5], MODBUS_USEROBJECT_5_NAME); #endif -#ifdef MODBUS_USEROBJECT_6_NAME - MB_ObjectInit(&MB_DEVID.User[6], MODBUS_USEROBJECT_6_NAME); +#if defined(MODBUS_USEROBJECT_6_NAME) && MODBUS_NUMB_OF_USEROBJECTS>6 + MB_ObjectInit(&MB_DEVID.User[6], MODBUS_USEROBJECT_6_NAME); #endif -#ifdef MODBUS_USEROBJECT_7_NAME - MB_ObjectInit(&MB_DEVID.User[7], MODBUS_USEROBJECT_7_NAME); +#if defined(MODBUS_USEROBJECT_7_NAME) && MODBUS_NUMB_OF_USEROBJECTS>7 + MB_ObjectInit(&MB_DEVID.User[7], MODBUS_USEROBJECT_7_NAME); #endif -#ifdef MODBUS_USEROBJECT_8_NAME - MB_ObjectInit(&MB_DEVID.User[8], MODBUS_USEROBJECT_8_NAME); +#if defined(MODBUS_USEROBJECT_8_NAME) && MODBUS_NUMB_OF_USEROBJECTS>8 + MB_ObjectInit(&MB_DEVID.User[8], MODBUS_USEROBJECT_8_NAME); #endif -#ifdef MODBUS_USEROBJECT_9_NAME - MB_ObjectInit(&MB_DEVID.User[9], MODBUS_USEROBJECT_9_NAME); +#if defined(MODBUS_USEROBJECT_9_NAME) && MODBUS_NUMB_OF_USEROBJECTS>9 + MB_ObjectInit(&MB_DEVID.User[9], MODBUS_USEROBJECT_9_NAME); #endif -#ifdef MODBUS_USEROBJECT_10_NAME - MB_ObjectInit(&MB_DEVID.User[10], MODBUS_USEROBJECT_10_NAME); +#if defined(MODBUS_USEROBJECT_10_NAME) && MODBUS_NUMB_OF_USEROBJECTS>10 + MB_ObjectInit(&MB_DEVID.User[10], MODBUS_USEROBJECT_10_NAME); #endif -#ifdef MODBUS_USEROBJECT_11_NAME - MB_ObjectInit(&MB_DEVID.User[11], MODBUS_USEROBJECT_11_NAME); +#if defined(MODBUS_USEROBJECT_11_NAME) && MODBUS_NUMB_OF_USEROBJECTS>11 + MB_ObjectInit(&MB_DEVID.User[11], MODBUS_USEROBJECT_11_NAME); #endif -#ifdef MODBUS_USEROBJECT_12_NAME - MB_ObjectInit(&MB_DEVID.User[12], MODBUS_USEROBJECT_12_NAME); +#if defined(MODBUS_USEROBJECT_12_NAME) && MODBUS_NUMB_OF_USEROBJECTS>12 + MB_ObjectInit(&MB_DEVID.User[12], MODBUS_USEROBJECT_12_NAME); #endif -#ifdef MODBUS_USEROBJECT_13_NAME +#if defined(MODBUS_USEROBJECT_13_NAME) && MODBUS_NUMB_OF_USEROBJECTS>13 MB_ObjectInit(&MB_DEVID.User[13], MODBUS_USEROBJECT_13_NAME); #endif -#ifdef MODBUS_USEROBJECT_14_NAME +#if defined(MODBUS_USEROBJECT_14_NAME) && MODBUS_NUMB_OF_USEROBJECTS>14 MB_ObjectInit(&MB_DEVID.User[14], MODBUS_USEROBJECT_14_NAME); #endif -#ifdef MODBUS_USEROBJECT_15_NAME +#if defined(MODBUS_USEROBJECT_15_NAME) && MODBUS_NUMB_OF_USEROBJECTS>15 MB_ObjectInit(&MB_DEVID.User[15], MODBUS_USEROBJECT_15_NAME); #endif -#ifdef MODBUS_USEROBJECT_16_NAME +#if defined(MODBUS_USEROBJECT_16_NAME) && MODBUS_NUMB_OF_USEROBJECTS>16 MB_ObjectInit(&MB_DEVID.User[16], MODBUS_USEROBJECT_16_NAME); #endif -#ifdef MODBUS_USEROBJECT_17_NAME +#if defined(MODBUS_USEROBJECT_17_NAME) && MODBUS_NUMB_OF_USEROBJECTS>17 MB_ObjectInit(&MB_DEVID.User[17], MODBUS_USEROBJECT_17_NAME); #endif -#ifdef MODBUS_USEROBJECT_18_NAME +#if defined(MODBUS_USEROBJECT_18_NAME) && MODBUS_NUMB_OF_USEROBJECTS>18 MB_ObjectInit(&MB_DEVID.User[18], MODBUS_USEROBJECT_18_NAME); #endif -#ifdef MODBUS_USEROBJECT_19_NAME +#if defined(MODBUS_USEROBJECT_19_NAME) && MODBUS_NUMB_OF_USEROBJECTS>19 MB_ObjectInit(&MB_DEVID.User[19], MODBUS_USEROBJECT_19_NAME); #endif -#ifdef MODBUS_USEROBJECT_20_NAME +#if defined(MODBUS_USEROBJECT_20_NAME) && MODBUS_NUMB_OF_USEROBJECTS>20 MB_ObjectInit(&MB_DEVID.User[20], MODBUS_USEROBJECT_20_NAME); #endif -#ifdef MODBUS_USEROBJECT_21_NAME +#if defined(MODBUS_USEROBJECT_21_NAME) && MODBUS_NUMB_OF_USEROBJECTS>21 MB_ObjectInit(&MB_DEVID.User[21], MODBUS_USEROBJECT_21_NAME); #endif -#ifdef MODBUS_USEROBJECT_22_NAME +#if defined(MODBUS_USEROBJECT_22_NAME) && MODBUS_NUMB_OF_USEROBJECTS>22 MB_ObjectInit(&MB_DEVID.User[22], MODBUS_USEROBJECT_22_NAME); #endif -#ifdef MODBUS_USEROBJECT_23_NAME +#if defined(MODBUS_USEROBJECT_23_NAME) && MODBUS_NUMB_OF_USEROBJECTS>23 MB_ObjectInit(&MB_DEVID.User[23], MODBUS_USEROBJECT_23_NAME); #endif -#ifdef MODBUS_USEROBJECT_24_NAME +#if defined(MODBUS_USEROBJECT_24_NAME) && MODBUS_NUMB_OF_USEROBJECTS>24 MB_ObjectInit(&MB_DEVID.User[24], MODBUS_USEROBJECT_24_NAME); #endif -#ifdef MODBUS_USEROBJECT_25_NAME +#if defined(MODBUS_USEROBJECT_25_NAME) && MODBUS_NUMB_OF_USEROBJECTS>25 MB_ObjectInit(&MB_DEVID.User[25], MODBUS_USEROBJECT_25_NAME); #endif -#ifdef MODBUS_USEROBJECT_26_NAME +#if defined(MODBUS_USEROBJECT_26_NAME) && MODBUS_NUMB_OF_USEROBJECTS>26 MB_ObjectInit(&MB_DEVID.User[26], MODBUS_USEROBJECT_26_NAME); #endif -#ifdef MODBUS_USEROBJECT_27_NAME +#if defined(MODBUS_USEROBJECT_27_NAME) && MODBUS_NUMB_OF_USEROBJECTS>27 MB_ObjectInit(&MB_DEVID.User[27], MODBUS_USEROBJECT_27_NAME); #endif -#ifdef MODBUS_USEROBJECT_28_NAME +#if defined(MODBUS_USEROBJECT_28_NAME) && MODBUS_NUMB_OF_USEROBJECTS>28 MB_ObjectInit(&MB_DEVID.User[28], MODBUS_USEROBJECT_28_NAME); #endif -#ifdef MODBUS_USEROBJECT_29_NAME +#if defined(MODBUS_USEROBJECT_29_NAME) && MODBUS_NUMB_OF_USEROBJECTS>29 MB_ObjectInit(&MB_DEVID.User[29], MODBUS_USEROBJECT_29_NAME); #endif -#ifdef MODBUS_USEROBJECT_30_NAME +#if defined(MODBUS_USEROBJECT_30_NAME) && MODBUS_NUMB_OF_USEROBJECTS>30 MB_ObjectInit(&MB_DEVID.User[30], MODBUS_USEROBJECT_30_NAME); #endif -#ifdef MODBUS_USEROBJECT_31_NAME +#if defined(MODBUS_USEROBJECT_31_NAME) && MODBUS_NUMB_OF_USEROBJECTS>31 MB_ObjectInit(&MB_DEVID.User[31], MODBUS_USEROBJECT_31_NAME); #endif -#ifdef MODBUS_USEROBJECT_32_NAME +#if defined(MODBUS_USEROBJECT_32_NAME) && MODBUS_NUMB_OF_USEROBJECTS>32 MB_ObjectInit(&MB_DEVID.User[32], MODBUS_USEROBJECT_32_NAME); #endif -#ifdef MODBUS_USEROBJECT_33_NAME +#if defined(MODBUS_USEROBJECT_33_NAME) && MODBUS_NUMB_OF_USEROBJECTS>33 MB_ObjectInit(&MB_DEVID.User[33], MODBUS_USEROBJECT_33_NAME); #endif -#ifdef MODBUS_USEROBJECT_34_NAME +#if defined(MODBUS_USEROBJECT_34_NAME) && MODBUS_NUMB_OF_USEROBJECTS>34 MB_ObjectInit(&MB_DEVID.User[34], MODBUS_USEROBJECT_34_NAME); #endif -#ifdef MODBUS_USEROBJECT_35_NAME +#if defined(MODBUS_USEROBJECT_35_NAME) && MODBUS_NUMB_OF_USEROBJECTS>35 MB_ObjectInit(&MB_DEVID.User[35], MODBUS_USEROBJECT_35_NAME); #endif -#ifdef MODBUS_USEROBJECT_36_NAME +#if defined(MODBUS_USEROBJECT_36_NAME) && MODBUS_NUMB_OF_USEROBJECTS>36 MB_ObjectInit(&MB_DEVID.User[36], MODBUS_USEROBJECT_36_NAME); #endif -#ifdef MODBUS_USEROBJECT_37_NAME +#if defined(MODBUS_USEROBJECT_37_NAME) && MODBUS_NUMB_OF_USEROBJECTS>37 MB_ObjectInit(&MB_DEVID.User[37], MODBUS_USEROBJECT_37_NAME); #endif -#ifdef MODBUS_USEROBJECT_38_NAME +#if defined(MODBUS_USEROBJECT_38_NAME) && MODBUS_NUMB_OF_USEROBJECTS>38 MB_ObjectInit(&MB_DEVID.User[38], MODBUS_USEROBJECT_38_NAME); #endif -#ifdef MODBUS_USEROBJECT_39_NAME +#if defined(MODBUS_USEROBJECT_39_NAME) && MODBUS_NUMB_OF_USEROBJECTS>39 MB_ObjectInit(&MB_DEVID.User[39], MODBUS_USEROBJECT_39_NAME); #endif -#ifdef MODBUS_USEROBJECT_40_NAME +#if defined(MODBUS_USEROBJECT_40_NAME) && MODBUS_NUMB_OF_USEROBJECTS>40 MB_ObjectInit(&MB_DEVID.User[40], MODBUS_USEROBJECT_40_NAME); #endif -#ifdef MODBUS_USEROBJECT_41_NAME +#if defined(MODBUS_USEROBJECT_41_NAME) && MODBUS_NUMB_OF_USEROBJECTS>41 MB_ObjectInit(&MB_DEVID.User[41], MODBUS_USEROBJECT_41_NAME); #endif -#ifdef MODBUS_USEROBJECT_42_NAME +#if defined(MODBUS_USEROBJECT_42_NAME) && MODBUS_NUMB_OF_USEROBJECTS>42 MB_ObjectInit(&MB_DEVID.User[42], MODBUS_USEROBJECT_42_NAME); #endif -#ifdef MODBUS_USEROBJECT_43_NAME +#if defined(MODBUS_USEROBJECT_43_NAME) && MODBUS_NUMB_OF_USEROBJECTS>43 MB_ObjectInit(&MB_DEVID.User[43], MODBUS_USEROBJECT_43_NAME); #endif -#ifdef MODBUS_USEROBJECT_44_NAME +#if defined(MODBUS_USEROBJECT_44_NAME) && MODBUS_NUMB_OF_USEROBJECTS>44 MB_ObjectInit(&MB_DEVID.User[44], MODBUS_USEROBJECT_44_NAME); #endif -#ifdef MODBUS_USEROBJECT_45_NAME +#if defined(MODBUS_USEROBJECT_45_NAME) && MODBUS_NUMB_OF_USEROBJECTS>45 MB_ObjectInit(&MB_DEVID.User[45], MODBUS_USEROBJECT_45_NAME); #endif -#ifdef MODBUS_USEROBJECT_46_NAME +#if defined(MODBUS_USEROBJECT_46_NAME) && MODBUS_NUMB_OF_USEROBJECTS>46 MB_ObjectInit(&MB_DEVID.User[46], MODBUS_USEROBJECT_46_NAME); #endif -#ifdef MODBUS_USEROBJECT_47_NAME +#if defined(MODBUS_USEROBJECT_47_NAME) && MODBUS_NUMB_OF_USEROBJECTS>47 MB_ObjectInit(&MB_DEVID.User[47], MODBUS_USEROBJECT_47_NAME); #endif -#ifdef MODBUS_USEROBJECT_48_NAME +#if defined(MODBUS_USEROBJECT_48_NAME) && MODBUS_NUMB_OF_USEROBJECTS>48 MB_ObjectInit(&MB_DEVID.User[48], MODBUS_USEROBJECT_48_NAME); #endif -#ifdef MODBUS_USEROBJECT_49_NAME +#if defined(MODBUS_USEROBJECT_49_NAME) && MODBUS_NUMB_OF_USEROBJECTS>49 MB_ObjectInit(&MB_DEVID.User[49], MODBUS_USEROBJECT_49_NAME); #endif -#ifdef MODBUS_USEROBJECT_50_NAME +#if defined(MODBUS_USEROBJECT_50_NAME) && MODBUS_NUMB_OF_USEROBJECTS>50 MB_ObjectInit(&MB_DEVID.User[50], MODBUS_USEROBJECT_50_NAME); #endif -#ifdef MODBUS_USEROBJECT_51_NAME +#if defined(MODBUS_USEROBJECT_51_NAME) && MODBUS_NUMB_OF_USEROBJECTS>51 MB_ObjectInit(&MB_DEVID.User[51], MODBUS_USEROBJECT_51_NAME); #endif -#ifdef MODBUS_USEROBJECT_52_NAME +#if defined(MODBUS_USEROBJECT_52_NAME) && MODBUS_NUMB_OF_USEROBJECTS>52 MB_ObjectInit(&MB_DEVID.User[52], MODBUS_USEROBJECT_52_NAME); #endif -#ifdef MODBUS_USEROBJECT_53_NAME +#if defined(MODBUS_USEROBJECT_53_NAME) && MODBUS_NUMB_OF_USEROBJECTS>53 MB_ObjectInit(&MB_DEVID.User[53], MODBUS_USEROBJECT_53_NAME); #endif -#ifdef MODBUS_USEROBJECT_54_NAME +#if defined(MODBUS_USEROBJECT_54_NAME) && MODBUS_NUMB_OF_USEROBJECTS>54 MB_ObjectInit(&MB_DEVID.User[54], MODBUS_USEROBJECT_54_NAME); #endif -#ifdef MODBUS_USEROBJECT_55_NAME +#if defined(MODBUS_USEROBJECT_55_NAME) && MODBUS_NUMB_OF_USEROBJECTS>55 MB_ObjectInit(&MB_DEVID.User[55], MODBUS_USEROBJECT_55_NAME); #endif -#ifdef MODBUS_USEROBJECT_56_NAME +#if defined(MODBUS_USEROBJECT_56_NAME) && MODBUS_NUMB_OF_USEROBJECTS>56 MB_ObjectInit(&MB_DEVID.User[56], MODBUS_USEROBJECT_56_NAME); #endif -#ifdef MODBUS_USEROBJECT_57_NAME +#if defined(MODBUS_USEROBJECT_57_NAME) && MODBUS_NUMB_OF_USEROBJECTS>57 MB_ObjectInit(&MB_DEVID.User[57], MODBUS_USEROBJECT_57_NAME); #endif -#ifdef MODBUS_USEROBJECT_58_NAME +#if defined(MODBUS_USEROBJECT_58_NAME) && MODBUS_NUMB_OF_USEROBJECTS>58 MB_ObjectInit(&MB_DEVID.User[58], MODBUS_USEROBJECT_58_NAME); #endif -#ifdef MODBUS_USEROBJECT_59_NAME +#if defined(MODBUS_USEROBJECT_59_NAME) && MODBUS_NUMB_OF_USEROBJECTS>59 MB_ObjectInit(&MB_DEVID.User[59], MODBUS_USEROBJECT_59_NAME); #endif -#ifdef MODBUS_USEROBJECT_60_NAME +#if defined(MODBUS_USEROBJECT_60_NAME) && MODBUS_NUMB_OF_USEROBJECTS>60 MB_ObjectInit(&MB_DEVID.User[60], MODBUS_USEROBJECT_60_NAME); #endif -#ifdef MODBUS_USEROBJECT_61_NAME +#if defined(MODBUS_USEROBJECT_61_NAME) && MODBUS_NUMB_OF_USEROBJECTS>61 MB_ObjectInit(&MB_DEVID.User[61], MODBUS_USEROBJECT_61_NAME); #endif -#ifdef MODBUS_USEROBJECT_62_NAME +#if defined(MODBUS_USEROBJECT_62_NAME) && MODBUS_NUMB_OF_USEROBJECTS>62 MB_ObjectInit(&MB_DEVID.User[62], MODBUS_USEROBJECT_62_NAME); #endif -#ifdef MODBUS_USEROBJECT_63_NAME +#if defined(MODBUS_USEROBJECT_63_NAME) && MODBUS_NUMB_OF_USEROBJECTS>63 MB_ObjectInit(&MB_DEVID.User[63], MODBUS_USEROBJECT_63_NAME); #endif -#ifdef MODBUS_USEROBJECT_64_NAME +#if defined(MODBUS_USEROBJECT_64_NAME) && MODBUS_NUMB_OF_USEROBJECTS>64 MB_ObjectInit(&MB_DEVID.User[64], MODBUS_USEROBJECT_64_NAME); #endif -#ifdef MODBUS_USEROBJECT_65_NAME +#if defined(MODBUS_USEROBJECT_65_NAME) && MODBUS_NUMB_OF_USEROBJECTS>65 MB_ObjectInit(&MB_DEVID.User[65], MODBUS_USEROBJECT_65_NAME); #endif -#ifdef MODBUS_USEROBJECT_66_NAME +#if defined(MODBUS_USEROBJECT_66_NAME) && MODBUS_NUMB_OF_USEROBJECTS>66 MB_ObjectInit(&MB_DEVID.User[66], MODBUS_USEROBJECT_66_NAME); #endif -#ifdef MODBUS_USEROBJECT_67_NAME +#if defined(MODBUS_USEROBJECT_67_NAME) && MODBUS_NUMB_OF_USEROBJECTS>67 MB_ObjectInit(&MB_DEVID.User[67], MODBUS_USEROBJECT_67_NAME); #endif -#ifdef MODBUS_USEROBJECT_68_NAME +#if defined(MODBUS_USEROBJECT_68_NAME) && MODBUS_NUMB_OF_USEROBJECTS>68 MB_ObjectInit(&MB_DEVID.User[68], MODBUS_USEROBJECT_68_NAME); #endif -#ifdef MODBUS_USEROBJECT_69_NAME +#if defined(MODBUS_USEROBJECT_69_NAME) && MODBUS_NUMB_OF_USEROBJECTS>69 MB_ObjectInit(&MB_DEVID.User[69], MODBUS_USEROBJECT_69_NAME); #endif -#ifdef MODBUS_USEROBJECT_70_NAME +#if defined(MODBUS_USEROBJECT_70_NAME) && MODBUS_NUMB_OF_USEROBJECTS>70 MB_ObjectInit(&MB_DEVID.User[70], MODBUS_USEROBJECT_70_NAME); #endif -#ifdef MODBUS_USEROBJECT_71_NAME +#if defined(MODBUS_USEROBJECT_71_NAME) && MODBUS_NUMB_OF_USEROBJECTS>71 MB_ObjectInit(&MB_DEVID.User[71], MODBUS_USEROBJECT_71_NAME); #endif -#ifdef MODBUS_USEROBJECT_72_NAME +#if defined(MODBUS_USEROBJECT_72_NAME) && MODBUS_NUMB_OF_USEROBJECTS>72 MB_ObjectInit(&MB_DEVID.User[72], MODBUS_USEROBJECT_72_NAME); #endif -#ifdef MODBUS_USEROBJECT_73_NAME +#if defined(MODBUS_USEROBJECT_73_NAME) && MODBUS_NUMB_OF_USEROBJECTS>73 MB_ObjectInit(&MB_DEVID.User[73], MODBUS_USEROBJECT_73_NAME); #endif -#ifdef MODBUS_USEROBJECT_74_NAME +#if defined(MODBUS_USEROBJECT_74_NAME) && MODBUS_NUMB_OF_USEROBJECTS>74 MB_ObjectInit(&MB_DEVID.User[74], MODBUS_USEROBJECT_74_NAME); #endif -#ifdef MODBUS_USEROBJECT_75_NAME +#if defined(MODBUS_USEROBJECT_75_NAME) && MODBUS_NUMB_OF_USEROBJECTS>75 MB_ObjectInit(&MB_DEVID.User[75], MODBUS_USEROBJECT_75_NAME); #endif -#ifdef MODBUS_USEROBJECT_76_NAME +#if defined(MODBUS_USEROBJECT_76_NAME) && MODBUS_NUMB_OF_USEROBJECTS>76 MB_ObjectInit(&MB_DEVID.User[76], MODBUS_USEROBJECT_76_NAME); #endif -#ifdef MODBUS_USEROBJECT_77_NAME +#if defined(MODBUS_USEROBJECT_77_NAME) && MODBUS_NUMB_OF_USEROBJECTS>77 MB_ObjectInit(&MB_DEVID.User[77], MODBUS_USEROBJECT_77_NAME); #endif -#ifdef MODBUS_USEROBJECT_78_NAME +#if defined(MODBUS_USEROBJECT_78_NAME) && MODBUS_NUMB_OF_USEROBJECTS>78 MB_ObjectInit(&MB_DEVID.User[78], MODBUS_USEROBJECT_78_NAME); #endif -#ifdef MODBUS_USEROBJECT_79_NAME +#if defined(MODBUS_USEROBJECT_79_NAME) && MODBUS_NUMB_OF_USEROBJECTS>79 MB_ObjectInit(&MB_DEVID.User[79], MODBUS_USEROBJECT_79_NAME); #endif -#ifdef MODBUS_USEROBJECT_80_NAME +#if defined(MODBUS_USEROBJECT_80_NAME) && MODBUS_NUMB_OF_USEROBJECTS>80 MB_ObjectInit(&MB_DEVID.User[80], MODBUS_USEROBJECT_80_NAME); #endif -#ifdef MODBUS_USEROBJECT_81_NAME +#if defined(MODBUS_USEROBJECT_81_NAME) && MODBUS_NUMB_OF_USEROBJECTS>81 MB_ObjectInit(&MB_DEVID.User[81], MODBUS_USEROBJECT_81_NAME); #endif -#ifdef MODBUS_USEROBJECT_82_NAME +#if defined(MODBUS_USEROBJECT_82_NAME) && MODBUS_NUMB_OF_USEROBJECTS>82 MB_ObjectInit(&MB_DEVID.User[82], MODBUS_USEROBJECT_82_NAME); #endif -#ifdef MODBUS_USEROBJECT_83_NAME +#if defined(MODBUS_USEROBJECT_83_NAME) && MODBUS_NUMB_OF_USEROBJECTS>83 MB_ObjectInit(&MB_DEVID.User[83], MODBUS_USEROBJECT_83_NAME); #endif -#ifdef MODBUS_USEROBJECT_84_NAME +#if defined(MODBUS_USEROBJECT_84_NAME) && MODBUS_NUMB_OF_USEROBJECTS>84 MB_ObjectInit(&MB_DEVID.User[84], MODBUS_USEROBJECT_84_NAME); #endif -#ifdef MODBUS_USEROBJECT_85_NAME +#if defined(MODBUS_USEROBJECT_85_NAME) && MODBUS_NUMB_OF_USEROBJECTS>85 MB_ObjectInit(&MB_DEVID.User[85], MODBUS_USEROBJECT_85_NAME); #endif -#ifdef MODBUS_USEROBJECT_86_NAME +#if defined(MODBUS_USEROBJECT_86_NAME) && MODBUS_NUMB_OF_USEROBJECTS>86 MB_ObjectInit(&MB_DEVID.User[86], MODBUS_USEROBJECT_86_NAME); #endif -#ifdef MODBUS_USEROBJECT_87_NAME +#if defined(MODBUS_USEROBJECT_87_NAME) && MODBUS_NUMB_OF_USEROBJECTS>87 MB_ObjectInit(&MB_DEVID.User[87], MODBUS_USEROBJECT_87_NAME); #endif -#ifdef MODBUS_USEROBJECT_88_NAME +#if defined(MODBUS_USEROBJECT_88_NAME) && MODBUS_NUMB_OF_USEROBJECTS>88 MB_ObjectInit(&MB_DEVID.User[88], MODBUS_USEROBJECT_88_NAME); #endif -#ifdef MODBUS_USEROBJECT_89_NAME +#if defined(MODBUS_USEROBJECT_89_NAME) && MODBUS_NUMB_OF_USEROBJECTS>89 MB_ObjectInit(&MB_DEVID.User[89], MODBUS_USEROBJECT_89_NAME); #endif -#ifdef MODBUS_USEROBJECT_90_NAME +#if defined(MODBUS_USEROBJECT_90_NAME) && MODBUS_NUMB_OF_USEROBJECTS>90 MB_ObjectInit(&MB_DEVID.User[90], MODBUS_USEROBJECT_90_NAME); #endif -#ifdef MODBUS_USEROBJECT_91_NAME +#if defined(MODBUS_USEROBJECT_91_NAME) && MODBUS_NUMB_OF_USEROBJECTS>91 MB_ObjectInit(&MB_DEVID.User[91], MODBUS_USEROBJECT_91_NAME); #endif -#ifdef MODBUS_USEROBJECT_92_NAME +#if defined(MODBUS_USEROBJECT_92_NAME) && MODBUS_NUMB_OF_USEROBJECTS>92 MB_ObjectInit(&MB_DEVID.User[92], MODBUS_USEROBJECT_92_NAME); #endif -#ifdef MODBUS_USEROBJECT_93_NAME +#if defined(MODBUS_USEROBJECT_93_NAME) && MODBUS_NUMB_OF_USEROBJECTS>93 MB_ObjectInit(&MB_DEVID.User[93], MODBUS_USEROBJECT_93_NAME); #endif -#ifdef MODBUS_USEROBJECT_94_NAME +#if defined(MODBUS_USEROBJECT_94_NAME) && MODBUS_NUMB_OF_USEROBJECTS>94 MB_ObjectInit(&MB_DEVID.User[94], MODBUS_USEROBJECT_94_NAME); #endif -#ifdef MODBUS_USEROBJECT_95_NAME +#if defined(MODBUS_USEROBJECT_95_NAME) && MODBUS_NUMB_OF_USEROBJECTS>95 MB_ObjectInit(&MB_DEVID.User[95], MODBUS_USEROBJECT_95_NAME); #endif -#ifdef MODBUS_USEROBJECT_96_NAME +#if defined(MODBUS_USEROBJECT_96_NAME) && MODBUS_NUMB_OF_USEROBJECTS>96 MB_ObjectInit(&MB_DEVID.User[96], MODBUS_USEROBJECT_96_NAME); #endif -#ifdef MODBUS_USEROBJECT_97_NAME +#if defined(MODBUS_USEROBJECT_97_NAME) && MODBUS_NUMB_OF_USEROBJECTS>97 MB_ObjectInit(&MB_DEVID.User[97], MODBUS_USEROBJECT_97_NAME); #endif -#ifdef MODBUS_USEROBJECT_98_NAME +#if defined(MODBUS_USEROBJECT_98_NAME) && MODBUS_NUMB_OF_USEROBJECTS>98 MB_ObjectInit(&MB_DEVID.User[98], MODBUS_USEROBJECT_98_NAME); #endif -#ifdef MODBUS_USEROBJECT_99_NAME +#if defined(MODBUS_USEROBJECT_99_NAME) && MODBUS_NUMB_OF_USEROBJECTS>99 MB_ObjectInit(&MB_DEVID.User[99], MODBUS_USEROBJECT_99_NAME); #endif -#ifdef MODBUS_USEROBJECT_100_NAME +#if defined(MODBUS_USEROBJECT_100_NAME) && MODBUS_NUMB_OF_USEROBJECTS>100 MB_ObjectInit(&MB_DEVID.User[100], MODBUS_USEROBJECT_100_NAME); #endif -#ifdef MODBUS_USEROBJECT_101_NAME +#if defined(MODBUS_USEROBJECT_101_NAME) && MODBUS_NUMB_OF_USEROBJECTS>101 MB_ObjectInit(&MB_DEVID.User[101], MODBUS_USEROBJECT_101_NAME); #endif -#ifdef MODBUS_USEROBJECT_102_NAME +#if defined(MODBUS_USEROBJECT_102_NAME) && MODBUS_NUMB_OF_USEROBJECTS>102 MB_ObjectInit(&MB_DEVID.User[102], MODBUS_USEROBJECT_102_NAME); #endif -#ifdef MODBUS_USEROBJECT_103_NAME +#if defined(MODBUS_USEROBJECT_103_NAME) && MODBUS_NUMB_OF_USEROBJECTS>103 MB_ObjectInit(&MB_DEVID.User[103], MODBUS_USEROBJECT_103_NAME); #endif -#ifdef MODBUS_USEROBJECT_104_NAME +#if defined(MODBUS_USEROBJECT_104_NAME) && MODBUS_NUMB_OF_USEROBJECTS>104 MB_ObjectInit(&MB_DEVID.User[104], MODBUS_USEROBJECT_104_NAME); #endif -#ifdef MODBUS_USEROBJECT_105_NAME +#if defined(MODBUS_USEROBJECT_105_NAME) && MODBUS_NUMB_OF_USEROBJECTS>105 MB_ObjectInit(&MB_DEVID.User[105], MODBUS_USEROBJECT_105_NAME); #endif -#ifdef MODBUS_USEROBJECT_106_NAME +#if defined(MODBUS_USEROBJECT_106_NAME) && MODBUS_NUMB_OF_USEROBJECTS>106 MB_ObjectInit(&MB_DEVID.User[106], MODBUS_USEROBJECT_106_NAME); #endif -#ifdef MODBUS_USEROBJECT_107_NAME +#if defined(MODBUS_USEROBJECT_107_NAME) && MODBUS_NUMB_OF_USEROBJECTS>107 MB_ObjectInit(&MB_DEVID.User[107], MODBUS_USEROBJECT_107_NAME); #endif -#ifdef MODBUS_USEROBJECT_108_NAME +#if defined(MODBUS_USEROBJECT_108_NAME) && MODBUS_NUMB_OF_USEROBJECTS>108 MB_ObjectInit(&MB_DEVID.User[108], MODBUS_USEROBJECT_108_NAME); #endif -#ifdef MODBUS_USEROBJECT_109_NAME +#if defined(MODBUS_USEROBJECT_109_NAME) && MODBUS_NUMB_OF_USEROBJECTS>109 MB_ObjectInit(&MB_DEVID.User[109], MODBUS_USEROBJECT_109_NAME); #endif -#ifdef MODBUS_USEROBJECT_110_NAME +#if defined(MODBUS_USEROBJECT_110_NAME) && MODBUS_NUMB_OF_USEROBJECTS>110 MB_ObjectInit(&MB_DEVID.User[110], MODBUS_USEROBJECT_110_NAME); #endif -#ifdef MODBUS_USEROBJECT_111_NAME +#if defined(MODBUS_USEROBJECT_111_NAME) && MODBUS_NUMB_OF_USEROBJECTS>111 MB_ObjectInit(&MB_DEVID.User[111], MODBUS_USEROBJECT_111_NAME); #endif -#ifdef MODBUS_USEROBJECT_112_NAME +#if defined(MODBUS_USEROBJECT_112_NAME) && MODBUS_NUMB_OF_USEROBJECTS>112 MB_ObjectInit(&MB_DEVID.User[112], MODBUS_USEROBJECT_112_NAME); #endif -#ifdef MODBUS_USEROBJECT_113_NAME +#if defined(MODBUS_USEROBJECT_113_NAME) && MODBUS_NUMB_OF_USEROBJECTS>113 MB_ObjectInit(&MB_DEVID.User[113], MODBUS_USEROBJECT_113_NAME); #endif -#ifdef MODBUS_USEROBJECT_114_NAME +#if defined(MODBUS_USEROBJECT_114_NAME) && MODBUS_NUMB_OF_USEROBJECTS>114 MB_ObjectInit(&MB_DEVID.User[114], MODBUS_USEROBJECT_114_NAME); #endif -#ifdef MODBUS_USEROBJECT_115_NAME +#if defined(MODBUS_USEROBJECT_115_NAME) && MODBUS_NUMB_OF_USEROBJECTS>115 MB_ObjectInit(&MB_DEVID.User[115], MODBUS_USEROBJECT_115_NAME); #endif -#ifdef MODBUS_USEROBJECT_116_NAME +#if defined(MODBUS_USEROBJECT_116_NAME) && MODBUS_NUMB_OF_USEROBJECTS>116 MB_ObjectInit(&MB_DEVID.User[116], MODBUS_USEROBJECT_116_NAME); #endif -#ifdef MODBUS_USEROBJECT_117_NAME +#if defined(MODBUS_USEROBJECT_117_NAME) && MODBUS_NUMB_OF_USEROBJECTS>117 MB_ObjectInit(&MB_DEVID.User[117], MODBUS_USEROBJECT_117_NAME); #endif -#ifdef MODBUS_USEROBJECT_118_NAME +#if defined(MODBUS_USEROBJECT_118_NAME) && MODBUS_NUMB_OF_USEROBJECTS>118 MB_ObjectInit(&MB_DEVID.User[118], MODBUS_USEROBJECT_118_NAME); #endif -#ifdef MODBUS_USEROBJECT_119_NAME +#if defined(MODBUS_USEROBJECT_119_NAME) && MODBUS_NUMB_OF_USEROBJECTS>119 MB_ObjectInit(&MB_DEVID.User[119], MODBUS_USEROBJECT_119_NAME); #endif -#ifdef MODBUS_USEROBJECT_120_NAME +#if defined(MODBUS_USEROBJECT_120_NAME) && MODBUS_NUMB_OF_USEROBJECTS>120 MB_ObjectInit(&MB_DEVID.User[120], MODBUS_USEROBJECT_120_NAME); #endif -#ifdef MODBUS_USEROBJECT_121_NAME +#if defined(MODBUS_USEROBJECT_121_NAME) && MODBUS_NUMB_OF_USEROBJECTS>121 MB_ObjectInit(&MB_DEVID.User[121], MODBUS_USEROBJECT_121_NAME); #endif -#ifdef MODBUS_USEROBJECT_122_NAME +#if defined(MODBUS_USEROBJECT_122_NAME) && MODBUS_NUMB_OF_USEROBJECTS>122 MB_ObjectInit(&MB_DEVID.User[122], MODBUS_USEROBJECT_122_NAME); #endif -#ifdef MODBUS_USEROBJECT_123_NAME +#if defined(MODBUS_USEROBJECT_123_NAME) && MODBUS_NUMB_OF_USEROBJECTS>123 MB_ObjectInit(&MB_DEVID.User[123], MODBUS_USEROBJECT_123_NAME); #endif -#ifdef MODBUS_USEROBJECT_124_NAME +#if defined(MODBUS_USEROBJECT_124_NAME) && MODBUS_NUMB_OF_USEROBJECTS>124 MB_ObjectInit(&MB_DEVID.User[124], MODBUS_USEROBJECT_124_NAME); #endif -#ifdef MODBUS_USEROBJECT_125_NAME +#if defined(MODBUS_USEROBJECT_125_NAME) && MODBUS_NUMB_OF_USEROBJECTS>125 MB_ObjectInit(&MB_DEVID.User[125], MODBUS_USEROBJECT_125_NAME); #endif -#ifdef MODBUS_USEROBJECT_126_NAME +#if defined(MODBUS_USEROBJECT_126_NAME) && MODBUS_NUMB_OF_USEROBJECTS>126 MB_ObjectInit(&MB_DEVID.User[126], MODBUS_USEROBJECT_126_NAME); #endif -#ifdef MODBUS_USEROBJECT_127_NAME +#if defined(MODBUS_USEROBJECT_127_NAME) && MODBUS_NUMB_OF_USEROBJECTS>127 MB_ObjectInit(&MB_DEVID.User[127], MODBUS_USEROBJECT_127_NAME); #endif + } #endif //MODBUS_ENABLE_DEVICE_IDENTIFICATIONS \ No newline at end of file diff --git a/__modbus_config.h b/__modbus_config.h index ae66ba2..e4bfc58 100644 --- a/__modbus_config.h +++ b/__modbus_config.h @@ -32,7 +32,9 @@ #define MODBUS_PRODUCT_NAME "" #define MODBUS_MODEL_NAME "" #define MODBUS_USER_APPLICATION_NAME "" -#define MODBUS_NUMB_OF_USEROBJECTS 0 + +#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов +#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT // Периферия (опционально) #define mb_huart huart1 ///< Удобный дефайн для модбасовского uart @@ -51,7 +53,7 @@ #define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства #define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас -#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU +//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU /** * @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)