Tolerance.TcPOU 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
  3. <POU Name="Tolerance" Id="{426dfdc7-65ca-489e-8d38-9bb8971aeb2f}" SpecialFunc="None">
  4. <Declaration><![CDATA[FUNCTION_BLOCK Tolerance
  5. VAR_INPUT
  6. ENABLE:BOOL;
  7. STEP_TYPE:STRING;
  8. STEP_TIME:INT;
  9. TOL_V:BOOL;
  10. TOL_P:BOOL;
  11. SV:INT;
  12. PV:REAL;
  13. WARNING_RANGE:INT;
  14. ALARM_RANGE:INT;
  15. DELAY_TIME:INT;
  16. STABLE_TIME:INT;
  17. RST:BOOL;
  18. END_VAR
  19. VAR_OUTPUT
  20. STU_WARNING:BOOL;
  21. STU_ALARM:BOOL;
  22. //STU_TIMEOUT:BOOL;
  23. STABLE_DONE:BOOL;
  24. END_VAR
  25. VAR
  26. SV_SUB_WARNING_RANGE:INT;
  27. SV_ADD_WARNING_RANGE:INT;
  28. SV_DIV_WARNING_RANGE:INT;
  29. SV_MUL_WARNING_RANGE:INT;
  30. SV_SUB_ALARM_RANGE:INT;
  31. SV_ADD_ALARM_RANGE:INT;
  32. SV_DIV_ALARM_RANGE:INT;
  33. SV_MUL_ALARM_RANGE:INT;
  34. STU_WARNING_V:BOOL;
  35. STU_WARNING_P:BOOL;
  36. STU_ALARM_V:BOOL;
  37. STU_ALARM_P:BOOL;
  38. TON_DELAY_TIME:TON;
  39. TON_DELAY_TIME_PT:INT;
  40. TON_ALARM_P :TON;
  41. TON_ALARM_V :TON;
  42. TON_WARNING_P :TON;
  43. TON_WARNING_V :TON;
  44. TON_STABLE :TON;
  45. TON_STABLE_IN :BOOL;
  46. END_VAR
  47. ]]></Declaration>
  48. <Implementation>
  49. <ST><![CDATA[//初始化
  50. IF NOT ENABLE OR RST
  51. THEN
  52. STU_WARNING:=FALSE;
  53. STU_ALARM:=FALSE;
  54. STU_WARNING_P:=FALSE;
  55. STU_ALARM_P:=FALSE;
  56. STU_WARNING_V:=FALSE;
  57. STU_ALARM_V:=FALSE;
  58. STABLE_DONE:=FALSE;
  59. TON_STABLE_IN:=FALSE;
  60. END_IF;
  61. IF NOT TOL_P
  62. THEN
  63. STU_WARNING_P:=FALSE;
  64. STU_ALARM_P:=FALSE;
  65. END_IF;
  66. IF NOT TOL_V
  67. THEN
  68. STU_WARNING_V:=FALSE;
  69. STU_ALARM_V:=FALSE;
  70. END_IF;
  71. IF NOT ENABLE AND (STEP_TYPE = 'Stable')
  72. THEN
  73. STABLE_DONE:=TRUE;
  74. END_IF
  75. //RANGE计算
  76. SV_SUB_WARNING_RANGE:=SV-WARNING_RANGE;
  77. SV_ADD_WARNING_RANGE:=SV+WARNING_RANGE;
  78. SV_DIV_WARNING_RANGE:=SV*(100-WARNING_RANGE)/100;
  79. SV_MUL_WARNING_RANGE:=SV*(100+WARNING_RANGE)/100;
  80. SV_SUB_ALARM_RANGE:=SV-ALARM_RANGE;
  81. SV_ADD_ALARM_RANGE:=SV+ALARM_RANGE;
  82. SV_DIV_ALARM_RANGE:=SV*(100-ALARM_RANGE)/100;
  83. SV_MUL_ALARM_RANGE:=SV*(100+ALARM_RANGE)/100;
  84. //RANGE判断
  85. TON_WARNING_P(
  86. IN:= TOL_P AND (PV<=SV_DIV_WARNING_RANGE OR PV>=SV_MUL_WARNING_RANGE)AND NOT RST,
  87. PT:= T#200MS,
  88. Q=> STU_WARNING_P,
  89. ET=> );
  90. TON_WARNING_V(
  91. IN:= TOL_V AND (PV<=SV_SUB_WARNING_RANGE OR PV>=SV_ADD_WARNING_RANGE)AND NOT RST ,
  92. PT:= T#200MS,
  93. Q=> STU_WARNING_V,
  94. ET=> );
  95. TON_ALARM_P(
  96. IN:= TOL_P AND (PV<=SV_DIV_ALARM_RANGE OR PV>=SV_MUL_ALARM_RANGE)AND NOT RST,
  97. PT:= T#200MS,
  98. Q=> STU_ALARM_P,
  99. ET=> );
  100. TON_ALARM_V(
  101. IN:= TOL_V AND (PV<=SV_SUB_ALARM_RANGE OR PV>=SV_ADD_ALARM_RANGE)AND NOT RST,
  102. PT:= T#200MS,
  103. Q=> STU_ALARM_V,
  104. ET=> );
  105. IF ENABLE
  106. THEN
  107. //TIME MODE
  108. IF STEP_TYPE = 'Time'
  109. THEN
  110. TON_DELAY_TIME_PT:=DELAY_TIME;
  111. STU_WARNING:=(STU_WARNING_V OR STU_WARNING_P) AND TON_DELAY_TIME.Q;
  112. IF (STU_ALARM_V OR STU_ALARM_P) AND TON_DELAY_TIME.Q
  113. THEN
  114. STU_ALARM:=TRUE;
  115. END_IF
  116. END_IF;
  117. //Stable MODE
  118. IF STEP_TYPE = 'Stable'
  119. THEN
  120. IF TON_WARNING_P.IN OR TON_WARNING_V.IN
  121. THEN
  122. STABLE_DONE:=FALSE;
  123. TON_STABLE_IN:=FALSE;
  124. ELSE
  125. TON_STABLE_IN:=TRUE;
  126. END_IF;
  127. IF TON_STABLE.Q
  128. THEN
  129. STABLE_DONE:=TRUE;
  130. END_IF
  131. END_IF
  132. END_IF;
  133. //TON
  134. TON_DELAY_TIME(IN:= ENABLE AND NOT RST, PT:= INT_TO_TIME(TON_DELAY_TIME_PT)*1000, Q=> , ET=> );
  135. TON_STABLE(IN:=TON_STABLE_IN, PT:= INT_TO_TIME(STABLE_TIME)*1000, Q=> , ET=> );
  136. ]]></ST>
  137. </Implementation>
  138. <LineIds Name="Tolerance">
  139. <LineId Id="548" Count="6" />
  140. <LineId Id="631" Count="5" />
  141. <LineId Id="786" Count="1" />
  142. <LineId Id="555" Count="3" />
  143. <LineId Id="629" Count="1" />
  144. <LineId Id="559" Count="6" />
  145. <LineId Id="775" Count="0" />
  146. <LineId Id="773" Count="0" />
  147. <LineId Id="776" Count="0" />
  148. <LineId Id="778" Count="0" />
  149. <LineId Id="777" Count="0" />
  150. <LineId Id="570" Count="12" />
  151. <LineId Id="696" Count="0" />
  152. <LineId Id="700" Count="0" />
  153. <LineId Id="697" Count="2" />
  154. <LineId Id="586" Count="0" />
  155. <LineId Id="701" Count="8" />
  156. <LineId Id="595" Count="0" />
  157. <LineId Id="710" Count="4" />
  158. <LineId Id="601" Count="7" />
  159. <LineId Id="715" Count="2" />
  160. <LineId Id="609" Count="4" />
  161. <LineId Id="616" Count="0" />
  162. <LineId Id="718" Count="0" />
  163. <LineId Id="785" Count="0" />
  164. <LineId Id="719" Count="0" />
  165. <LineId Id="617" Count="0" />
  166. <LineId Id="771" Count="0" />
  167. <LineId Id="618" Count="0" />
  168. <LineId Id="779" Count="1" />
  169. <LineId Id="782" Count="0" />
  170. <LineId Id="781" Count="0" />
  171. <LineId Id="720" Count="0" />
  172. <LineId Id="619" Count="3" />
  173. <LineId Id="840" Count="3" />
  174. <LineId Id="623" Count="5" />
  175. <LineId Id="159" Count="0" />
  176. </LineIds>
  177. </POU>
  178. </TcPlcObject>