|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
Здраствуйте, нужен совет, как грамотно синхронизировать потоки в C#, точнее синхронизировать доступ к serialport. Есть некое приложение которое работает со СКУД через com порт. В функции ReadEvent организовано считывание событий в бесконечном цикле При возникновении события в контроллеры записываются ключи через serialport, как синхронизировать потоки чтоб в ком порт отправлять правильные данные Код: c# 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. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 02:56 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
Эта дублилированная тема, слчайно добавил, не знаю как удалить ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 03:02 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
kadet635Эта дублилированная тема, слчайно добавил, не знаю как удалить 3аголовки ра3ные O_o может у вас кратковременные потери памяти или ра3двоение личности? :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 09:57 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
Портянку такую разгребать желания нет. Общий принцип работы с ком-портом такой - посылаешь пакет, и пока не получил ответ или не истек разумный таймаут, ничего слать нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 10:01 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
исполь3уйте асинхронность, так как это будет блокировать UI, а время ответа или не ответа могут быть очень большими. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 10:13 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
PallarisПортянку такую разгребать желания нет. Общий принцип работы с ком-портом такой - посылаешь пакет, и пока не получил ответ или не истек разумный таймаут, ничего слать нельзяМожно, но может возникнуть гемор, но может и не возникнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 11:35 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
kadet635, Ты хочешь одновременно из нескольких потоков работать с несколькими контроллерами через ком порт, что бы уменьшить время итераций в бесконечном цикле и тем самым повысить производительность? Описание протокола есть? Если долгое время не опрашивать контроллеры, выключить программу например, затем запустить, время опроса одного контроллера увеличится, т.к. программа вычитывает накопившиеся данные или все работает иначе? Что за контроллеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 11:42 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
kadet635, Pallaris все правильно сказал на счет принципа работы. Контроллеры могут поддерживать несколько протоколов работающих по одному интерфейсу, например контроллер Carel pco3 поддерживает модбас и свой закрытый протокол carel, в зависимости от задачи, количества контроллеров в сети, программах в контроллерах(особенно если они свободно программируемые) дабы повысить производительность, выбирается тот или иной протокол. Разница в том, что протокол Carel вычитывает все накопившиеся изменения с момента последнего опроса, поэтому если часто меняющихся параметров много и все они не важны, то есть протокол модбас, с помощью которого ты сам определяешь когда какие регистры читать. Твоя программа может в разных потоках выполнять какие-то обработки, но общение с ком портом будет происходить скорей всего в одном потоке. Учитывая что у тебя консольное приложение, с потоками можно сильно не заморачиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 12:19 |
|
класс serialport и синхронизация потоков
|
|||
---|---|---|---|
#18+
fortibransaPallarisПортянку такую разгребать желания нет. Общий принцип работы с ком-портом такой - посылаешь пакет, и пока не получил ответ или не истек разумный таймаут, ничего слать нельзяМожно, но может возникнуть гемор, но может и не возникнуть. Программирование - всегда компромисс между желаниями и возможностями ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2016, 22:01 |
|
|
start [/forum/topic.php?fid=20&fpage=53&tid=1400274]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 446ms |
0 / 0 |