Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.07 KB | None | 0 0
  1.  
  2. I0 := 0;
  3. timer_reset := 0;
  4.  
  5. //Преобразование сек. в мсек.
  6. PR_time_mc := PR_time * 1000;
  7. PR_time_tr_mc := PR_time_tr * 1000;
  8.  
  9. //Время хода
  10. PR_time_close := PR_time_mc;
  11. PR_time_open := PR_time_mc;
  12.  
  13. //Время схода с концевиков
  14. PR_time_open_tr := PR_time_tr_mc;
  15. PR_time_close_tr := PR_time_tr_mc;
  16.  
  17. //Выбор режима работы
  18. IF ( HL_Set < 10 OR HL_Set > 15 ) AND HL_Set <> 0 THEN
  19. HL_Mode := HL_Set;
  20. ELSE
  21. CASE HL_Set OF
  22.  
  23. //Сброс аварий
  24. 10:
  25. HL_Alarms := 0;
  26.  
  27. //Выключение аварий
  28. 11:
  29. alarms_off := 1;
  30.  
  31. //Включение аварий
  32. 12:
  33. alarms_off := 0;
  34.  
  35. END_CASE;
  36. END_IF;
  37. HL_Set := 0;
  38.  
  39. //Выбор режима по приоритету
  40. IF HL_Mode <> 1 THEN
  41.  
  42. //Включить автоматический режим
  43. IF LG_on THEN
  44. HL_Mode := 3;
  45. END_IF;
  46.  
  47. //Включить местный режим
  48. IF LC_on THEN
  49. HL_Mode := 2;
  50. END_IF;
  51. END_IF;
  52.  
  53. //--------------HL_Command-----------------
  54.  
  55. //-----Команды для задвижки при включеном--
  56. //----------дистанционном управлении-------
  57.  
  58. need_open := 0;
  59. need_close := 0;
  60. need_stop := 0;
  61.  
  62. IF HL_Mode = 4 AND NOT (LC_open OR LC_close OR LC_stop) THEN
  63. CASE HL_Command OF
  64. 1:
  65. need_open := 1;
  66. need_close := 0;
  67. need_stop := 0;
  68. 2:
  69. need_close := 1;
  70. need_open := 0;
  71. need_stop := 0;
  72. 3:
  73. need_stop := 1;
  74. need_open := 0;
  75. need_close := 0;
  76. END_CASE;
  77. END_IF;
  78. HL_Command := 0;
  79.  
  80. //-----Команды для задвижки при включеном--
  81. //-------------местном управлении----------
  82.  
  83. IF HL_Mode = 2 THEN
  84.  
  85. //Закрыть
  86. IF LC_close THEN
  87. need_close := 1;
  88. END_IF;
  89.  
  90. //Открыть
  91. IF LC_open THEN
  92. need_open := 1;
  93. need_close := 0;
  94. END_IF;
  95.  
  96. //Стоп
  97. IF LC_stop THEN
  98. need_stop := 1;
  99. need_close := 0;
  100. need_open := 0;
  101. END_IF;
  102. END_IF;
  103.  
  104. //-----Команды для задвижки при включеном--
  105. //----------логическое управлении-------
  106.  
  107. IF HL_Mode = 3 AND NOT (LC_open OR LC_close OR LC_stop) THEN
  108. IF LG_close THEN //ЛОГИКА ЗАКРЫТЬ
  109. need_close := 1; //Вкл. - Закрыть
  110. END_IF;
  111. IF LG_open THEN //ЛОГИКА ОТКРЫТЬ
  112. need_open := 1; //Вкл. - Открыть
  113. need_close := 0; //Выкл. - Закрыть
  114. END_IF;
  115. IF LG_stop THEN //ЛОГИКА СТОП
  116. need_stop := 1; //Вкл. - Стоп
  117. need_close := 0; //Выкл. - Закрыть
  118. need_open := 0; //Выкл. - Открыть
  119. END_IF;
  120. END_IF;
  121.  
  122. //При аварии
  123. IF HL_Alarms <> 0 THEN
  124. need_close := 0; //Выкл. - Закрыть
  125. need_stop := 1; //Вкл. - Стоп
  126. need_open := 0; //Выкл. - Открыть
  127. END_IF;
  128.  
  129.  
  130. //БЛОК ЗАЩИТЫ
  131. //При местном, авто и тест режиме
  132. IF HL_Mode <> 1 THEN
  133. IF PP_close THEN //ЗАЩИТА ЗАКРЫТЬ
  134. need_close := 1; //Вкл. - Закрыть
  135. END_IF;
  136. IF PP_open THEN //ЗАЩИТА ОТКРЫТЬ
  137. need_open := 1; //Вкл. - Открыть
  138. need_close := 0; //Выкл. - Закрыть
  139. END_IF;
  140. IF PP_stop THEN //ЗАЩИТА СТОП
  141. need_stop := 1; //Вкл. - Стоп
  142. need_close := 0; //Выкл. - Закрыть
  143. need_open := 0; //Вкл. - Открыть
  144. END_IF;
  145. END_IF;
  146.  
  147. IF PP_pr_close THEN //ЗАЩИТА ЗАПРЕТ ЗАКРЫТИЯ
  148. need_close := 0; //Выкл. - Закрыть
  149. END_IF;
  150. IF PP_pr_open THEN //ЗАЩИТА ЗАПРЕТ ОТКРЫТИЯ
  151. need_open := 0; //Выкл. - Открыть
  152. END_IF;
  153. IF PP_pr_stop THEN //ЗАЩИТА ЗАПРЕТ СТОП
  154. need_stop := 0; //Выкл. - Стоп
  155. END_IF;
  156.  
  157.  
  158. (*----------------------СТЕПЫ----------------------*)
  159.  
  160. //Обнуление шагов
  161. step_open := 0;
  162. step_close := 0;
  163. step_stop := 0;
  164. (* При первом запуске присваивается шаг 7*)
  165. CASE HL_STEP OF
  166. 1:
  167. step_stop := 1; //Вкл. шаг стоп
  168. IF need_close THEN //Выполнить если команда открыть
  169. HL_STEP := 2; //Присвоить индикацию шага 5
  170. END_IF;
  171. IF (NOT PS_closed) AND (NOT PS_opened) THEN //Выполнить если сработал концевик закрытия
  172. HL_STEP := 7; //Присвоить индикацию шага 7
  173. HL_Alarms.5 := 1;
  174. END_IF;
  175. IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
  176. HL_STEP := 8;
  177. HL_Alarms.4 := 1; //Присвоить индикацию шага 8
  178. END_IF;
  179.  
  180.  
  181. 2:
  182. TIME0 := PR_time_close_tr; //Задать значение таймеру
  183. step_close := 1; //Вкл. шаг закрытия
  184. I0 := 1; //Включить таймер
  185. IF need_open THEN //Выполнить если команда открыть
  186. HL_STEP := 5; //Присвоить индикацию шага 5
  187. timer_reset := 1; //Сбросить таймер
  188. END_IF;
  189. IF need_stop THEN //Выплонить если команда стоп
  190. HL_STEP := 1; //Присвоить индикацию шага 1
  191. END_IF;
  192. IF NOT PS_opened THEN //Выполнить если сработал концевик открытия
  193. HL_STEP := 3; //Присвоить индикацию 3
  194. timer_reset := 1; //Сбросить таймер
  195. END_IF;
  196. IF PS_closed THEN //Выполнить если не сработал концевик
  197. HL_STEP := 4; //Присвоить индикацию шага 4
  198. END_IF;
  199. IF timeout_end THEN //Выполнить если время закончилось
  200. HL_STEP := 1;
  201. HL_Alarms.0 := 1;
  202. END_IF;
  203. IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
  204. HL_STEP := 8;
  205. HL_Alarms.4 := 1;
  206. END_IF;
  207.  
  208. 3:
  209. TIME0 := PR_time_close; //Задать значение таймеру
  210. step_close := 1; //Вкл. шаг закрытия
  211. I0 := 1; //Запустить таймер
  212. IF need_open THEN //Выполнить когда команда открыть
  213. HL_STEP := 5; //Присвоить индикацию шага 5
  214. timer_reset := 1; //Сбросить таймер
  215. END_IF;
  216. IF need_stop THEN //Выполнить когда команда стоп
  217. HL_STEP := 7; //Присвоить индикацию шага 7
  218. END_IF;
  219. IF PS_closed THEN //Выполнить если не сработал концевик закрытия
  220. HL_STEP := 4; //Присвоить индикацию шага 4
  221. END_IF;
  222. IF PS_opened THEN //Выполнить если не сработал концевик открытия
  223. HL_STEP := 1;
  224. HL_Alarms.7 := 1;
  225. END_IF;
  226. IF timeout_end THEN //Выполнить если время закончилось
  227. HL_STEP := 7; //Выполнить индикацию шага 7
  228. HL_Alarms.1 := 1; //Записать в аварию 1000
  229. END_IF;
  230. IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
  231. HL_Alarms.4 := 1;
  232. HL_STEP := 8; //Присвоить индикацию шага 8
  233. END_IF;
  234. 4:
  235. step_stop := 1; //Вкл. шаг стоп
  236. IF need_open THEN //Выполнить если команда открыть
  237. HL_STEP := 5; //Присвоить индикацию шага 5
  238. END_IF;
  239. IF (NOT PS_closed) AND (NOT PS_opened) THEN //Выполнить если сработал концевик закрытия
  240. HL_STEP := 7; //Присвоить индикацию шага 7
  241. HL_Alarms.6 := 1;
  242. END_IF;
  243. IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
  244. HL_Alarms.4 := 1;
  245. HL_STEP := 8; //Присвоить индикацию шага 8
  246. END_IF;
  247. 5:
  248. TIME0 := PR_time_open_tr; //Задать время таймеру
  249. step_open := 1; //Вкл. шаг открыть
  250. I0 := 1; //Запустить таймер
  251. IF need_close THEN //Выполнить если команда закрыть
  252. HL_STEP := 2; //Присвоить индикацию шага 2
  253. timer_reset := 1; //Сбросить таймер
  254. END_IF;
  255. IF need_stop THEN //Выполнить если команда стоп
  256. HL_STEP := 4; //Присвоить индикацию шага 4
  257. END_IF;
  258. IF NOT PS_closed THEN //Выполнить если сработал концевик закрытия
  259. HL_STEP := 6; //Присвоить индикацию шага 6
  260. timer_reset:= 1; //Сброс таймера
  261. END_IF;
  262. IF PS_opened THEN //Выполнить если не сработал концевик открытия
  263. HL_STEP := 1; //Присвоить индикацию шага 1
  264. END_IF;
  265. IF timeout_end THEN //Выполнить если время закончилось
  266. HL_STEP := 4; //Присвоить индикацию шага 4
  267. HL_Alarms.2 := 1; //Записать в аварию 1
  268. END_IF;
  269. IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
  270. HL_STEP := 8; //Присвоить индикацию шага 8
  271. HL_Alarms.4 := 1;
  272. END_IF;
  273.  
  274. 6:
  275. TIME0 := PR_time_open; //Задать время таймеру
  276. step_open := 1; //Вкл. шаг открытия
  277. I0 := 1; //Запустить таймер
  278. IF need_close THEN //Выполнить если команда закрыть
  279. HL_STEP := 2; //Присвоить индикацию шага 2
  280. END_IF;
  281. IF need_stop THEN //Выполнить если команда стоп
  282. HL_STEP := 7; //Присвоить индикацию шага 7
  283. END_IF;
  284. IF PS_opened THEN //Выполнить если не сработал конецевик открытия
  285. HL_STEP := 1; //Присвоить индикацию шага 1
  286. END_IF;
  287. IF PS_closed THEN //Выполнить если не сработал концевик закрытия
  288. HL_STEP := 4;
  289. HL_Alarms.8 := 1;
  290. END_IF;
  291. IF timeout_end THEN //Выполнить если время закончилось
  292. HL_STEP := 7; //Присвоить индикацию шага 7
  293. HL_Alarms.3 := 1;
  294. END_IF;
  295. IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
  296. HL_STEP := 8;
  297. HL_Alarms.4 := 1;
  298. END_IF;
  299. 7:
  300. need_stop := 1; //Вкл. - Стоп
  301. IF need_open THEN //Выполнить если команда открыть
  302. HL_STEP := 6; //Присвоить индикацию шага 6
  303. END_IF;
  304. IF need_close THEN //Выполнить если команда закрыть
  305. HL_STEP := 3; //Присвоить индикацию шага 3
  306. END_IF;
  307. IF PS_opened THEN //Выполнить если не сработал концевик открытия
  308. HL_STEP := 1; //Присвоить индикацию шага 1
  309.  
  310. HL_Alarms.8 := 1;
  311.  
  312. END_IF;
  313. IF PS_closed THEN //Выполнить если не сработал концевик закрытия
  314. HL_STEP := 4; //Присвоить индикацию шага 4
  315.  
  316. HL_Alarms.7 := 1;
  317.  
  318. END_IF;
  319. IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
  320. HL_STEP := 8; //Присвоить индикацию шага 8
  321. HL_Alarms.4 := 1;
  322. END_IF;
  323.  
  324. 8:
  325. step_stop := 1; //Вкл. шаг стоп
  326. need_stop := 1; //Вкл. - Стоп
  327. IF PS_opened AND NOT PS_closed THEN //Выполнить если сработал концевик открытия
  328. HL_STEP := 1; //Присвоить индикацию
  329. END_IF;
  330. IF PS_closed AND NOT PS_opened THEN //Выполнить если сработал концевик закрытия
  331. HL_STEP := 4; //Присвоить индикацию
  332. END_IF;
  333. ELSE //Иначе
  334. HL_STEP := 7; //Присвоить индикацию шага 7
  335. END_CASE;
  336.  
  337. IF alarms_off THEN //Выполнить если аварий нет
  338. HL_Alarms := 0; //Присвоить индикацию аварии 0
  339. END_IF;
  340.  
  341. IF HL_Alarms <> 0 THEN
  342. alarm := 1;
  343. ELSE
  344. alarm := 0;
  345. END_IF;
  346. //--------------HL_Status-----------------
  347.  
  348. HL_Status:=0;
  349.  
  350. //Диагностика отключена
  351. IF alarms_off THEN
  352. HL_Status.0 :=1;
  353. END_IF;
  354.  
  355. //Защита открыть
  356. IF PP_open THEN
  357. HL_Status.1 := 1;
  358. END_IF;
  359.  
  360. //Защита закрыть
  361. IF PP_close THEN
  362. HL_Status.2 := 1;
  363. END_IF;
  364.  
  365. //Защита остановить
  366. IF PP_stop THEN
  367. HL_Status.3 := 1;
  368. END_IF;
  369.  
  370. //Защита запрет открытия
  371. IF PP_pr_open THEN
  372. HL_Status.4 := 1;
  373. END_IF;
  374.  
  375. //Защита запрет закрытия
  376. IF PP_pr_close THEN
  377. HL_Status.5 := 1;
  378. END_IF;
  379.  
  380. //Защита запрет остановить
  381. IF PP_pr_stop THEN
  382. HL_Status.6 := 1;
  383. END_IF;
  384.  
  385. //По месту открыть
  386. IF LC_open THEN
  387. HL_Status.7 := 1;
  388. END_IF;
  389.  
  390. //По месту закрыть
  391. IF LC_close THEN
  392. HL_Status.8 := 1;
  393. END_IF;
  394.  
  395. //По месту стоп
  396. IF LC_stop THEN
  397. HL_Status.9 := 1;
  398. END_IF;
  399.  
  400. //Логика закрыть
  401. IF LG_close THEN
  402. HL_Status.10 := 1;
  403. END_IF;
  404.  
  405. //Логика открыть
  406. IF LG_open THEN
  407. HL_Status.11 := 1;
  408. END_IF;
  409.  
  410. //Логика стоп
  411. IF LG_stop THEN
  412. HL_Status.12 := 1;
  413. END_IF;
  414.  
  415.  
  416. //--------------StatusOut-----------------
  417.  
  418. StatusOut := 0;
  419.  
  420. //Питание
  421. IF power THEN
  422. StatusOut.0 := 1;
  423. END_IF;
  424.  
  425. //Открыт
  426. IF HL_STEP = 1 THEN
  427. StatusOut.1 := 1;
  428. END_IF;
  429.  
  430. //Закрыт
  431. IF HL_STEP = 4 THEN
  432. StatusOut.2 := 1;
  433. END_IF;
  434.  
  435. //Промежуточное
  436. IF HL_STEP = 7 THEN
  437. StatusOut.3 := 1;
  438. END_IF;
  439.  
  440. //Открывается
  441. IF HL_STEP = 6 THEN
  442. StatusOut.4 := 1;
  443. END_IF;
  444.  
  445. //Закрывается
  446. IF HL_STEP = 3 THEN
  447. StatusOut.5 := 1;
  448. END_IF;
  449.  
  450. //Авария
  451. IF alarm THEN
  452. StatusOut.6 := 1;
  453. END_IF;
  454.  
  455. //--------------ModeOut-----------------
  456.  
  457. ModeOut := 0;
  458.  
  459. //Режим ремонт
  460. IF HL_Mode = 1 THEN
  461. ModeOut.0 := 1;
  462. END_IF;
  463.  
  464. //Режим локального управления
  465. IF HL_Mode = 2 THEN
  466. ModeOut.1 := 1;
  467. END_IF;
  468.  
  469. //Режим автоматического управления
  470. IF HL_Mode = 3 THEN
  471. ModeOut.2 := 1;
  472. END_IF;
  473.  
  474. //Режим дистанционного управления
  475. IF HL_Mode = 4 THEN
  476. ModeOut.3 := 1;
  477. END_IF;
  478.  
  479.  
  480. PP_opened:=0; //Выкл. сигнал Открыто
  481. PP_closed:=0; //Выкл. сигнал Закрыто
  482. IF HL_STEP=1 THEN
  483. PP_opened:=1; //Вкл. сигнал Открыто
  484. END_IF;
  485. IF HL_STEP=4 THEN
  486. PP_closed:=1; //Вкл. сигнал Закрыто
  487. END_IF;
  488. //------------------------------------------------------------------------------------
  489.  
  490. IF TONR_01.PRE = TIME0 AND NOT timer_reset THEN
  491. TONR_01.PRE := TIME0; //Время отсчета
  492. TONR_01.Reset := timer_reset; //Сброс времени отсчета
  493. TONR_01.TimerEnable := I0; //Включение таймера
  494.  
  495. TONR (TONR_01);
  496.  
  497.  
  498. ELSE
  499. TONR_01.PRE := TIME0; //Время отсчета
  500. TONR_01.Reset := timer_reset; //Сброс времени отсчета
  501. TONR_01.TimerEnable := 0; //Включение таймера
  502.  
  503. TONR (TONR_01);
  504.  
  505. END_IF;
  506. timeout_end := TONR_01.DN; //Срабатывание таймера
  507. time_elapsed := TONR_01.ACC;
  508.  
  509.  
  510.  
  511. //------------------------------------------------------------------------------------
  512. TONR_02.PRE := TIME1; //Время отсчета
  513. TONR_02.Reset := timer_reset; //Сброс времени отсчета
  514. TONR_02.TimerEnable := step_open; //Включение таймера
  515.  
  516. TONR (TONR_02);
  517.  
  518. PS_open := TONR_02.DN; //Срабатывание таймера
  519.  
  520. //------------------------------------------------------------------------------------
  521. TONR_03.PRE := TIME2; //Время отсчета
  522. TONR_03.Reset := timer_reset; //Сброс времени отсчета
  523. TONR_03.TimerEnable := step_close; //Включение таймера
  524.  
  525. TONR (TONR_03);
  526.  
  527. PS_close := TONR_03.DN; //Срабатывание таймера
  528.  
  529. //------------------------------------------------------------------------------------
  530. TONR_04.PRE := TIME3; //Время отсчета
  531. TONR_04.Reset := timer_reset; //Сброс времени отсчета
  532. TONR_04.TimerEnable := step_stop; //Включение таймера
  533.  
  534. TONR (TONR_04); // TON_1(IN:= , PT:= , Q=> , ET=>TON1_2 );
  535.  
  536. PS_stop := TONR_04.DN; //Срабатывание таймера
  537.  
  538. //------------------------------------------------------------------------------------
  539.  
  540. IF PP_open THEN
  541. PS_open := 1;
  542. END_IF;
  543. IF PP_close THEN
  544. PS_close := 1;
  545. END_IF;
  546. IF PP_stop THEN
  547. PS_stop := 1;
  548. END_IF;
  549.  
  550. IF PP_pr_open THEN
  551. PS_open := 0;
  552. END_IF;
  553. IF PP_pr_close THEN
  554. PS_close := 0;
  555. END_IF;
  556. IF PP_pr_stop THEN
  557. PS_stop := 0;
  558. END_IF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement