FFU.TcPOU 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
  3. <POU Name="FFU" Id="{cfe90371-682c-484c-8fca-5dcd9ed042b1}" SpecialFunc="None">
  4. <Declaration><![CDATA[FUNCTION_BLOCK FFU
  5. VAR_INPUT
  6. END_VAR
  7. VAR_OUTPUT
  8. END_VAR
  9. VAR
  10. MBMaster :ModbusRtuMaster_KL6x22B; // ModbusRTU Master功能块
  11. STAGE :INT;
  12. STAGE_BF :INT;
  13. FFU_ALARM_EN :UINT; //报警输出使能
  14. FFU_HSPEED :UINT; //转速上限
  15. FFU_LSPEED :UINT; //转速下限
  16. DATA_READ :ARRAY[1..18] OF UINT;
  17. DATA_WRITE :ARRAY[1..18] OF UINT;
  18. FFU_AI_STATUS :ARRAY[1..18] OF UINT;
  19. FFU_AI_SPEED_PV :ARRAY[1..18] OF UINT;
  20. FFU_AO_CTRLWORD :ARRAY[1..3] OF UINT;
  21. FFU_AO_POWER_ON :ARRAY[1..18] OF UINT;
  22. FFU_AO_SPEED_SV :ARRAY[1..18] OF WORD;
  23. FFU_AO_EN :ARRAY[1..18] OF UINT;
  24. FFU_CTRLWORD_BUFFER :ARRAY[1..3] OF UINT;
  25. FFU_POWER_ON_BUFFER :ARRAY[1..18] OF UINT;
  26. FFU_SPEED_SV_BUFFER :ARRAY[1..18] OF UINT;
  27. FFU_EN_BUFFER :ARRAY[1..18] OF UINT;
  28. WRITE_EN1 :DINT;
  29. WRITE_EN2 :DINT;
  30. WRITE_EN3 :DINT;
  31. WRITE_EN4 :DINT;
  32. WRITE_EN5 :DINT;
  33. WRITE_EN6 :DINT;
  34. WRITE_EN7 :DINT;
  35. FORCE_WRITE_TIMES :INT;
  36. FORCE_WRITE :BOOL;
  37. ERRID :INT;
  38. TEST1:BOOL;
  39. TEST2:BOOL;
  40. TEST3:BOOL;
  41. TEST4:BOOL;
  42. TEST5:BOOL;
  43. TEST6:BOOL;
  44. TEST7:BOOL;
  45. END_VAR
  46. ]]></Declaration>
  47. <Implementation>
  48. <ST><![CDATA[//AI数据
  49. AI. FFU1_1_STATUS := FFU_AI_STATUS [ 1 ] ;
  50. AI. FFU1_2_STATUS := FFU_AI_STATUS [ 2 ] ;
  51. AI. FFU1_3_STATUS := FFU_AI_STATUS [ 3 ] ;
  52. AI. FFU1_4_STATUS := FFU_AI_STATUS [ 4 ] ;
  53. AI. FFU1_5_STATUS := FFU_AI_STATUS [ 5 ] ;
  54. AI. FFU1_6_STATUS := FFU_AI_STATUS [ 6 ] ;
  55. AI. FFU2_1_STATUS := FFU_AI_STATUS [ 7 ] ;
  56. AI. FFU2_2_STATUS := FFU_AI_STATUS [ 8 ] ;
  57. AI. FFU2_3_STATUS := FFU_AI_STATUS [ 9 ] ;
  58. AI. FFU2_4_STATUS := FFU_AI_STATUS [ 10 ] ;
  59. AI. FFU2_5_STATUS := FFU_AI_STATUS [ 11 ] ;
  60. AI. FFU2_6_STATUS := FFU_AI_STATUS [ 12 ] ;
  61. AI. FFU3_1_STATUS := FFU_AI_STATUS [ 13 ] ;
  62. AI. FFU3_2_STATUS := FFU_AI_STATUS [ 14 ] ;
  63. AI. FFU3_3_STATUS := FFU_AI_STATUS [ 15 ] ;
  64. AI. FFU3_4_STATUS := FFU_AI_STATUS [ 16 ] ;
  65. AI. FFU3_5_STATUS := FFU_AI_STATUS [ 17 ] ;
  66. AI. FFU3_6_STATUS := FFU_AI_STATUS [ 18 ] ;
  67. AI. FFU1_1_SPEED_PV := FFU_AI_SPEED_PV [ 1 ] ;
  68. AI. FFU1_2_SPEED_PV := FFU_AI_SPEED_PV [ 2 ] ;
  69. AI. FFU1_3_SPEED_PV := FFU_AI_SPEED_PV [ 3 ] ;
  70. AI. FFU1_4_SPEED_PV := FFU_AI_SPEED_PV [ 4 ] ;
  71. AI. FFU1_5_SPEED_PV := FFU_AI_SPEED_PV [ 5 ] ;
  72. AI. FFU1_6_SPEED_PV := FFU_AI_SPEED_PV [ 6 ] ;
  73. AI. FFU2_1_SPEED_PV := FFU_AI_SPEED_PV [ 7 ] ;
  74. AI. FFU2_2_SPEED_PV := FFU_AI_SPEED_PV [ 8 ] ;
  75. AI. FFU2_3_SPEED_PV := FFU_AI_SPEED_PV [ 9 ] ;
  76. AI. FFU2_4_SPEED_PV := FFU_AI_SPEED_PV [ 10 ] ;
  77. AI. FFU2_5_SPEED_PV := FFU_AI_SPEED_PV [ 11 ] ;
  78. AI. FFU2_6_SPEED_PV := FFU_AI_SPEED_PV [ 12 ] ;
  79. AI. FFU3_1_SPEED_PV := FFU_AI_SPEED_PV [ 13 ] ;
  80. AI. FFU3_2_SPEED_PV := FFU_AI_SPEED_PV [ 14 ] ;
  81. AI. FFU3_3_SPEED_PV := FFU_AI_SPEED_PV [ 15 ] ;
  82. AI. FFU3_4_SPEED_PV := FFU_AI_SPEED_PV [ 16 ] ;
  83. AI. FFU3_5_SPEED_PV := FFU_AI_SPEED_PV [ 17 ] ;
  84. AI. FFU3_6_SPEED_PV := FFU_AI_SPEED_PV [ 18 ] ;
  85. //AO数据比较
  86. FFU_AO_CTRLWORD [ 1 ] := AO. FFU_ALARM_EN ;
  87. FFU_AO_CTRLWORD [ 2 ] := AO. FFU_HSPEED ;
  88. FFU_AO_CTRLWORD [ 3 ] := AO. FFU_LSPEED ;
  89. FFU_AO_POWER_ON [ 1 ] := AO. FFU1_1_POWER_ON ;
  90. FFU_AO_POWER_ON [ 2 ] := AO. FFU1_2_POWER_ON ;
  91. FFU_AO_POWER_ON [ 3 ] := AO. FFU1_3_POWER_ON ;
  92. FFU_AO_POWER_ON [ 4 ] := AO. FFU1_4_POWER_ON ;
  93. FFU_AO_POWER_ON [ 5 ] := AO. FFU1_5_POWER_ON ;
  94. FFU_AO_POWER_ON [ 6 ] := AO. FFU1_6_POWER_ON ;
  95. FFU_AO_POWER_ON [ 7 ] := AO. FFU2_1_POWER_ON ;
  96. FFU_AO_POWER_ON [ 8 ] := AO. FFU2_2_POWER_ON ;
  97. FFU_AO_POWER_ON [ 9 ] := AO. FFU2_3_POWER_ON ;
  98. FFU_AO_POWER_ON [ 10 ] := AO. FFU2_4_POWER_ON ;
  99. FFU_AO_POWER_ON [ 11 ] := AO. FFU2_5_POWER_ON ;
  100. FFU_AO_POWER_ON [ 12 ] := AO. FFU2_6_POWER_ON ;
  101. FFU_AO_POWER_ON [ 13 ] := AO. FFU3_1_POWER_ON ;
  102. FFU_AO_POWER_ON [ 14 ] := AO. FFU3_2_POWER_ON ;
  103. FFU_AO_POWER_ON [ 15 ] := AO. FFU3_3_POWER_ON ;
  104. FFU_AO_POWER_ON [ 16 ] := AO. FFU3_4_POWER_ON ;
  105. FFU_AO_POWER_ON [ 17 ] := AO. FFU3_5_POWER_ON ;
  106. FFU_AO_POWER_ON [ 18 ] := AO. FFU3_6_POWER_ON ;
  107. FFU_AO_SPEED_SV [ 1 ] := AO. FFU1_1_SPEED_SV ;
  108. FFU_AO_SPEED_SV [ 2 ] := AO. FFU1_2_SPEED_SV ;
  109. FFU_AO_SPEED_SV [ 3 ] := AO. FFU1_3_SPEED_SV ;
  110. FFU_AO_SPEED_SV [ 4 ] := AO. FFU1_4_SPEED_SV ;
  111. FFU_AO_SPEED_SV [ 5 ] := AO. FFU1_5_SPEED_SV ;
  112. FFU_AO_SPEED_SV [ 6 ] := AO. FFU1_6_SPEED_SV ;
  113. FFU_AO_SPEED_SV [ 7 ] := AO. FFU2_1_SPEED_SV ;
  114. FFU_AO_SPEED_SV [ 8 ] := AO. FFU2_2_SPEED_SV ;
  115. FFU_AO_SPEED_SV [ 9 ] := AO. FFU2_3_SPEED_SV ;
  116. FFU_AO_SPEED_SV [ 10 ] := AO. FFU2_4_SPEED_SV ;
  117. FFU_AO_SPEED_SV [ 11 ] := AO. FFU2_5_SPEED_SV ;
  118. FFU_AO_SPEED_SV [ 12 ] := AO. FFU2_6_SPEED_SV ;
  119. FFU_AO_SPEED_SV [ 13 ] := AO. FFU3_1_SPEED_SV ;
  120. FFU_AO_SPEED_SV [ 14 ] := AO. FFU3_2_SPEED_SV ;
  121. FFU_AO_SPEED_SV [ 15 ] := AO. FFU3_3_SPEED_SV ;
  122. FFU_AO_SPEED_SV [ 16 ] := AO. FFU3_4_SPEED_SV ;
  123. FFU_AO_SPEED_SV [ 17 ] := AO. FFU3_5_SPEED_SV ;
  124. FFU_AO_SPEED_SV [ 18 ] := AO. FFU3_6_SPEED_SV ;
  125. WRITE_EN1:=MEMCMP(pBuf1:=ADR(FFU_AO_CTRLWORD) , pBuf2:= ADR(FFU_CTRLWORD_BUFFER), n:=SIZEOF(FFU_CTRLWORD_BUFFER) );
  126. WRITE_EN2:=MEMCMP(pBuf1:=ADR(FFU_AO_POWER_ON) , pBuf2:= ADR(FFU_POWER_ON_BUFFER), n:=SIZEOF(FFU_POWER_ON_BUFFER) );
  127. WRITE_EN3:=MEMCMP(pBuf1:=ADR(FFU_AO_SPEED_SV) , pBuf2:= ADR(FFU_SPEED_SV_BUFFER), n:=SIZEOF(FFU_SPEED_SV_BUFFER) );
  128. WRITE_EN4:=MEMCMP(pBuf1:=ADR(FFU_AO_EN) , pBuf2:= ADR(FFU_EN_BUFFER), n:=SIZEOF(FFU_EN_BUFFER) );
  129. IF FORCE_WRITE_TIMES>=1000
  130. THEN
  131. FORCE_WRITE:=TRUE;
  132. END_IF
  133. (*
  134. MBMaster.WriteRegs(
  135. UnitID:= 1,
  136. Quantity:= 18,
  137. MBAddr:= 16#401,
  138. cbLength:= SIZEOF(FFU_AO_SPEED_SV),
  139. pMemoryAddr:= ADR(FFU_AO_SPEED_SV),
  140. Execute:= TEST6,//TRUE,
  141. Timeout:= T#2000MS,
  142. );
  143. TEST6:=FALSE;
  144. MBMaster.BUSY;
  145. MBMaster.Error;
  146. MBMaster.ErrorId;
  147. *)
  148. (*
  149. MBMaster.ReadRegs(
  150. UnitID:= 1,
  151. Quantity:= 18,
  152. MBAddr:= 257,
  153. cbLength:= SIZEOF(FFU_AI_STATUS),
  154. pMemoryAddr:= ADR(FFU_AI_STATUS),
  155. Execute:= TEST1,//TRUE,
  156. Timeout:= T#200MS,
  157. );
  158. ERRID:= MBMaster.ErrorId;
  159. IF NOT MBMaster.BUSY THEN
  160. TEST1:=FALSE;
  161. //MBMaster.ReadRegs(Execute:=FALSE,);
  162. //FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1;
  163. STAGE:=2;
  164. END_IF
  165. *)
  166. CASE STAGE OF
  167. 0://首次通讯
  168. //STAGE:=1;
  169. 1://读状态
  170. MBMaster.ReadRegs(
  171. UnitID:= 1,
  172. Quantity:= 18,
  173. MBAddr:= 257,
  174. cbLength:= SIZEOF(FFU_AI_STATUS),
  175. pMemoryAddr:= ADR(FFU_AI_STATUS),
  176. Execute:= TRUE,
  177. Timeout:= T#200MS,
  178. );
  179. IF NOT MBMaster.BUSY THEN
  180. //TEST1:=FALSE;
  181. MBMaster.ReadRegs(Execute:=FALSE,);
  182. FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1;
  183. STAGE:=2;
  184. END_IF
  185. 2://读转速
  186. MBMaster.ReadRegs(
  187. UnitID:= 1,
  188. Quantity:= 18,
  189. MBAddr:= 513,
  190. cbLength:= SIZEOF(FFU_AI_SPEED_PV),
  191. pMemoryAddr:= ADR(FFU_AI_SPEED_PV),
  192. Execute:= TRUE,
  193. Timeout:= T#200MS,
  194. );
  195. IF NOT MBMaster.BUSY THEN
  196. //TEST2:=FALSE;
  197. MBMaster.ReadRegs(Execute:=FALSE,);
  198. FORCE_WRITE_TIMES:=FORCE_WRITE_TIMES+1;
  199. STAGE:=3;
  200. END_IF
  201. 3://数值变更判断
  202. IF WRITE_EN1<>0 OR FORCE_WRITE
  203. THEN
  204. STAGE:=4;
  205. ELSIF WRITE_EN2<>0
  206. THEN
  207. STAGE:=5;
  208. ELSIF WRITE_EN3<>0
  209. THEN
  210. STAGE:=6;
  211. ELSIF WRITE_EN4<>0
  212. THEN
  213. STAGE:=7;
  214. ELSIF WRITE_EN5<>0
  215. THEN
  216. STAGE:=8;
  217. ELSE
  218. STAGE:=1;
  219. END_IF
  220. 4://写控制字
  221. MBMaster.WriteRegs(
  222. UnitID:= 1,
  223. Quantity:= 3,
  224. MBAddr:= 2,
  225. cbLength:= SIZEOF(FFU_AO_CTRLWORD),
  226. pMemoryAddr:= ADR(FFU_AO_CTRLWORD),
  227. Execute:= TRUE,
  228. Timeout:= T#200MS,
  229. );
  230. IF NOT MBMaster.BUSY THEN
  231. //TEST4:=FALSE;
  232. MBMaster.WriteRegs(Execute:=FALSE,);
  233. MEMCPY(destAddr:= ADR(FFU_CTRLWORD_BUFFER), srcAddr:= ADR(FFU_AO_CTRLWORD), n:= SIZEOF(FFU_AO_CTRLWORD));
  234. IF NOT FORCE_WRITE
  235. THEN
  236. STAGE:=1;
  237. ELSE
  238. STAGE:=5;
  239. END_IF
  240. END_IF
  241. 5://写启停
  242. MBMaster.WriteRegs(
  243. UnitID:= 1,
  244. Quantity:= 18,
  245. MBAddr:= 769,
  246. cbLength:= SIZEOF(FFU_AO_POWER_ON),
  247. pMemoryAddr:= ADR(FFU_AO_POWER_ON),
  248. Execute:= TRUE,
  249. Timeout:= T#200MS,
  250. );
  251. IF NOT MBMaster.BUSY THEN
  252. //TEST5:=FALSE;
  253. MBMaster.WriteRegs(Execute:=FALSE,);
  254. MEMCPY(destAddr:= ADR(FFU_POWER_ON_BUFFER), srcAddr:= ADR(FFU_AO_POWER_ON), n:= SIZEOF(FFU_AO_POWER_ON));
  255. IF NOT FORCE_WRITE
  256. THEN
  257. STAGE:=1;
  258. ELSE
  259. STAGE:=6;
  260. END_IF
  261. END_IF
  262. 6://写转速
  263. MBMaster.WriteRegs(
  264. UnitID:= 1,
  265. Quantity:= 18,
  266. MBAddr:= 1025,
  267. cbLength:= SIZEOF(FFU_AO_SPEED_SV),
  268. pMemoryAddr:= ADR(FFU_AO_SPEED_SV),
  269. Execute:= TRUE,
  270. Timeout:= T#200MS,
  271. );
  272. IF NOT MBMaster.BUSY THEN
  273. //TEST6:=FALSE;
  274. MBMaster.WriteRegs(Execute:=FALSE,);
  275. MEMCPY(destAddr:= ADR(FFU_SPEED_SV_BUFFER), srcAddr:= ADR(FFU_AO_SPEED_SV), n:= SIZEOF(FFU_AO_SPEED_SV));
  276. IF NOT FORCE_WRITE
  277. THEN
  278. STAGE:=1;
  279. ELSE
  280. STAGE:=7;
  281. END_IF
  282. END_IF
  283. 7://写使能
  284. MBMaster.WriteRegs(
  285. UnitID:= 1,
  286. Quantity:= 18,
  287. MBAddr:= 1281,
  288. cbLength:= SIZEOF(FFU_AO_EN),
  289. pMemoryAddr:= ADR(FFU_AO_EN),
  290. Execute:= TRUE,
  291. Timeout:= T#200MS,
  292. );
  293. IF NOT MBMaster.BUSY THEN
  294. //TEST7:=FALSE;
  295. MBMaster.WriteRegs(Execute:=FALSE,);
  296. MEMCPY(destAddr:= ADR(FFU_EN_BUFFER), srcAddr:= ADR(FFU_AO_EN), n:= SIZEOF(FFU_AO_EN));
  297. STAGE:=1;
  298. IF FORCE_WRITE
  299. THEN
  300. FORCE_WRITE_TIMES:=0;
  301. FORCE_WRITE:=FALSE;
  302. END_IF
  303. END_IF
  304. END_CASE
  305. ]]></ST>
  306. </Implementation>
  307. <LineIds Name="FFU">
  308. <LineId Id="607" Count="0" />
  309. <LineId Id="963" Count="36" />
  310. <LineId Id="962" Count="0" />
  311. <LineId Id="645" Count="0" />
  312. <LineId Id="608" Count="0" />
  313. <LineId Id="229" Count="0" />
  314. <LineId Id="646" Count="3" />
  315. <LineId Id="1000" Count="28" />
  316. <LineId Id="1333" Count="0" />
  317. <LineId Id="1030" Count="6" />
  318. <LineId Id="705" Count="0" />
  319. <LineId Id="332" Count="0" />
  320. <LineId Id="223" Count="1" />
  321. <LineId Id="341" Count="3" />
  322. <LineId Id="347" Count="0" />
  323. <LineId Id="354" Count="1" />
  324. <LineId Id="1196" Count="0" />
  325. <LineId Id="356" Count="0" />
  326. <LineId Id="225" Count="0" />
  327. <LineId Id="1199" Count="1" />
  328. <LineId Id="1198" Count="0" />
  329. <LineId Id="1275" Count="0" />
  330. <LineId Id="1334" Count="1" />
  331. <LineId Id="1281" Count="7" />
  332. <LineId Id="1277" Count="0" />
  333. <LineId Id="1366" Count="3" />
  334. <LineId Id="1278" Count="0" />
  335. <LineId Id="1348" Count="0" />
  336. <LineId Id="1350" Count="14" />
  337. <LineId Id="1349" Count="0" />
  338. <LineId Id="1279" Count="0" />
  339. <LineId Id="1201" Count="0" />
  340. <LineId Id="158" Count="0" />
  341. <LineId Id="217" Count="2" />
  342. <LineId Id="170" Count="0" />
  343. <LineId Id="385" Count="7" />
  344. <LineId Id="382" Count="1" />
  345. <LineId Id="1342" Count="0" />
  346. <LineId Id="396" Count="0" />
  347. <LineId Id="1193" Count="0" />
  348. <LineId Id="399" Count="0" />
  349. <LineId Id="397" Count="0" />
  350. <LineId Id="400" Count="0" />
  351. <LineId Id="402" Count="10" />
  352. <LineId Id="1338" Count="0" />
  353. <LineId Id="413" Count="0" />
  354. <LineId Id="1194" Count="0" />
  355. <LineId Id="415" Count="0" />
  356. <LineId Id="401" Count="0" />
  357. <LineId Id="384" Count="0" />
  358. <LineId Id="418" Count="0" />
  359. <LineId Id="1037" Count="14" />
  360. <LineId Id="1058" Count="1" />
  361. <LineId Id="220" Count="0" />
  362. <LineId Id="432" Count="0" />
  363. <LineId Id="434" Count="0" />
  364. <LineId Id="1060" Count="9" />
  365. <LineId Id="1343" Count="0" />
  366. <LineId Id="1070" Count="1" />
  367. <LineId Id="1202" Count="4" />
  368. <LineId Id="1077" Count="0" />
  369. <LineId Id="433" Count="0" />
  370. <LineId Id="818" Count="1" />
  371. <LineId Id="1078" Count="9" />
  372. <LineId Id="1344" Count="0" />
  373. <LineId Id="1088" Count="1" />
  374. <LineId Id="1207" Count="4" />
  375. <LineId Id="1095" Count="0" />
  376. <LineId Id="448" Count="0" />
  377. <LineId Id="475" Count="1" />
  378. <LineId Id="1096" Count="9" />
  379. <LineId Id="1345" Count="0" />
  380. <LineId Id="1106" Count="1" />
  381. <LineId Id="1212" Count="4" />
  382. <LineId Id="1113" Count="0" />
  383. <LineId Id="478" Count="0" />
  384. <LineId Id="495" Count="0" />
  385. <LineId Id="513" Count="0" />
  386. <LineId Id="1114" Count="9" />
  387. <LineId Id="1347" Count="0" />
  388. <LineId Id="1124" Count="1" />
  389. <LineId Id="1226" Count="0" />
  390. <LineId Id="1217" Count="0" />
  391. <LineId Id="1220" Count="0" />
  392. <LineId Id="1227" Count="0" />
  393. <LineId Id="1221" Count="0" />
  394. <LineId Id="1131" Count="1" />
  395. <LineId Id="605" Count="0" />
  396. <LineId Id="1229" Count="0" />
  397. <LineId Id="1223" Count="0" />
  398. <LineId Id="1222" Count="0" />
  399. </LineIds>
  400. </POU>
  401. </TcPlcObject>