Tolerance.TcPOU 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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="{5a4641dc-436c-4896-87bf-036796ac149b}" 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. END_VAR
  46. ]]></Declaration>
  47. <Implementation>
  48. <ST><![CDATA[//初始化
  49. IF NOT ENABLE OR RST
  50. THEN
  51. STU_WARNING:=FALSE;
  52. STU_ALARM:=FALSE;
  53. STU_WARNING_P:=FALSE;
  54. STU_ALARM_P:=FALSE;
  55. STU_WARNING_V:=FALSE;
  56. STU_ALARM_V:=FALSE;
  57. STABLE_DONE:=FALSE;
  58. TON_STABLE.IN:=FALSE;
  59. END_IF;
  60. IF NOT TOL_P
  61. THEN
  62. STU_WARNING_P:=FALSE;
  63. STU_ALARM_P:=FALSE;
  64. END_IF;
  65. IF NOT TOL_V
  66. THEN
  67. STU_WARNING_V:=FALSE;
  68. STU_ALARM_V:=FALSE;
  69. END_IF;
  70. IF NOT ENABLE AND (STEP_TYPE = 'Stable')
  71. THEN
  72. STABLE_DONE:=TRUE;
  73. END_IF
  74. //TON
  75. TON_DELAY_TIME(IN:= ENABLE AND NOT RST, PT:= INT_TO_TIME(TON_DELAY_TIME_PT)*1000, Q=> , ET=> );
  76. TON_STABLE(IN:= , PT:= INT_TO_TIME(STABLE_TIME)*1000, Q=> , ET=> );
  77. //RANGE计算
  78. SV_SUB_WARNING_RANGE:=SV-WARNING_RANGE;
  79. SV_ADD_WARNING_RANGE:=SV+WARNING_RANGE;
  80. SV_DIV_WARNING_RANGE:=SV*(100-WARNING_RANGE)/100;
  81. SV_MUL_WARNING_RANGE:=SV*(100+WARNING_RANGE)/100;
  82. SV_SUB_ALARM_RANGE:=SV-ALARM_RANGE;
  83. SV_ADD_ALARM_RANGE:=SV+ALARM_RANGE;
  84. SV_DIV_ALARM_RANGE:=SV*(100-ALARM_RANGE)/100;
  85. SV_MUL_ALARM_RANGE:=SV*(100+ALARM_RANGE)/100;
  86. //RANGE判断
  87. TON_WARNING_P(
  88. IN:= TOL_P AND (PV<=SV_DIV_WARNING_RANGE OR PV>=SV_MUL_WARNING_RANGE)AND NOT RST,
  89. PT:= T#200MS,
  90. Q=> STU_WARNING_P,
  91. ET=> );
  92. TON_WARNING_V(
  93. IN:= TOL_V AND (PV<=SV_SUB_WARNING_RANGE OR PV>=SV_ADD_WARNING_RANGE)AND NOT RST ,
  94. PT:= T#200MS,
  95. Q=> STU_WARNING_V,
  96. ET=> );
  97. TON_ALARM_P(
  98. IN:= TOL_P AND (PV<=SV_DIV_ALARM_RANGE OR PV>=SV_MUL_ALARM_RANGE)AND NOT RST,
  99. PT:= T#200MS,
  100. Q=> STU_ALARM_P,
  101. ET=> );
  102. TON_ALARM_V(
  103. IN:= TOL_V AND (PV<=SV_SUB_ALARM_RANGE OR PV>=SV_ADD_ALARM_RANGE)AND NOT RST,
  104. PT:= T#200MS,
  105. Q=> STU_ALARM_V,
  106. ET=> );
  107. IF ENABLE
  108. THEN
  109. //TIME MODE
  110. IF STEP_TYPE = 'Time'
  111. THEN
  112. TON_DELAY_TIME_PT:=DELAY_TIME;
  113. STU_WARNING:=(STU_WARNING_V OR STU_WARNING_P) AND TON_DELAY_TIME.Q;
  114. IF (STU_ALARM_V OR STU_ALARM_P) AND TON_DELAY_TIME.Q
  115. THEN
  116. STU_ALARM:=TRUE;
  117. END_IF
  118. END_IF;
  119. //Stable MODE
  120. IF STEP_TYPE = 'Stable'
  121. THEN
  122. IF TON_WARNING_P.IN OR TON_WARNING_V.IN
  123. THEN
  124. STABLE_DONE:=FALSE;
  125. TON_STABLE.IN:=FALSE;
  126. ELSE
  127. TON_STABLE.IN:=TRUE;
  128. END_IF;
  129. IF TON_STABLE.Q
  130. THEN
  131. STABLE_DONE:=TRUE;
  132. END_IF
  133. END_IF
  134. END_IF;
  135. ]]></ST>
  136. </Implementation>
  137. <LineIds Name="Tolerance">
  138. <LineId Id="548" Count="6" />
  139. <LineId Id="631" Count="5" />
  140. <LineId Id="786" Count="1" />
  141. <LineId Id="555" Count="3" />
  142. <LineId Id="629" Count="1" />
  143. <LineId Id="559" Count="6" />
  144. <LineId Id="775" Count="0" />
  145. <LineId Id="773" Count="0" />
  146. <LineId Id="776" Count="0" />
  147. <LineId Id="778" Count="0" />
  148. <LineId Id="777" Count="0" />
  149. <LineId Id="566" Count="2" />
  150. <LineId Id="770" Count="0" />
  151. <LineId Id="569" Count="13" />
  152. <LineId Id="696" Count="0" />
  153. <LineId Id="700" Count="0" />
  154. <LineId Id="697" Count="2" />
  155. <LineId Id="586" Count="0" />
  156. <LineId Id="701" Count="8" />
  157. <LineId Id="595" Count="0" />
  158. <LineId Id="710" Count="4" />
  159. <LineId Id="601" Count="7" />
  160. <LineId Id="715" Count="2" />
  161. <LineId Id="609" Count="4" />
  162. <LineId Id="616" Count="0" />
  163. <LineId Id="718" Count="0" />
  164. <LineId Id="785" Count="0" />
  165. <LineId Id="719" Count="0" />
  166. <LineId Id="617" Count="0" />
  167. <LineId Id="771" Count="0" />
  168. <LineId Id="618" Count="0" />
  169. <LineId Id="779" Count="1" />
  170. <LineId Id="782" Count="0" />
  171. <LineId Id="781" Count="0" />
  172. <LineId Id="720" Count="0" />
  173. <LineId Id="619" Count="9" />
  174. <LineId Id="159" Count="0" />
  175. </LineIds>
  176. </POU>
  177. </TcPlcObject>