|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Уважаемые специалисты! Столкнулся с проблемой расчета кс массива байт, а именно...Есть условие: "Контрольная сумма вычисляется арифметическим суммированием байтов NT, КЗ заголовка, и байтов блока данных с последующим побитовым инвертированием. В качестве значения КС используется младший байт указанной суммы" ... байтовый массив(оригинал запроса): {16,0,144,49,0,5,0,63,0,0,0,0,127,51}, где "16"-управляющий код начала кадра и "51"-фактическая контрольная сумма исключаются из расчета... в итоге к расчету {0,144,49,0,5,0,63,0,0,0,0,127} ... результат суммирования и последующего преобразования должен равняться "51" ... Поверьте дилетанту, перепробовал разные CRC и алгоритмы ... результат отрицательный. Желательно на vb.net. Заранее блдагодарен. Для проверки ... еще пара массивов: {16,0,144,126,0,5,0,69,0,0,1,0,208,167}, {16,0,144,47,0,5,0,63,0,0,0,0,95,186}, {16,0,144,47,0,4,0,63,146,41,2,58,37}. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2014, 05:18 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
AlexDmitЖелательно на vb.net. Модератор: Тема перенесена из форума "Visual Basic". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2014, 13:04 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Можно было оформить документацию соответствующе. Я не знаю почему у вас в запросе 14 байтов. В найденной документации, я вижу что всего их 9, и должен запрос заканчиваться байтом конца кадра: 16 16 или 22 10 БайтСодержание1Код начала кадра (10Н)2Групповой номер прибора (NT)3Код запроса4Поле 15Поле 26Поле 37Поле 48Контрольная сумма (КС)9Код конца кадра (16Н) Контрольная сумма представляет собой побитно инвертированный младший байт суммы всех предшествующих байтов за исключением кода начала кадра (байты 2...7)У вас верные исходные данные? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2014, 13:59 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Извиняюсь!!! Не включил конец кадра, но тем не менее, согласно сопутствующей документации, первый и конечные два байта массива из расчета кс (либо определения полинома) исключаются. В своем случае набросал промежуточную прогу-прослушку com-портов и прослушал процесс обмена между тепловычислителем СПТ-941 и программой "ПРОЛОГ". Получил образцы массивов запрос-ответ(каковы прилагаю). Чаще всего описанное в документации и фактом обмена - частичное не соответствие, поэтому следую "МЕТОДОМ ПРОБ И ОШИБОК", т.е. есть образцы ... определить способ формирования кс. С протоколом обмена для ВКТ-7 подобной проблемы не было ... все ровно, но не для "Логики". Поэтому прилагаю последовательность массивов: Запрос 16,0,144,126,0,5,0,69,0,0,1,0,208,167,22 Ответ 16,0,144,126,0,65,0,69,123,53,47,135,123,53,47,135,22 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,0,188,0,67,0,0,0,255,48,255,255,255,134,130,153,164,71,198,230,72,191,233,194,135,158,63,22 Запрос 16,0,144,47,0,5,0,63,0,0,0,0,95,186,22 Ответ 16,0,144,47,0,4,0,63,146,41,2,58,37,22 Запрос 16,0,144,48,0,5,0,63,0,0,0,0,148,16,22 Ответ 16,0,144,48,0,4,0,63,146,41,2,222,83,22 Запрос 16,0,144,49,0,5,0,63,0,0,0,0,127,51,22 16,0,144,50,0,5,0,63,0,0,0,0,82,119,22 16,0,144,51,0,5,0,63,0,0,0,0,185,84,22 16,0,144,52,0,5,0,63,0,0,0,0,8,22 16,0,63,0,0,0,0,192,22 Запрос 16,0,144,42,0,5,0,63,0,0,0,0,40,118,22 Ответ 16,0,144,42,0,4,0,63,146,41,2,114,155,22 Запрос 16,0,144,43,0,5,0,69,0,0,1,0,171,76,22 Ответ 16,0,144,43,0,65,0,69,123,53,47,135,123,53,47,135,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,188,0,67,0,0,0,255,48,255,255,255,134,130,153,164,71,198,230,72,191,233,194,135,154,76,22 Вроде как-то так.... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 04:07 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
AlexDmit, Что-то описанный алгоритм вычисления до конца не могу понять. Может пригодится наработка. Вычисляет или по крайней мере похожую цифру выдает на одном запросе. Скорее всего, потому что сумма не превышает 255. Чувствую что нормальное решение где-то рядом Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2014, 21:14 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Согласен, случай попадания в яблочко единичен.Вероятно присутствует какая-то фишка, либо при суммировании(тип Int, или Byte), либо полином при инвертировании, либо .... все в месте.Это пережиток 90-х ... заморочить алгоритм, мне так кажется, может быть, я, не прав. Но тем не менее ребята пишут свои проги для СПТ-941 и считывают архивы, а значит не все так сложно, как кажется. Благодарю всех за поддержку...все равно доведу до конца. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 04:11 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
AlexDmit, тут надо просто позвонить содателям и переспросить или уточнить алгоритм создания кс, он настолько прост, настролько и не понятен.. вот словоа -арифметическим суммированием байтов NT, КЗ заголовка, и байтов блока данных с последующим побитовым инвертированием что тут имелось в виду, сумма байтов потом инверсия, или сумма nt b кз + сумма инвертированная блока данных, или общая сумма но при прибавлении инвертировать аккумулятор. сама то процедура процедура имхо не представляет труда. суммирование в беззнаковое, инверсия (~) , взятие младшего &0хFF ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2014, 11:22 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Звонить родителям это трата времени, средств и т.п. Ответ,явно, будет не однозначным ... либо приобретите сетевую версию программы ... либо гуся на рынке..., а иначе "..пилите Шура...". Попробую подобрать полином методом "дедовского тыка" ... благо весь акцент на младшем байте, а следовательно всего 256 вариантов.Принцип довольно прост: прибор на RS232(com-port) прямое соединение, установка связи готовым шаблоном, а затем ... посылка сформированного запроса в цикле (n=0 to 255) последовательно увеличивая sum Xor (h00+n) до получения положительного, не нулевого, ответа ... запоминаем полином в массив и т.д. В результате получаем на каждый байт массива sum от 0 до 255 свой Xor. Как то так. В любом случае результат выложу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2014, 11:00 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Нда. Я бы позвонил ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2014, 11:25 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Еще раз, огромная благодарность за поддержку!!! Все получилось ... без алгоритмов и полиномов ... по принципу "не усложняй" ... последовательность построения как в VB6.Подскажите как выложить листинг таким каков есть, может быть кому-то пригодится, дабы не тратить время на эксперименты и средства на приобретение не доработанного программного обеспечения для приборов энергоучета. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2014, 18:38 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Сделай Gist ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2014, 18:52 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
AlexDmit, Если листинг небольшой, выложи его здесь. Обрами код тегом [SRC VB][/SRC] и тегом [ SPOILER][/SPOILER]. Интересно посмотреть алгоритм ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2014, 19:32 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Как и обещал, прилагаю листинг таковым в черновом варианте без утряски. Как видно ... ничего сложного нет. Если у кого-либо присутствует необходимость в заготовках опроса приборов "Теплоком", то ... всегда пожалуйста. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2014, 11:27 |
|
Расчитать контрольную сумму байтового массива запроса СПТ-941
|
|||
---|---|---|---|
#18+
Мне вот это понравилось Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2014, 11:38 |
|
|
start [/forum/topic.php?fid=20&tid=1403198]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 144ms |
0 / 0 |