Browse Source

飞龙上位机

master
xing 6 months ago
commit
320d7b79de
  1. 28
      BRCON_MCFB_IU_v3.3.0/$ENV$/Resource/Resource.MAK
  2. 9
      BRCON_MCFB_IU_v3.3.0/$GEN$/BF_IOM0801U_E5.PTT
  3. 9
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_ASCII2INT.PTT
  4. 16
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_AVERAGE.PTT
  5. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_CMFCU.PTT
  6. 22
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DelayGroupVavle.PTT
  7. 76
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DelayRemoteVavle.PTT
  8. 13
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevHeart.PTT
  9. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevHeartCheck.PTT
  10. 20
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevScan.PTT
  11. 19
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_EVC.PTT
  12. 18
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_FEC.PTT
  13. 15
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Feedback.PTT
  14. 16
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GETCRC16.PTT
  15. 19
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GroupVavle.PTT
  16. 19
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GroupVavle50.PTT
  17. 22
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_ModbusCom.PTT
  18. 25
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_PID.PTT
  19. 315
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_RemoteVavle.PTT
  20. 17
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_RunTime.PTT
  21. 23
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_SavePower.PTT
  22. 13
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Scale.PTT
  23. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Scale2.PTT
  24. 36
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Schedule.PTT
  25. 30
      BRCON_MCFB_IU_v3.3.0/$GEN$/BS_SyncVavle.PTT
  26. 16
      BRCON_MCFB_IU_v3.3.0/$GEN$/GETCRC16.PTT
  27. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_AHU.PTT
  28. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHU.PTT
  29. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHUPID.PTT
  30. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHUW.PTT
  31. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHU_0803.PTT
  32. 9
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DT.PTT
  33. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EAF.PTT
  34. 23
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EAFGroup.PTT
  35. 19
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EVC.PTT
  36. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_FAU.PTT
  37. 14
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_FCU.PTT
  38. 17
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LCB0610.PTT
  39. 17
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LCB1030.PTT
  40. 34
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LSyncControl.PTT
  41. 27
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_MSyncControl.PTT
  42. 32
      BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_SyncControl.PTT
  43. 12
      BRCON_MCFB_IU_v3.3.0/$GEN$/Resource/BuildLog.txt
  44. 4
      BRCON_MCFB_IU_v3.3.0/$GEN$/Vartable1.PTT
  45. 596
      BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.POE
  46. 79
      BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.ST
  47. 79
      BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.bak
  48. 55
      BRCON_MCFB_IU_v3.3.0/BRCON_MCFB_ED_v3.3.0.1.GEN
  49. 66
      BRCON_MCFB_IU_v3.3.0/BRCON_MCFB_ED_v3.3.0.1.VAR
  50. 48
      BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.POE
  51. 37
      BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.ST
  52. 14
      BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.bak
  53. 493
      BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.POE
  54. 96
      BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.ST
  55. 96
      BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.bak
  56. 1189
      BRCON_MCFB_IU_v3.3.0/BS_CMFCU.POE
  57. 385
      BRCON_MCFB_IU_v3.3.0/BS_CMFCU.ST
  58. 22
      BRCON_MCFB_IU_v3.3.0/BS_CMFCU.bak
  59. 1102
      BRCON_MCFB_IU_v3.3.0/BS_DELAYGROUPVAVLE.POE
  60. 1163
      BRCON_MCFB_IU_v3.3.0/BS_DELAYREMOTEVAVLE.POE
  61. 97
      BRCON_MCFB_IU_v3.3.0/BS_DEVHEART.POE
  62. 92
      BRCON_MCFB_IU_v3.3.0/BS_DEVHEARTCHECK.POE
  63. 317
      BRCON_MCFB_IU_v3.3.0/BS_DEVSCAN.POE
  64. 173
      BRCON_MCFB_IU_v3.3.0/BS_DelayGroupVavle.ST
  65. 173
      BRCON_MCFB_IU_v3.3.0/BS_DelayGroupVavle.bak
  66. 234
      BRCON_MCFB_IU_v3.3.0/BS_DelayRemoteVavle.ST
  67. 22
      BRCON_MCFB_IU_v3.3.0/BS_DelayRemoteVavle.bak
  68. 48
      BRCON_MCFB_IU_v3.3.0/BS_DevHeart.ST
  69. 48
      BRCON_MCFB_IU_v3.3.0/BS_DevHeart.bak
  70. 49
      BRCON_MCFB_IU_v3.3.0/BS_DevHeartCheck.ST
  71. 22
      BRCON_MCFB_IU_v3.3.0/BS_DevHeartCheck.bak
  72. 90
      BRCON_MCFB_IU_v3.3.0/BS_DevScan.ST
  73. 90
      BRCON_MCFB_IU_v3.3.0/BS_DevScan.bak
  74. 318
      BRCON_MCFB_IU_v3.3.0/BS_EVC.POE
  75. 95
      BRCON_MCFB_IU_v3.3.0/BS_EVC.ST
  76. 97
      BRCON_MCFB_IU_v3.3.0/BS_EVC.bak
  77. 197
      BRCON_MCFB_IU_v3.3.0/BS_FEC.POE
  78. 78
      BRCON_MCFB_IU_v3.3.0/BS_FEC.ST
  79. 22
      BRCON_MCFB_IU_v3.3.0/BS_FEC.bak
  80. 103
      BRCON_MCFB_IU_v3.3.0/BS_FEEDBACK.POE
  81. 46
      BRCON_MCFB_IU_v3.3.0/BS_Feedback.ST
  82. 36
      BRCON_MCFB_IU_v3.3.0/BS_Feedback.bak
  83. 301
      BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.POE
  84. 95
      BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.ST
  85. 73
      BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.bak
  86. 368
      BRCON_MCFB_IU_v3.3.0/BS_GROUPVAVLE.POE
  87. 964
      BRCON_MCFB_IU_v3.3.0/BS_GROUPVAVLE50.POE
  88. 105
      BRCON_MCFB_IU_v3.3.0/BS_GroupVavle.ST
  89. 105
      BRCON_MCFB_IU_v3.3.0/BS_GroupVavle.bak
  90. 221
      BRCON_MCFB_IU_v3.3.0/BS_GroupVavle50.ST
  91. 22
      BRCON_MCFB_IU_v3.3.0/BS_GroupVavle50.bak
  92. 1662
      BRCON_MCFB_IU_v3.3.0/BS_MODBUSCOM.POE
  93. 442
      BRCON_MCFB_IU_v3.3.0/BS_ModbusCom.ST
  94. 442
      BRCON_MCFB_IU_v3.3.0/BS_ModbusCom.bak
  95. 421
      BRCON_MCFB_IU_v3.3.0/BS_PID.POE
  96. 132
      BRCON_MCFB_IU_v3.3.0/BS_PID.ST
  97. 22
      BRCON_MCFB_IU_v3.3.0/BS_PID.bak
  98. 1073
      BRCON_MCFB_IU_v3.3.0/BS_REMOTEVAVLE.POE
  99. 165
      BRCON_MCFB_IU_v3.3.0/BS_RUNTIME.POE
  100. 508
      BRCON_MCFB_IU_v3.3.0/BS_RemoteVavle.ST

28
BRCON_MCFB_IU_v3.3.0/$ENV$/Resource/Resource.MAK

@ -0,0 +1,28 @@
[INFORMATION]
CONFIG=
HARDWARE=EXC6000
SECONDHARDWARE=
PACK_SOURCE=0
TYPE=3
OPERATINGNUMBER=0
OPTIMIZE=2
CONNECTION=127.0.0.1
MAPFILE=1
[IO_EXTERNALS]
FILE=
[TASKS]
FILE0=\MAIN
COUNT=1
[TASK_FILE0]
NETDEP=0
NAME=
TYPE=CYCLIC
INTERRUPT_NAME=
PRIORITY=1
TIME=1
NR=0
OPTIMIZE=3
[GLOBAL]
COUNT=0
[DIRECT_GLOBAL]
COUNT=0

9
BRCON_MCFB_IU_v3.3.0/$GEN$/BF_IOM0801U_E5.PTT

@ -0,0 +1,9 @@
FUNCTION BF_IOM0801U_E5 : INT
VAR_INPUT
temp_in : int ;
temp_last : int ;
END_VAR
END_FUNCTION

9
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_ASCII2INT.PTT

@ -0,0 +1,9 @@
FUNCTION BS_ASCII2INT : INT
VAR_INPUT
ASCII1 : BYTE ;
ASCII2 : BYTE ;
END_VAR
END_FUNCTION

16
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_AVERAGE.PTT

@ -0,0 +1,16 @@
FUNCTION_BLOCK BS_AVERAGE
VAR_INPUT
Input : INT ;
Num : INT := 30 ;
Delay : Time := t#100ms ;
END_VAR
VAR_OUTPUT
Output : INT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_CMFCU.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK BS_CMFCU
VAR_INPUT
FAU_STRUCT_IN : FAU_IN ;
END_VAR
VAR_OUTPUT
FAU_STRUCT_OUT : FAU_OUT ;
END_VAR
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DelayGroupVavle.PTT

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_DelayGroupVavle
VAR_INPUT
LOCK : INT := 0 ;
BOOL_GroupSet : BOOL ;
INT_GroupSet : INT ;
REAL_GroupSet : REAL ;
REAL_IN : ARRAY [ 0 .. 10 ] OF REAL ;
INT_IN : ARRAY [ 0 .. 10 ] OF INT ;
BOOL_IN : ARRAY [ 0 .. 10 ] OF BOOL ;
END_VAR
VAR_OUTPUT
REAL_OUT : ARRAY [ 0 .. 10 ] OF REAL ;
INT_OUT : ARRAY [ 0 .. 10 ] OF INT ;
BOOL_OUT : ARRAY [ 0 .. 10 ] OF BOOL ;
END_VAR
END_FUNCTION_BLOCK

76
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DelayRemoteVavle.PTT

@ -0,0 +1,76 @@
FUNCTION_BLOCK BS_DelayRemoteVavle
VAR_INPUT
Lock : INT ;
REAL_RemoteSet : REAL ;
REAL_IN01 : REAL ;
REAL_IN02 : REAL ;
REAL_IN03 : REAL ;
REAL_IN04 : REAL ;
REAL_IN05 : REAL ;
REAL_IN06 : REAL ;
REAL_IN07 : REAL ;
REAL_IN08 : REAL ;
REAL_IN09 : REAL ;
REAL_IN10 : REAL ;
BOOL_RemoteSet : BOOL ;
BOOL_IN01 : BOOL ;
BOOL_IN02 : BOOL ;
BOOL_IN03 : BOOL ;
BOOL_IN04 : BOOL ;
BOOL_IN05 : BOOL ;
BOOL_IN06 : BOOL ;
BOOL_IN07 : BOOL ;
BOOL_IN08 : BOOL ;
BOOL_IN09 : BOOL ;
BOOL_IN10 : BOOL ;
INT_RemoteSet : INT ;
INT_IN01 : INT ;
INT_IN02 : INT ;
INT_IN03 : INT ;
INT_IN04 : INT ;
INT_IN05 : INT ;
INT_IN06 : INT ;
INT_IN07 : INT ;
INT_IN08 : INT ;
INT_IN09 : INT ;
INT_IN10 : INT ;
END_VAR
VAR_OUTPUT
REAL_OUT01 : REAL ;
REAL_OUT02 : REAL ;
REAL_OUT03 : REAL ;
REAL_OUT04 : REAL ;
REAL_OUT05 : REAL ;
REAL_OUT06 : REAL ;
REAL_OUT07 : REAL ;
REAL_OUT08 : REAL ;
REAL_OUT09 : REAL ;
REAL_OUT10 : REAL ;
BOOL_OUT01 : BOOL ;
BOOL_OUT02 : BOOL ;
BOOL_OUT03 : BOOL ;
BOOL_OUT04 : BOOL ;
BOOL_OUT05 : BOOL ;
BOOL_OUT06 : BOOL ;
BOOL_OUT07 : BOOL ;
BOOL_OUT08 : BOOL ;
BOOL_OUT09 : BOOL ;
BOOL_OUT10 : BOOL ;
INT_OUT01 : INT ;
INT_OUT02 : INT ;
INT_OUT03 : INT ;
INT_OUT04 : INT ;
INT_OUT05 : INT ;
INT_OUT06 : INT ;
INT_OUT07 : INT ;
INT_OUT08 : INT ;
INT_OUT09 : INT ;
INT_OUT10 : INT ;
END_VAR
END_FUNCTION_BLOCK

13
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevHeart.PTT

@ -0,0 +1,13 @@
FUNCTION_BLOCK BS_DevHeart
VAR_INPUT
END_VAR
VAR_OUTPUT
HeartVavle : int ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevHeartCheck.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK BS_DevHeartCheck
VAR_INPUT
DHV : INT ;
END_VAR
VAR_OUTPUT
DHR : BOOL ;
END_VAR
END_FUNCTION_BLOCK

20
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_DevScan.PTT

@ -0,0 +1,20 @@
FUNCTION_BLOCK BS_DevScan
VAR_INPUT
Dev_Scan_Hex : DWORD ;
Dev_Array : ARRAY [ 0 .. 31 ] of byte ;
END_VAR
VAR_OUTPUT
Dev_Status : DWORD ;
Dev_Ratio : REAL ;
Dev_Ready : BOOL ;
Dev_Total : INT ;
Dev_Error : INT ;
HeartVavle : int ;
END_VAR
END_FUNCTION_BLOCK

19
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_EVC.PTT

@ -0,0 +1,19 @@
FUNCTION_BLOCK BS_EVC
VAR_INPUT
RUN : BOOL ;
SET : REAL ;
FB : REAL ;
Dead_Band : REAL := 0.5 ;
Delay : TIME := t#30s ;
SW : INT ;
END_VAR
VAR_OUTPUT
EVC : BOOL ;
END_VAR
END_FUNCTION_BLOCK

18
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_FEC.PTT

@ -0,0 +1,18 @@
FUNCTION_BLOCK BS_FEC
VAR_INPUT
RUN : BOOL ;
SET : REAL ;
FB : REAL ;
Dead_Band : REAL := 10.0 ;
Delay : TIME := t#300s ;
END_VAR
VAR_OUTPUT
DevC : BOOL ;
END_VAR
END_FUNCTION_BLOCK

15
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Feedback.PTT

@ -0,0 +1,15 @@
FUNCTION_BLOCK BS_Feedback
VAR_INPUT
Control : BOOL ;
Run : BOOL ;
END_VAR
VAR_OUTPUT
ALARM : BOOL ;
END_VAR
END_FUNCTION_BLOCK

16
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GETCRC16.PTT

@ -0,0 +1,16 @@
FUNCTION_BLOCK BS_GETCRC16
VAR_INPUT
CRC_IN : array [ 0 .. 200 ] of byte ;
CRC_LEN : INT ;
END_VAR
VAR_OUTPUT
CRC16H : byte ;
CRC16L : byte ;
END_VAR
END_FUNCTION_BLOCK

19
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GroupVavle.PTT

@ -0,0 +1,19 @@
FUNCTION_BLOCK BS_GroupVavle
VAR_INPUT
LOCK : INT := 0 ;
BOOL_GroupSet : BOOL ;
INT_GroupSet : INT ;
REAL_GroupSet : REAL ;
END_VAR
VAR_OUTPUT
REAL_OUT : ARRAY [ 0 .. 10 ] OF REAL ;
INT_OUT : ARRAY [ 0 .. 10 ] OF INT ;
BOOL_OUT : ARRAY [ 0 .. 10 ] OF BOOL ;
END_VAR
END_FUNCTION_BLOCK

19
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_GroupVavle50.PTT

@ -0,0 +1,19 @@
FUNCTION_BLOCK BS_GroupVavle50
VAR_INPUT
LOCK : INT := 0 ;
BOOL_GroupSet : BOOL ;
INT_GroupSet : INT ;
REAL_GroupSet : REAL ;
END_VAR
VAR_OUTPUT
REAL_OUT : ARRAY [ 0 .. 50 ] OF REAL ;
INT_OUT : ARRAY [ 0 .. 50 ] OF INT ;
BOOL_OUT : ARRAY [ 0 .. 50 ] OF BOOL ;
END_VAR
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_ModbusCom.PTT

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_ModbusCom
VAR_INPUT
SerialCom : byte ;
NetSend : array [ 0 .. 64 ] of NetSendConfig ;
NetSendDelay : time ;
ComSend : array [ 0 .. 64 ] of ComSendConfig ;
ComSendDelay : time ;
ComRecvDelay : time ;
ComAnalysisDelay : time ;
DataReadLength : int ;
END_VAR
VAR_OUTPUT
DataStr : array [ 0 .. 128 ] of byte ;
DataRead : array [ 0 .. 128 ] of DataFormat ;
END_VAR
END_FUNCTION_BLOCK

25
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_PID.PTT

@ -0,0 +1,25 @@
FUNCTION_BLOCK BS_PID
VAR_INPUT
RUN : BOOL ;
STOP_D : BOOL ;
STOP_I : BOOL ;
SET : REAL ;
FB : REAL ;
Kfb : REAL := 1.0 ;
Kp : REAL := 30.0 ;
Ti : REAL := 150.0 ;
Td : REAL ;
Dead_Band : REAL ;
Ymax : REAL ;
Ymin : REAL ;
END_VAR
VAR_OUTPUT
OUT : REAL ;
END_VAR
END_FUNCTION_BLOCK

315
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_RemoteVavle.PTT

@ -0,0 +1,315 @@
FUNCTION_BLOCK BS_RemoteVavle
VAR_INPUT
REAL_RemoteSet : REAL ;
REAL_IN01 : REAL ;
REAL_IN02 : REAL ;
REAL_IN03 : REAL ;
REAL_IN04 : REAL ;
REAL_IN05 : REAL ;
REAL_IN06 : REAL ;
REAL_IN07 : REAL ;
REAL_IN08 : REAL ;
REAL_IN09 : REAL ;
REAL_IN10 : REAL ;
REAL_IN11 : REAL ;
REAL_IN12 : REAL ;
REAL_IN13 : REAL ;
REAL_IN14 : REAL ;
REAL_IN15 : REAL ;
REAL_IN16 : REAL ;
REAL_IN17 : REAL ;
REAL_IN18 : REAL ;
REAL_IN19 : REAL ;
REAL_IN20 : REAL ;
REAL_IN21 : REAL ;
REAL_IN22 : REAL ;
REAL_IN23 : REAL ;
REAL_IN24 : REAL ;
REAL_IN25 : REAL ;
REAL_IN26 : REAL ;
REAL_IN27 : REAL ;
REAL_IN28 : REAL ;
REAL_IN29 : REAL ;
REAL_IN30 : REAL ;
REAL_IN31 : REAL ;
REAL_IN32 : REAL ;
REAL_IN33 : REAL ;
REAL_IN34 : REAL ;
REAL_IN35 : REAL ;
REAL_IN36 : REAL ;
REAL_IN37 : REAL ;
REAL_IN38 : REAL ;
REAL_IN39 : REAL ;
REAL_IN40 : REAL ;
REAL_IN41 : REAL ;
REAL_IN42 : REAL ;
REAL_IN43 : REAL ;
REAL_IN44 : REAL ;
REAL_IN45 : REAL ;
REAL_IN46 : REAL ;
REAL_IN47 : REAL ;
REAL_IN48 : REAL ;
REAL_IN49 : REAL ;
REAL_IN50 : REAL ;
BOOL_RemoteSet : BOOL ;
BOOL_IN01 : BOOL ;
BOOL_IN02 : BOOL ;
BOOL_IN03 : BOOL ;
BOOL_IN04 : BOOL ;
BOOL_IN05 : BOOL ;
BOOL_IN06 : BOOL ;
BOOL_IN07 : BOOL ;
BOOL_IN08 : BOOL ;
BOOL_IN09 : BOOL ;
BOOL_IN10 : BOOL ;
BOOL_IN11 : BOOL ;
BOOL_IN12 : BOOL ;
BOOL_IN13 : BOOL ;
BOOL_IN14 : BOOL ;
BOOL_IN15 : BOOL ;
BOOL_IN16 : BOOL ;
BOOL_IN17 : BOOL ;
BOOL_IN18 : BOOL ;
BOOL_IN19 : BOOL ;
BOOL_IN20 : BOOL ;
BOOL_IN21 : BOOL ;
BOOL_IN22 : BOOL ;
BOOL_IN23 : BOOL ;
BOOL_IN24 : BOOL ;
BOOL_IN25 : BOOL ;
BOOL_IN26 : BOOL ;
BOOL_IN27 : BOOL ;
BOOL_IN28 : BOOL ;
BOOL_IN29 : BOOL ;
BOOL_IN30 : BOOL ;
BOOL_IN31 : BOOL ;
BOOL_IN32 : BOOL ;
BOOL_IN33 : BOOL ;
BOOL_IN34 : BOOL ;
BOOL_IN35 : BOOL ;
BOOL_IN36 : BOOL ;
BOOL_IN37 : BOOL ;
BOOL_IN38 : BOOL ;
BOOL_IN39 : BOOL ;
BOOL_IN40 : BOOL ;
BOOL_IN41 : BOOL ;
BOOL_IN42 : BOOL ;
BOOL_IN43 : BOOL ;
BOOL_IN44 : BOOL ;
BOOL_IN45 : BOOL ;
BOOL_IN46 : BOOL ;
BOOL_IN47 : BOOL ;
BOOL_IN48 : BOOL ;
BOOL_IN49 : BOOL ;
BOOL_IN50 : BOOL ;
INT_RemoteSet : INT ;
INT_IN01 : INT ;
INT_IN02 : INT ;
INT_IN03 : INT ;
INT_IN04 : INT ;
INT_IN05 : INT ;
INT_IN06 : INT ;
INT_IN07 : INT ;
INT_IN08 : INT ;
INT_IN09 : INT ;
INT_IN10 : INT ;
INT_IN11 : INT ;
INT_IN12 : INT ;
INT_IN13 : INT ;
INT_IN14 : INT ;
INT_IN15 : INT ;
INT_IN16 : INT ;
INT_IN17 : INT ;
INT_IN18 : INT ;
INT_IN19 : INT ;
INT_IN20 : INT ;
INT_IN21 : INT ;
INT_IN22 : INT ;
INT_IN23 : INT ;
INT_IN24 : INT ;
INT_IN25 : INT ;
INT_IN26 : INT ;
INT_IN27 : INT ;
INT_IN28 : INT ;
INT_IN29 : INT ;
INT_IN30 : INT ;
INT_IN31 : INT ;
INT_IN32 : INT ;
INT_IN33 : INT ;
INT_IN34 : INT ;
INT_IN35 : INT ;
INT_IN36 : INT ;
INT_IN37 : INT ;
INT_IN38 : INT ;
INT_IN39 : INT ;
INT_IN40 : INT ;
INT_IN41 : INT ;
INT_IN42 : INT ;
INT_IN43 : INT ;
INT_IN44 : INT ;
INT_IN45 : INT ;
INT_IN46 : INT ;
INT_IN47 : INT ;
INT_IN48 : INT ;
INT_IN49 : INT ;
INT_IN50 : INT ;
END_VAR
VAR_OUTPUT
REAL_OUT01 : REAL ;
REAL_OUT02 : REAL ;
REAL_OUT03 : REAL ;
REAL_OUT04 : REAL ;
REAL_OUT05 : REAL ;
REAL_OUT06 : REAL ;
REAL_OUT07 : REAL ;
REAL_OUT08 : REAL ;
REAL_OUT09 : REAL ;
REAL_OUT10 : REAL ;
REAL_OUT11 : REAL ;
REAL_OUT12 : REAL ;
REAL_OUT13 : REAL ;
REAL_OUT14 : REAL ;
REAL_OUT15 : REAL ;
REAL_OUT16 : REAL ;
REAL_OUT17 : REAL ;
REAL_OUT18 : REAL ;
REAL_OUT19 : REAL ;
REAL_OUT20 : REAL ;
REAL_OUT21 : REAL ;
REAL_OUT22 : REAL ;
REAL_OUT23 : REAL ;
REAL_OUT24 : REAL ;
REAL_OUT25 : REAL ;
REAL_OUT26 : REAL ;
REAL_OUT27 : REAL ;
REAL_OUT28 : REAL ;
REAL_OUT29 : REAL ;
REAL_OUT30 : REAL ;
REAL_OUT31 : REAL ;
REAL_OUT32 : REAL ;
REAL_OUT33 : REAL ;
REAL_OUT34 : REAL ;
REAL_OUT35 : REAL ;
REAL_OUT36 : REAL ;
REAL_OUT37 : REAL ;
REAL_OUT38 : REAL ;
REAL_OUT39 : REAL ;
REAL_OUT40 : REAL ;
REAL_OUT41 : REAL ;
REAL_OUT42 : REAL ;
REAL_OUT43 : REAL ;
REAL_OUT44 : REAL ;
REAL_OUT45 : REAL ;
REAL_OUT46 : REAL ;
REAL_OUT47 : REAL ;
REAL_OUT48 : REAL ;
REAL_OUT49 : REAL ;
REAL_OUT50 : REAL ;
BOOL_OUT01 : BOOL ;
BOOL_OUT02 : BOOL ;
BOOL_OUT03 : BOOL ;
BOOL_OUT04 : BOOL ;
BOOL_OUT05 : BOOL ;
BOOL_OUT06 : BOOL ;
BOOL_OUT07 : BOOL ;
BOOL_OUT08 : BOOL ;
BOOL_OUT09 : BOOL ;
BOOL_OUT10 : BOOL ;
BOOL_OUT11 : BOOL ;
BOOL_OUT12 : BOOL ;
BOOL_OUT13 : BOOL ;
BOOL_OUT14 : BOOL ;
BOOL_OUT15 : BOOL ;
BOOL_OUT16 : BOOL ;
BOOL_OUT17 : BOOL ;
BOOL_OUT18 : BOOL ;
BOOL_OUT19 : BOOL ;
BOOL_OUT20 : BOOL ;
BOOL_OUT21 : BOOL ;
BOOL_OUT22 : BOOL ;
BOOL_OUT23 : BOOL ;
BOOL_OUT24 : BOOL ;
BOOL_OUT25 : BOOL ;
BOOL_OUT26 : BOOL ;
BOOL_OUT27 : BOOL ;
BOOL_OUT28 : BOOL ;
BOOL_OUT29 : BOOL ;
BOOL_OUT30 : BOOL ;
BOOL_OUT31 : BOOL ;
BOOL_OUT32 : BOOL ;
BOOL_OUT33 : BOOL ;
BOOL_OUT34 : BOOL ;
BOOL_OUT35 : BOOL ;
BOOL_OUT36 : BOOL ;
BOOL_OUT37 : BOOL ;
BOOL_OUT38 : BOOL ;
BOOL_OUT39 : BOOL ;
BOOL_OUT40 : BOOL ;
BOOL_OUT41 : BOOL ;
BOOL_OUT42 : BOOL ;
BOOL_OUT43 : BOOL ;
BOOL_OUT44 : BOOL ;
BOOL_OUT45 : BOOL ;
BOOL_OUT46 : BOOL ;
BOOL_OUT47 : BOOL ;
BOOL_OUT48 : BOOL ;
BOOL_OUT49 : BOOL ;
BOOL_OUT50 : BOOL ;
INT_OUT01 : INT ;
INT_OUT02 : INT ;
INT_OUT03 : INT ;
INT_OUT04 : INT ;
INT_OUT05 : INT ;
INT_OUT06 : INT ;
INT_OUT07 : INT ;
INT_OUT08 : INT ;
INT_OUT09 : INT ;
INT_OUT10 : INT ;
INT_OUT11 : INT ;
INT_OUT12 : INT ;
INT_OUT13 : INT ;
INT_OUT14 : INT ;
INT_OUT15 : INT ;
INT_OUT16 : INT ;
INT_OUT17 : INT ;
INT_OUT18 : INT ;
INT_OUT19 : INT ;
INT_OUT20 : INT ;
INT_OUT21 : INT ;
INT_OUT22 : INT ;
INT_OUT23 : INT ;
INT_OUT24 : INT ;
INT_OUT25 : INT ;
INT_OUT26 : INT ;
INT_OUT27 : INT ;
INT_OUT28 : INT ;
INT_OUT29 : INT ;
INT_OUT30 : INT ;
INT_OUT31 : INT ;
INT_OUT32 : INT ;
INT_OUT33 : INT ;
INT_OUT34 : INT ;
INT_OUT35 : INT ;
INT_OUT36 : INT ;
INT_OUT37 : INT ;
INT_OUT38 : INT ;
INT_OUT39 : INT ;
INT_OUT40 : INT ;
INT_OUT41 : INT ;
INT_OUT42 : INT ;
INT_OUT43 : INT ;
INT_OUT44 : INT ;
INT_OUT45 : INT ;
INT_OUT46 : INT ;
INT_OUT47 : INT ;
INT_OUT48 : INT ;
INT_OUT49 : INT ;
INT_OUT50 : INT ;
END_VAR
END_FUNCTION_BLOCK

17
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_RunTime.PTT

@ -0,0 +1,17 @@
FUNCTION_BLOCK BS_RunTime
VAR_INPUT
Run : BOOL ;
RunTimeSet : REAL ;
RunTimeRST : BOOL ;
RunTimeRec_In : REAL ;
END_VAR
VAR_OUTPUT
RunTime : REAL ;
END_VAR
END_FUNCTION_BLOCK

23
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_SavePower.PTT

@ -0,0 +1,23 @@
FUNCTION_BLOCK BS_SavePower
VAR_INPUT
Input_Type : byte ;
Read_Iso : bool ;
Set_Timer : time ;
Judge_Num : int ;
Mem_Addr : word ;
Flash_Addr : word ;
Save_Len : word ;
WriteNumRec_In : int ;
END_VAR
VAR_OUTPUT
Write_Flag : bool ;
Read_Flag : bool ;
Write_Num : int ;
END_VAR
END_FUNCTION_BLOCK

13
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Scale.PTT

@ -0,0 +1,13 @@
FUNCTION BS_Scale : REAL
VAR_INPUT
Input : INT ;
Input_Type : BYTE ;
PVL : INT ;
PVH : INT ;
ROffset : INT ;
Offset : REAL ;
END_VAR
END_FUNCTION

14
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Scale2.PTT

@ -0,0 +1,14 @@
FUNCTION BS_Scale2 : REAL
VAR_INPUT
Input : INT ;
Input_Type : BYTE ;
PVL : INT ;
PVH : INT ;
ROffset : INT ;
Offset : REAL ;
Filter : BOOL ;
END_VAR
END_FUNCTION

36
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_Schedule.PTT

@ -0,0 +1,36 @@
FUNCTION_BLOCK BS_Schedule
VAR_INPUT
W1SCH_str : STRING ;
W2SCH_str : STRING ;
W3SCH_str : STRING ;
W4SCH_str : STRING ;
W5SCH_str : STRING ;
W6SCH_str : STRING ;
W7SCH_str : STRING ;
W1SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W2SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W3SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W4SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W5SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W6SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
W7SCH : ARRAY [ 1 .. 4 ] OF TimeConfig ;
EnableNum : INT ;
Enable : BOOL ;
Delay : INT ;
Mode : INT ;
InputMode : INT ;
END_VAR
VAR_OUTPUT
TimeSw1 : BOOL ;
TimeSw2 : BOOL ;
TimeSw3 : BOOL ;
TimeSw4 : BOOL ;
OUT_Z : BOOL ;
END_VAR
END_FUNCTION_BLOCK

30
BRCON_MCFB_IU_v3.3.0/$GEN$/BS_SyncVavle.PTT

@ -0,0 +1,30 @@
FUNCTION_BLOCK BS_SyncVavle
VAR_INPUT
REAL_IN1 : REAL ;
REAL_IN2 : REAL ;
REAL_IN3 : REAL ;
BOOL_IN1 : BOOL ;
BOOL_IN2 : BOOL ;
BOOL_IN3 : BOOL ;
INT_IN1 : INT ;
INT_IN2 : INT ;
INT_IN3 : INT ;
END_VAR
VAR_OUTPUT
REAL_OUT1 : REAL ;
REAL_OUT2 : REAL ;
REAL_OUT3 : REAL ;
BOOL_OUT1 : BOOL ;
BOOL_OUT2 : BOOL ;
BOOL_OUT3 : BOOL ;
INT_OUT1 : INT ;
INT_OUT2 : INT ;
INT_OUT3 : INT ;
END_VAR
END_FUNCTION_BLOCK

16
BRCON_MCFB_IU_v3.3.0/$GEN$/GETCRC16.PTT

@ -0,0 +1,16 @@
FUNCTION_BLOCK GETCRC16
VAR_INPUT
CRC_ADR : dword ;
CRC_LEN : word ;
END_VAR
VAR_OUTPUT
CRC16H : byte ;
CRC16L : byte ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_AHU.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_AHU
VAR_INPUT
AHU_STRUCT_IN : AHU_IN ;
END_VAR
VAR_OUTPUT
AHU_STRUCT_OUT : AHU_OUT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHU.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_DAHU
VAR_INPUT
DAHU_STRUCT_IN : DAHU_IN ;
END_VAR
VAR_OUTPUT
DAHU_STRUCT_OUT : DAHU_OUT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHUPID.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_DAHUPID
VAR_INPUT
DAHU_STRUCT_IN : DAHU_IN ;
END_VAR
VAR_OUTPUT
DAHU_STRUCT_OUT : DAHU_OUT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHUW.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_DAHUW
VAR_INPUT
DAHUW_STRUCT_IN : DAHUW_IN ;
END_VAR
VAR_OUTPUT
DAHUW_STRUCT_OUT : DAHUW_OUT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DAHU_0803.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJDAHU
VAR_INPUT
DAHU_STRUCT_IN : DAHU_IN ;
END_VAR
VAR_OUTPUT
DAHU_STRUCT_OUT : DAHU_OUT ;
END_VAR
END_FUNCTION_BLOCK

9
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_DT.PTT

@ -0,0 +1,9 @@
FUNCTION IJ_DT : BOOL
VAR_INPUT
dt_up : BOOL ;
dt_down : BOOL ;
END_VAR
END_FUNCTION

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EAF.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_EAF
VAR_INPUT
EAF_STRUCT_IN : EAF_IN ;
END_VAR
VAR_OUTPUT
EAF_STRUCT_OUT : EAF_OUT ;
END_VAR
END_FUNCTION_BLOCK

23
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EAFGroup.PTT

@ -0,0 +1,23 @@
FUNCTION_BLOCK IJ_EAFGroup
VAR_INPUT
Enable : bool ;
LinkageValue : ARRAY [ 0 .. 10 ] of real ;
Dead_Band : real := 10.0 ;
MaxRange : real := 1000.0 ;
MinRange : real := 10.0 ;
LinkageSet : real ;
HoldDelay : time := t#60s ;
EnableNum : INT ;
SCH_str : STRING ;
ALLDAY : BOOL ;
END_VAR
VAR_OUTPUT
LinkageOut : ARRAY [ 0 .. 10 ] of bool ;
END_VAR
END_FUNCTION_BLOCK

19
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_EVC.PTT

@ -0,0 +1,19 @@
FUNCTION_BLOCK IJ_EVC
VAR_INPUT
RUN : BOOL ;
SET : REAL ;
FB : REAL ;
Dead_Band : REAL := 0.5 ;
Delay : TIME := t#30s ;
SW : INT ;
END_VAR
VAR_OUTPUT
EVC : BOOL ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_FAU.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_FAU
VAR_INPUT
FAU_STRUCT_IN : FAU_IN ;
END_VAR
VAR_OUTPUT
FAU_STRUCT_OUT : FAU_OUT ;
END_VAR
END_FUNCTION_BLOCK

14
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_FCU.PTT

@ -0,0 +1,14 @@
FUNCTION_BLOCK IJ_FCU
VAR_INPUT
FCU_STRUCT_IN : FCU_IN ;
END_VAR
VAR_OUTPUT
FCU_STRUCT_OUT : FCU_OUT ;
END_VAR
END_FUNCTION_BLOCK

17
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LCB0610.PTT

@ -0,0 +1,17 @@
FUNCTION_BLOCK IJ_LCB0610
VAR_INPUT
LOCK : int := 0 ;
LightGroup_Input : array [ 0 .. 6 , 0 .. 10 ] of bool ;
CM : bool ;
Delay : time := t#50ms ;
END_VAR
VAR_OUTPUT
LightGroup_Output : array [ 0 .. 6 , 0 .. 10 ] of bool ;
END_VAR
END_FUNCTION_BLOCK

17
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LCB1030.PTT

@ -0,0 +1,17 @@
FUNCTION_BLOCK IJ_LCB1030
VAR_INPUT
LOCK : int := 0 ;
LightGroup_Input : array [ 0 .. 10 , 0 .. 30 ] of bool ;
CM : bool ;
Delay : time := t#50ms ;
END_VAR
VAR_OUTPUT
LightGroup_Output : array [ 0 .. 10 , 0 .. 30 ] of bool ;
END_VAR
END_FUNCTION_BLOCK

34
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_LSyncControl.PTT

@ -0,0 +1,34 @@
FUNCTION_BLOCK IJ_LSyncControl
VAR_INPUT
REAL_IN0 : REAL ;
REAL_IN1 : REAL ;
REAL_IN2 : REAL ;
BOOL_IN0 : BOOL ;
BOOL_IN1 : BOOL ;
BOOL_IN2 : BOOL ;
BOOL_IN3 : BOOL ;
INT_IN0 : INT ;
INT_IN1 : INT ;
INT_IN2 : INT ;
CM : BOOL ;
RM : INT ;
END_VAR
VAR_OUTPUT
REAL_OUT0 : REAL ;
REAL_OUT1 : REAL ;
REAL_OUT2 : REAL ;
BOOL_OUT0 : BOOL ;
BOOL_OUT1 : BOOL ;
BOOL_OUT2 : BOOL ;
BOOL_OUT3 : BOOL ;
INT_OUT0 : INT ;
INT_OUT1 : INT ;
INT_OUT2 : INT ;
END_VAR
END_FUNCTION_BLOCK

27
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_MSyncControl.PTT

@ -0,0 +1,27 @@
FUNCTION_BLOCK IJ_MSyncControl
VAR_INPUT
REAL_IN1 : REAL ;
REAL_IN2 : REAL ;
BOOL_IN0 : BOOL ;
BOOL_IN1 : BOOL ;
BOOL_IN2 : BOOL ;
INT_IN1 : INT ;
INT_IN2 : INT ;
CM : BOOL ;
END_VAR
VAR_OUTPUT
REAL_OUT1 : REAL ;
REAL_OUT2 : REAL ;
BOOL_OUT0 : BOOL ;
BOOL_OUT1 : BOOL ;
BOOL_OUT2 : BOOL ;
INT_OUT1 : INT ;
INT_OUT2 : INT ;
END_VAR
END_FUNCTION_BLOCK

32
BRCON_MCFB_IU_v3.3.0/$GEN$/IJ_SyncControl.PTT

@ -0,0 +1,32 @@
FUNCTION_BLOCK IJ_SyncControl
VAR_INPUT
REAL_IN0 : REAL ;
REAL_IN1 : REAL ;
REAL_IN2 : REAL ;
BOOL_IN0 : BOOL ;
BOOL_IN1 : BOOL ;
BOOL_IN2 : BOOL ;
INT_IN0 : INT ;
INT_IN1 : INT ;
INT_IN2 : INT ;
CM : BOOL ;
RM : INT ;
END_VAR
VAR_OUTPUT
REAL_OUT0 : REAL ;
REAL_OUT1 : REAL ;
REAL_OUT2 : REAL ;
BOOL_OUT0 : BOOL ;
BOOL_OUT1 : BOOL ;
BOOL_OUT2 : BOOL ;
INT_OUT0 : INT ;
INT_OUT1 : INT ;
INT_OUT2 : INT ;
END_VAR
END_FUNCTION_BLOCK

12
BRCON_MCFB_IU_v3.3.0/$GEN$/Resource/BuildLog.txt

@ -0,0 +1,12 @@
->开始编译工程配置项...
->开始工程初始化...
->开始创建关联...
文件未找到: C:\Users\daijh\Desktop\PM24041 常州飞龙吾悦广场商业智能化项目\20241030飞龙吾悦下位机软件\BRCON_MCFB_IU_v3.3.0\MAIN.POE.
1 错误, 0 警告.
1 错误, 0 警告.

4
BRCON_MCFB_IU_v3.3.0/$GEN$/Vartable1.PTT

@ -0,0 +1,4 @@
PROGRAM Vartable1
END_PROGRAM

596
BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.POE

@ -0,0 +1,596 @@
FUNCTION BF_IOM0801U_E5 : INT
VAR_INPUT
temp_in : int;
temp_last : int;
END_VAR
VAR
END_VAR
(** {* **)
(** **)
(** 时 间:20210610 **)
(** 版 本:1.0 **)
(** 作 者:冯华强 **)
(** 名 称:针对IOM.0801U-E5版本以前的模块出现的跳变过滤函数 **)
(** 说 明:过滤规则: **)
(** 温度值在进入正常值正负0.5度范围内,判断跳变值是否出现,如果出现,保持原值。如果没有跳变,更新输入值。 **)
(** 跳变影响温度值0.1度。 **)
(** 备 注:无 **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** Input_Type: 输入 temp_in 未经通道实际值 **)
(** temp_last 经跳变过滤规则过滤后的值 **)
(** **)
(** 输出 跳变过滤规则过滤后的输出值 **)
(** *} **)
(** **)
(** if temp_last>-3960 and temp_last<-3860 and temp_in>-5030 and temp_in<-4930 then **)
(* if - Cond *)
LD temp_last
GT -3960
AND ( temp_last
LT -3860
)
AND ( temp_in
GT -5030
)
AND ( temp_in
LT -4930
)
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>-2870 and temp_last<-2770 and temp_in>-5030 and temp_in<-4930 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000001:
LD temp_last
GT -2870
AND ( temp_last
LT -2770
)
AND ( temp_in
GT -5030
)
AND ( temp_in
LT -4930
)
JMPCN ODK_SKIP_000000000000001_000000000000002
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>-1780 and temp_last<-1680 and temp_in>-2850 and temp_in<-2750 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000002:
LD temp_last
GT -1780
AND ( temp_last
LT -1680
)
AND ( temp_in
GT -2850
)
AND ( temp_in
LT -2750
)
JMPCN ODK_SKIP_000000000000001_000000000000003
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>-1220 and temp_last<-1120 and temp_in>-1760 and temp_in<-1660 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000003:
LD temp_last
GT -1220
AND ( temp_last
LT -1120
)
AND ( temp_in
GT -1760
)
AND ( temp_in
LT -1660
)
JMPCN ODK_SKIP_000000000000001_000000000000004
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>-680 and temp_last<-580 and temp_in>-5030 and temp_in<-4930 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000004:
LD temp_last
GT -680
AND ( temp_last
LT -580
)
AND ( temp_in
GT -5030
)
AND ( temp_in
LT -4930
)
JMPCN ODK_SKIP_000000000000001_000000000000005
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>-140 and temp_last<-40 and temp_in>-660 and temp_in<-560 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000005:
LD temp_last
GT -140
AND ( temp_last
LT -40
)
AND ( temp_in
GT -660
)
AND ( temp_in
LT -560
)
JMPCN ODK_SKIP_000000000000001_000000000000006
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>400 and temp_last<500 and temp_in>-660 and temp_in<-560 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000006:
LD temp_last
GT 400
AND ( temp_last
LT 500
)
AND ( temp_in
GT -660
)
AND ( temp_in
LT -560
)
JMPCN ODK_SKIP_000000000000001_000000000000007
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>950 and temp_last<1050 and temp_in>410 and temp_in<510 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000007:
LD temp_last
GT 950
AND ( temp_last
LT 1050
)
AND ( temp_in
GT 410
)
AND ( temp_in
LT 510
)
JMPCN ODK_SKIP_000000000000001_000000000000008
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>1500 and temp_last<1600 and temp_in>-660 and temp_in<-560 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000008:
LD temp_last
GT 1500
AND ( temp_last
LT 1600
)
AND ( temp_in
GT -660
)
AND ( temp_in
LT -560
)
JMPCN ODK_SKIP_000000000000001_000000000000009
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>2050 and temp_last<2150 and temp_in>1510 and temp_in<1610 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_000000000000009:
LD temp_last
GT 2050
AND ( temp_last
LT 2150
)
AND ( temp_in
GT 1510
)
AND ( temp_in
LT 1610
)
JMPCN ODK_SKIP_000000000000001_00000000000000A
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>2590 and temp_last<2690 and temp_in>1510 and temp_in<1610 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000A:
LD temp_last
GT 2590
AND ( temp_last
LT 2690
)
AND ( temp_in
GT 1510
)
AND ( temp_in
LT 1610
)
JMPCN ODK_SKIP_000000000000001_00000000000000B
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>3140 and temp_last<3240 and temp_in>2600 and temp_in<2700 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000B:
LD temp_last
GT 3140
AND ( temp_last
LT 3240
)
AND ( temp_in
GT 2600
)
AND ( temp_in
LT 2700
)
JMPCN ODK_SKIP_000000000000001_00000000000000C
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>3690 and temp_last<3790 and temp_in>-5030 and temp_in<-4930 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000C:
LD temp_last
GT 3690
AND ( temp_last
LT 3790
)
AND ( temp_in
GT -5030
)
AND ( temp_in
LT -4930
)
JMPCN ODK_SKIP_000000000000001_00000000000000D
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>4230 and temp_last<4330 and temp_in>3700 and temp_in<3800 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000D:
LD temp_last
GT 4230
AND ( temp_last
LT 4330
)
AND ( temp_in
GT 3700
)
AND ( temp_in
LT 3800
)
JMPCN ODK_SKIP_000000000000001_00000000000000E
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>4780 and temp_last<4880 and temp_in>3700 and temp_in<3800 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000E:
LD temp_last
GT 4780
AND ( temp_last
LT 4880
)
AND ( temp_in
GT 3700
)
AND ( temp_in
LT 3800
)
JMPCN ODK_SKIP_000000000000001_00000000000000F
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>5320 and temp_last<5420 and temp_in>4790 and temp_in<4890 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000F:
LD temp_last
GT 5320
AND ( temp_last
LT 5420
)
AND ( temp_in
GT 4790
)
AND ( temp_in
LT 4890
)
JMPCN ODK_SKIP_000000000000001_00000000000000G
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>5870 and temp_last<5970 and temp_in>3700 and temp_in<3800 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000G:
LD temp_last
GT 5870
AND ( temp_last
LT 5970
)
AND ( temp_in
GT 3700
)
AND ( temp_in
LT 3800
)
JMPCN ODK_SKIP_000000000000001_00000000000000H
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>6410 and temp_last<6510 and temp_in>5880 and temp_in<5980 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000H:
LD temp_last
GT 6410
AND ( temp_last
LT 6510
)
AND ( temp_in
GT 5880
)
AND ( temp_in
LT 5980
)
JMPCN ODK_SKIP_000000000000001_00000000000000I
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>6950 and temp_last<7050 and temp_in>5880 and temp_in<5980 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000I:
LD temp_last
GT 6950
AND ( temp_last
LT 7050
)
AND ( temp_in
GT 5880
)
AND ( temp_in
LT 5980
)
JMPCN ODK_SKIP_000000000000001_00000000000000J
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>8040 and temp_last<8140 and temp_in>3700 and temp_in<3800 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000J:
LD temp_last
GT 8040
AND ( temp_last
LT 8140
)
AND ( temp_in
GT 3700
)
AND ( temp_in
LT 3800
)
JMPCN ODK_SKIP_000000000000001_00000000000000K
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>9150 and temp_last<9250 and temp_in>8070 and temp_in<8170 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000K:
LD temp_last
GT 9150
AND ( temp_last
LT 9250
)
AND ( temp_in
GT 8070
)
AND ( temp_in
LT 8170
)
JMPCN ODK_SKIP_000000000000001_00000000000000L
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** elsif temp_last>10250 and temp_last<10350 and temp_in>8070 and temp_in<8170 then **)
(* elseif - Cond *)
ODK_SKIP_000000000000001_00000000000000L:
LD temp_last
GT 10250
AND ( temp_last
LT 10350
)
AND ( temp_in
GT 8070
)
AND ( temp_in
LT 8170
)
JMPCN ODK_SKIP_000000000000001_00000000000000M
(* elsif - Stmts *)
(** BF_IOM0801U_E5:=temp_last; **)
(* assign - Stmt *)
LD temp_last
ST BF_IOM0801U_E5
JMP ODK_END_IF_000000000000001
(** else **)
(* else *)
ODK_SKIP_000000000000001_00000000000000M:
(* else - Stmts *)
(** BF_IOM0801U_E5:=temp_in; **)
(* assign - Stmt *)
LD temp_in
ST BF_IOM0801U_E5
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000001:
END_FUNCTION

79
BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.ST

@ -0,0 +1,79 @@
FUNCTION BF_IOM0801U_E5 : INT
VAR_INPUT
temp_in : int;
temp_last : int;
END_VAR
VAR
END_VAR
(*
时 间:20210610
版 本:1.0
作 者:冯华强
名 称:针对IOM.0801U-E5版本以前的模块出现的跳变过滤函数
说 明:过滤规则:
温度值在进入正常值正负0.5度范围内,判断跳变值是否出现,如果出现,保持原值。如果没有跳变,更新输入值。
跳变影响温度值0.1度。
备 注:无
依赖块:无
*)
(*
Input_Type: 输入 temp_in 未经通道实际值
temp_last 经跳变过滤规则过滤后的值
输出 跳变过滤规则过滤后的输出值
*)
if temp_last>-3960 and temp_last<-3860 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-2870 and temp_last<-2770 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-1780 and temp_last<-1680 and temp_in>-2850 and temp_in<-2750 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-1220 and temp_last<-1120 and temp_in>-1760 and temp_in<-1660 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-680 and temp_last<-580 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-140 and temp_last<-40 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>400 and temp_last<500 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>950 and temp_last<1050 and temp_in>410 and temp_in<510 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>1500 and temp_last<1600 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>2050 and temp_last<2150 and temp_in>1510 and temp_in<1610 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>2590 and temp_last<2690 and temp_in>1510 and temp_in<1610 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>3140 and temp_last<3240 and temp_in>2600 and temp_in<2700 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>3690 and temp_last<3790 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>4230 and temp_last<4330 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>4780 and temp_last<4880 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>5320 and temp_last<5420 and temp_in>4790 and temp_in<4890 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>5870 and temp_last<5970 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>6410 and temp_last<6510 and temp_in>5880 and temp_in<5980 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>6950 and temp_last<7050 and temp_in>5880 and temp_in<5980 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>8040 and temp_last<8140 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>9150 and temp_last<9250 and temp_in>8070 and temp_in<8170 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>10250 and temp_last<10350 and temp_in>8070 and temp_in<8170 then
BF_IOM0801U_E5:=temp_last;
else
BF_IOM0801U_E5:=temp_in;
end_if;
END_FUNCTION

79
BRCON_MCFB_IU_v3.3.0/BF_IOM0801U_E5.bak

@ -0,0 +1,79 @@
FUNCTION BF_IOM0801U_E5 : INT
VAR_INPUT
temp_in : int;
temp_last : int;
END_VAR
VAR
END_VAR
(*
时 间:20210610
版 本:1.0
作 者:冯华强
名 称:针对IOM.0801U-E5版本以前的模块出现的跳变过滤函数
说 明:过滤规则:
温度值在进入正常值正负0.5度范围内,判断跳变值是否出现,如果出现,保持原值。如果没有跳变,更新输入值。
跳变影响温度值0.1度。
备 注:无
依赖块:无
*)
(*
Input_Type: 输入 temp_in 未经通道实际值
temp_last 经跳变过滤规则过滤后的值
输出 跳变过滤规则过滤后的输出值
*)
if temp_last>-3960 and temp_last<-3860 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-2870 and temp_last<-2770 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-1780 and temp_last<-1680 and temp_in>-2850 and temp_in<-2750 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-1220 and temp_last<-1120 and temp_in>-1760 and temp_in<-1660 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-680 and temp_last<-580 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>-140 and temp_last<-40 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>400 and temp_last<500 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>950 and temp_last<1050 and temp_in>410 and temp_in<510 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>1500 and temp_last<1600 and temp_in>-660 and temp_in<-560 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>2050 and temp_last<2150 and temp_in>1510 and temp_in<1610 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>2590 and temp_last<2690 and temp_in>1510 and temp_in<1610 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>3140 and temp_last<3240 and temp_in>2600 and temp_in<2700 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>3690 and temp_last<3790 and temp_in>-5030 and temp_in<-4930 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>4230 and temp_last<4330 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>4780 and temp_last<4880 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>5320 and temp_last<5420 and temp_in>4790 and temp_in<4890 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>5870 and temp_last<5970 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>6410 and temp_last<6510 and temp_in>5880 and temp_in<5980 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>6950 and temp_last<7050 and temp_in>5880 and temp_in<5980 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>8040 and temp_last<8140 and temp_in>3700 and temp_in<3800 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>9150 and temp_last<9250 and temp_in>8070 and temp_in<8170 then
BF_IOM0801U_E5:=temp_last;
elsif temp_last>10250 and temp_last<10350 and temp_in>8070 and temp_in<8170 then
BF_IOM0801U_E5:=temp_last;
else
BF_IOM0801U_E5:=temp_in;
end_if;
END_FUNCTION

55
BRCON_MCFB_IU_v3.3.0/BRCON_MCFB_ED_v3.3.0.1.GEN

@ -0,0 +1,55 @@
[PROTOTYP_PROG]
COUNT=0
[PROTOTYP_FB]
FILE15=\$GEN$\GETCRC16
FILE3=\$GEN$\BS_RunTime
FILE16=\$GEN$\IJ_LCB1030
FILE2=\$GEN$\BS_DelayGroupVavle
FILE17=\$GEN$\BS_FEC
FILE5=\$GEN$\BS_SavePower
FILE18=\$GEN$\IJ_DAHUPID
FILE4=\$GEN$\BS_DevHeartCheck
FILE34=\$GEN$\BS_AVERAGE
FILE19=\$GEN$\IJ_LSyncControl
FILE7=\$GEN$\BS_Schedule
FILE35=\$GEN$\BS_PID
FILE21=\$GEN$\IJ_FCU
FILE6=\$GEN$\BS_DevHeart
FILE32=\$GEN$\BS_ModbusCom
FILE20=\$GEN$\IJ_DAHU
FILE9=\$GEN$\BS_SyncVavle
COUNT=36
FILE33=\$GEN$\IJ_EVC
FILE23=\$GEN$\IJ_LCB0610
FILE8=\$GEN$\BS_EVC
FILE30=\$GEN$\IJ_FAU
FILE22=\$GEN$\IJ_DAHU_0803
FILE31=\$GEN$\BS_CMFCU
FILE25=\$GEN$\IJ_EAFGroup
FILE24=\$GEN$\IJ_DAHUW
FILE27=\$GEN$\IJ_EAF
FILE26=\$GEN$\BS_GETCRC16
FILE10=\$GEN$\IJ_MSyncControl
FILE11=\$GEN$\BS_DevScan
FILE29=\$GEN$\BS_GroupVavle50
FILE12=\$GEN$\IJ_AHU
FILE28=\$GEN$\BS_GroupVavle
FILE13=\$GEN$\IJ_SyncControl
FILE1=\$GEN$\BS_RemoteVavle
FILE14=\$GEN$\BS_Feedback
FILE0=\$GEN$\BS_DelayRemoteVavle
[PROTOTYP_FKT]
FILE3=\$GEN$\BS_ASCII2INT
FILE2=\$GEN$\IJ_DT
FILE4=\$GEN$\BF_IOM0801U_E5
COUNT=5
FILE1=\$GEN$\BS_Scale
FILE0=\$GEN$\BS_Scale2
[LIBRARY]
FILE2=\LIB\BRCON_MCFB_IU_V3.3.0.1\BRCON_MCFB_ED_V3.3.0.1.GEN
COUNT=3
FILE1=\LIB\BRCON_MCFB_IU_V3.3.0.1\BRCON_MCFB_ED_V3.3.0.1.GEN
FILE0=\LIB\sfclib\sfclib.GEN
[EXECUTABLE]
COUNT=1
FILE0=\$ENV$\Resource\Resource

66
BRCON_MCFB_IU_v3.3.0/BRCON_MCFB_ED_v3.3.0.1.VAR

@ -0,0 +1,66 @@
[MAKEFILE]
COUNT=1
ACTIVE=\$ENV$\Resource\Resource.MAK
FILE0=\$ENV$\Resource\Resource
[LIBRARY]
FILE2=\LIB\BRCON_MCFB_IU_V3.3.0.1\BRCON_MCFB_ED_V3.3.0.1.VAR
COUNT=3
FILE1=\LIB\BRCON_MCFB_IU_V3.3.0.1\BRCON_MCFB_ED_V3.3.0.1.VAR
FILE0=\LIB\sfclib\sfclib.VAR
[ENCODING]
UTF8=1
[ST_FUNCTION]
FILE3=\BS_Scale2
FILE2=\BS_Scale
FILE4=\IJ_DT
COUNT=5
FILE1=\BS_ASCII2INT
FILE0=\BF_IOM0801U_E5
[ST_FUNCTIONBLOCK]
FILE15=\BS_RemoteVavle
FILE3=\BS_DelayRemoteVavle
FILE16=\BS_RunTime
FILE2=\BS_DelayGroupVavle
FILE17=\BS_SavePower
FILE5=\BS_DevHeartCheck
FILE18=\BS_Schedule
FILE4=\BS_DevHeart
FILE34=\IJ_MSyncControl
FILE19=\BS_SyncVavle
FILE7=\BS_EVC
FILE35=\IJ_SyncControl
FILE21=\IJ_AHU
FILE6=\BS_DevScan
FILE32=\IJ_LCB1030
FILE20=\GETCRC16
FILE9=\BS_Feedback
COUNT=36
FILE33=\IJ_LSyncControl
FILE23=\IJ_DAHUPID
FILE8=\BS_FEC
FILE30=\IJ_FCU
FILE22=\IJ_DAHU
FILE31=\IJ_LCB0610
FILE25=\IJ_DAHU_0803
FILE24=\IJ_DAHUW
FILE27=\IJ_EAFGroup
FILE26=\IJ_EAF
FILE10=\BS_GETCRC16
FILE11=\BS_GroupVavle
FILE29=\IJ_FAU
FILE12=\BS_GroupVavle50
FILE28=\IJ_EVC
FILE13=\BS_ModbusCom
FILE1=\BS_CMFCU
FILE14=\BS_PID
FILE0=\BS_AVERAGE
[DIRECT_GLOBAL]
COUNT=1
FILE0=\Vartable1
[TYPEDEF]
COUNT=2
FILE1=\USERTYPE
FILE0=\FBTYPE
[DATPARAM_INFO]
SeperateGen=1
Version=4.0

48
BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.POE

@ -0,0 +1,48 @@
FUNCTION BS_ASCII2INT : INT
VAR_INPUT
ASCII1 :BYTE;
ASCII2 :BYTE;
END_VAR
VAR
END_VAR
(** {* **)
(** **)
(** 时 间:20190912 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:2位数ASCII码数字转换函数 **)
(** 说 明:用于ASCII码转换的函数 **)
(** 备 注: **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** Input_Type: 输入 **)
(** ASCII1:十位数ASCII码 **)
(** ASCII2:个位数ASCII码 **)
(** **)
(** Output_Type 输出 **)
(** 对应的ASCII码 **)
(** **)
(** *} **)
(** BS_ASCII2INT:=(BYTE_TO_INT(ASCII1)-48)*10+BYTE_TO_INT(ASCII2)-48; **)
(* assign - Stmt *)
LD ASCII1
BYTE_TO_INT
SUB 48
MUL 10
ADD ( ASCII2
BYTE_TO_INT
)
SUB 48
ST BS_ASCII2INT
(** **)
(** **)
(** **)
(** **)
END_FUNCTION

37
BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.ST

@ -0,0 +1,37 @@
FUNCTION BS_ASCII2INT : INT
VAR_INPUT
ASCII1 :BYTE;
ASCII2 :BYTE;
END_VAR
VAR
END_VAR
(*
时 间:20190912
版 本:1.0
作 者:姚立
名 称:2位数ASCII码数字转换函数
说 明:用于ASCII码转换的函数
备 注:
依赖块:无
*)
(*
Input_Type: 输入
ASCII1:十位数ASCII码
ASCII2:个位数ASCII码
Output_Type 输出
对应的ASCII码
*)
BS_ASCII2INT:=(BYTE_TO_INT(ASCII1)-48)*10+BYTE_TO_INT(ASCII2)-48;
END_FUNCTION

14
BRCON_MCFB_IU_v3.3.0/BS_ASCII2INT.bak

@ -0,0 +1,14 @@
FUNCTION BS_ASCII2INT : INT
VAR_INPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION

493
BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.POE

@ -0,0 +1,493 @@
FUNCTION_BLOCK BS_AVERAGE
VAR_EXTERNAL
END_VAR
VAR_INPUT
Input :INT;
Num :INT:=30;
Delay :Time:=t#100ms;
END_VAR
VAR_OUTPUT
Output :INT;
END_VAR
VAR
Avg_num :INT;
Value_temp :ARRAY[0..30]OF DINT;
ton1 :ton;
Value_sum :DINT;
temp :BOOL;
i,j,k :INT:=1;
ton0 :ton;
ini :BOOL;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20191006 **)
(** 版 本:1.1 **)
(** 作 者:姚立 **)
(** 名 称:平均采样程序 **)
(** 说 明:平均采样默认20次,间隔100ms **)
(** 备 注: **)
(** 依赖块: **)
(** 时 间:20211110 **)
(** 版 本:1.2 **)
(** 作 者:潘平 **)
(** 名 称:平均采样程序 **)
(** 说 明:平均采样默认30次,间隔100ms,修正程序未做平均值计算问题,始终位于初始化程序内运行 **)
(** 备 注: **)
(** 依赖块: **)
(** *} **)
(** **)
(** if ini=0 then **)
(* if - Cond *)
LD ini
EQ 0
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** ini:=1; **)
(* assign - Stmt *)
LD 1
ST ini
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** if Num>30 then **)
(* if - Cond *)
LD Num
GT 30
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** Avg_num:=30; **)
(* assign - Stmt *)
LD 30
ST Avg_num
JMP ODK_END_IF_000000000000002
(** else **)
(* else *)
ODK_SKIP_000000000000002_000000000000001:
(* else - Stmts *)
(** Avg_num:=Num; **)
(* assign - Stmt *)
LD Num
ST Avg_num
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000002:
(** **)
(** {*初始化30s无延时采样,30s后每avg_delay采样1次*} **)
(** ton0(in:=ini,PT:= t#30s); **)
(* call - Stmt *)
CAL ton0 (
in := ini,
PT := t#30s
)
(** if ton0.q=0 then **)
(* if - Cond *)
LD ton0.q
EQ 0
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** k:=k+1;{*程序开始时,取值次数不足20次,为k次*} **)
(* assign - Stmt *)
LD k
ADD 1
ST k
(** if k>Avg_num then **)
(* if - Cond *)
LD k
GT Avg_num
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** k:=Avg_num; **)
(* assign - Stmt *)
LD Avg_num
ST k
JMP ODK_END_IF_000000000000004
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
(** Value_temp[1]:=INT_TO_DINT(Input); **)
(* assign - Stmt *)
LD Input
INT_TO_DINT
ST Value_temp[1]
(** for i:=(Avg_num-1) to 1 by -1 do **)
(* for - Init *)
LD Avg_num
SUB 1
ST i
EQ 1
JMPC ODK_FOR_STMTS_000000000000005
(* for - Cond *)
ODK_FOR_000000000000005:
LD Avg_num
SUB 1
GT 1
JMPC ODK_FOR_DOWN_000000000000005
LD 0
GT( -1
)
JMPC ODK_END_FOR_000000000000005
LD 1
LT i
JMPC ODK_END_FOR_000000000000005
JMP ODK_FOR_STMTS_000000000000005
ODK_FOR_DOWN_000000000000005:
LD 1
GT i
JMPC ODK_END_FOR_000000000000005
LD 0
LT( -1
)
JMPC ODK_END_FOR_000000000000005
(* for - Stmts *)
ODK_FOR_STMTS_000000000000005:
(** j:=i+1; **)
(* assign - Stmt *)
LD i
ADD 1
ST j
(** Value_temp[j]:=Value_temp[i]; **)
(* assign - Stmt *)
LD Value_temp[i]
ST Value_temp[j]
(* for - By *)
LD -1
ADD i
ST i
(** end_for; **)
JMP ODK_FOR_000000000000005
(* for - End *)
ODK_END_FOR_000000000000005:
(** Value_sum:=0; **)
(* assign - Stmt *)
LD 0
ST Value_sum
(** for i:=1 to Avg_num by 1 do **)
(* for - Init *)
LD 1
ST i
EQ Avg_num
JMPC ODK_FOR_STMTS_000000000000006
(* for - Cond *)
ODK_FOR_000000000000006:
LD 1
GT Avg_num
JMPC ODK_FOR_DOWN_000000000000006
LD 0
GT 1
JMPC ODK_END_FOR_000000000000006
LD Avg_num
LT i
JMPC ODK_END_FOR_000000000000006
JMP ODK_FOR_STMTS_000000000000006
ODK_FOR_DOWN_000000000000006:
LD Avg_num
GT i
JMPC ODK_END_FOR_000000000000006
LD 0
LT 1
JMPC ODK_END_FOR_000000000000006
(* for - Stmts *)
ODK_FOR_STMTS_000000000000006:
(** Value_sum:=Value_sum+Value_temp[i]; **)
(* assign - Stmt *)
LD Value_sum
ADD Value_temp[i]
ST Value_sum
(* for - By *)
LD 1
ADD i
ST i
(** end_for; **)
JMP ODK_FOR_000000000000006
(* for - End *)
ODK_END_FOR_000000000000006:
(** output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k)); **)
(* assign - Stmt *)
LD Value_sum
DIV ( k
INT_TO_DINT
)
DINT_TO_INT
ST output
JMP ODK_END_IF_000000000000003
(** else **)
(* else *)
ODK_SKIP_000000000000003_000000000000001:
(* else - Stmts *)
(** ton1(PT:= Delay ); **)
(* call - Stmt *)
CAL ton1 (
PT := Delay
)
(** ton1.in:=not ton1.q; **)
(* assign - Stmt *)
LD ton1.q
NOT
ST ton1.in
(** temp:=0; **)
(* assign - Stmt *)
LD 0
ST temp
(** if ton1.q=1 and temp=0 then **)
(* if - Cond *)
LD ton1.q
EQ 1
AND ( temp
EQ 0
)
JMPCN ODK_SKIP_000000000000007_000000000000001
(* then - Stmts *)
(** k:=k+1;{*程序开始时,取值次数不足30次,为k次*} **)
(* assign - Stmt *)
LD k
ADD 1
ST k
(** if k>Avg_num then **)
(* if - Cond *)
LD k
GT Avg_num
JMPCN ODK_SKIP_000000000000008_000000000000001
(* then - Stmts *)
(** k:=Avg_num; **)
(* assign - Stmt *)
LD Avg_num
ST k
JMP ODK_END_IF_000000000000008
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000008_000000000000001:
ODK_END_IF_000000000000008:
(** temp:=1; **)
(* assign - Stmt *)
LD 1
ST temp
(** Value_temp[1]:=INT_TO_DINT(Input); **)
(* assign - Stmt *)
LD Input
INT_TO_DINT
ST Value_temp[1]
(** for i:=(Avg_num-1) to 1 by -1 do **)
(* for - Init *)
LD Avg_num
SUB 1
ST i
EQ 1
JMPC ODK_FOR_STMTS_000000000000009
(* for - Cond *)
ODK_FOR_000000000000009:
LD Avg_num
SUB 1
GT 1
JMPC ODK_FOR_DOWN_000000000000009
LD 0
GT( -1
)
JMPC ODK_END_FOR_000000000000009
LD 1
LT i
JMPC ODK_END_FOR_000000000000009
JMP ODK_FOR_STMTS_000000000000009
ODK_FOR_DOWN_000000000000009:
LD 1
GT i
JMPC ODK_END_FOR_000000000000009
LD 0
LT( -1
)
JMPC ODK_END_FOR_000000000000009
(* for - Stmts *)
ODK_FOR_STMTS_000000000000009:
(** j:=i+1; **)
(* assign - Stmt *)
LD i
ADD 1
ST j
(** Value_temp[j]:=Value_temp[i]; **)
(* assign - Stmt *)
LD Value_temp[i]
ST Value_temp[j]
(* for - By *)
LD -1
ADD i
ST i
(** end_for; **)
JMP ODK_FOR_000000000000009
(* for - End *)
ODK_END_FOR_000000000000009:
(** Value_sum:=0; **)
(* assign - Stmt *)
LD 0
ST Value_sum
(** for i:=1 to Avg_num by 1 do **)
(* for - Init *)
LD 1
ST i
EQ Avg_num
JMPC ODK_FOR_STMTS_00000000000000A
(* for - Cond *)
ODK_FOR_00000000000000A:
LD 1
GT Avg_num
JMPC ODK_FOR_DOWN_00000000000000A
LD 0
GT 1
JMPC ODK_END_FOR_00000000000000A
LD Avg_num
LT i
JMPC ODK_END_FOR_00000000000000A
JMP ODK_FOR_STMTS_00000000000000A
ODK_FOR_DOWN_00000000000000A:
LD Avg_num
GT i
JMPC ODK_END_FOR_00000000000000A
LD 0
LT 1
JMPC ODK_END_FOR_00000000000000A
(* for - Stmts *)
ODK_FOR_STMTS_00000000000000A:
(** Value_sum:=Value_sum+Value_temp[i]; **)
(* assign - Stmt *)
LD Value_sum
ADD Value_temp[i]
ST Value_sum
(* for - By *)
LD 1
ADD i
ST i
(** end_for; **)
JMP ODK_FOR_00000000000000A
(* for - End *)
ODK_END_FOR_00000000000000A:
JMP ODK_END_IF_000000000000007
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000007_000000000000001:
ODK_END_IF_000000000000007:
(** output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k)); **)
(* assign - Stmt *)
LD Value_sum
DIV ( k
INT_TO_DINT
)
DINT_TO_INT
ST output
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000003:
(** **)
(** **)
END_FUNCTION_BLOCK

96
BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.ST

@ -0,0 +1,96 @@
FUNCTION_BLOCK BS_AVERAGE
VAR_EXTERNAL
END_VAR
VAR_INPUT
Input :INT;
Num :INT:=30;
Delay :Time:=t#100ms;
END_VAR
VAR_OUTPUT
Output :INT;
END_VAR
VAR
Avg_num :INT;
Value_temp :ARRAY[0..30]OF DINT;
ton1 :ton;
Value_sum :DINT;
temp :BOOL;
i,j,k :INT:=1;
ton0 :ton;
ini :BOOL;
END_VAR
(*
时 间:20191006
版 本:1.1
作 者:姚立
名 称:平均采样程序
说 明:平均采样默认20次,间隔100ms
备 注:
依赖块:
时 间:20211110
版 本:1.2
作 者:潘平
名 称:平均采样程序
说 明:平均采样默认30次,间隔100ms,修正程序未做平均值计算问题,始终位于初始化程序内运行
备 注:
依赖块:
*)
if ini=0 then
ini:=1;
end_if;
if Num>30 then
Avg_num:=30;
else
Avg_num:=Num;
end_if;
(*初始化30s无延时采样,30s后每avg_delay采样1次*)
ton0(in:=ini,PT:= t#30s);
if ton0.q=0 then
k:=k+1;(*程序开始时,取值次数不足20次,为k次*)
if k>Avg_num then
k:=Avg_num;
end_if;
Value_temp[1]:=INT_TO_DINT(Input);
for i:=(Avg_num-1) to 1 by -1 do
j:=i+1;
Value_temp[j]:=Value_temp[i];
end_for;
Value_sum:=0;
for i:=1 to Avg_num by 1 do
Value_sum:=Value_sum+Value_temp[i];
end_for;
output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k));
else
ton1(PT:= Delay );
ton1.in:=not ton1.q;
temp:=0;
if ton1.q=1 and temp=0 then
k:=k+1;(*程序开始时,取值次数不足30次,为k次*)
if k>Avg_num then
k:=Avg_num;
end_if;
temp:=1;
Value_temp[1]:=INT_TO_DINT(Input);
for i:=(Avg_num-1) to 1 by -1 do
j:=i+1;
Value_temp[j]:=Value_temp[i];
end_for;
Value_sum:=0;
for i:=1 to Avg_num by 1 do
Value_sum:=Value_sum+Value_temp[i];
end_for;
end_if;
output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k));
end_if;
END_FUNCTION_BLOCK

96
BRCON_MCFB_IU_v3.3.0/BS_AVERAGE.bak

@ -0,0 +1,96 @@
FUNCTION_BLOCK AVERAGE
VAR_EXTERNAL
END_VAR
VAR_INPUT
Input :INT;
Num :INT:=30;
Delay :Time:=t#100ms;
END_VAR
VAR_OUTPUT
Output :INT;
END_VAR
VAR
Avg_num :INT;
Value_temp :ARRAY[0..30]OF DINT;
ton1 :ton;
Value_sum :DINT;
temp :BOOL;
i,j,k :INT:=1;
ton0 :ton;
ini :BOOL;
END_VAR
(*
时 间:20191006
版 本:1.1
作 者:姚立
名 称:平均采样程序
说 明:平均采样默认20次,间隔100ms
备 注:
依赖块:
时 间:20211110
版 本:1.2
作 者:潘平
名 称:平均采样程序
说 明:平均采样默认30次,间隔100ms,修正程序未做平均值计算问题,始终位于初始化程序内运行
备 注:
依赖块:
*)
if ini=0 then
ini:=1;
end_if;
if Num>30 then
Avg_num:=30;
else
Avg_num:=Num;
end_if;
(*初始化30s无延时采样,30s后每avg_delay采样1次*)
ton0(in:=ini,PT:= t#30s);
if ton0.q=0 then
k:=k+1;(*程序开始时,取值次数不足20次,为k次*)
if k>Avg_num then
k:=Avg_num;
end_if;
Value_temp[1]:=INT_TO_DINT(Input);
for i:=(Avg_num-1) to 1 by -1 do
j:=i+1;
Value_temp[j]:=Value_temp[i];
end_for;
Value_sum:=0;
for i:=1 to Avg_num by 1 do
Value_sum:=Value_sum+Value_temp[i];
end_for;
output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k));
else
ton1(PT:= Delay );
ton1.in:=not ton1.q;
temp:=0;
if ton1.q=1 and temp=0 then
k:=k+1;(*程序开始时,取值次数不足30次,为k次*)
if k>Avg_num then
k:=Avg_num;
end_if;
temp:=1;
Value_temp[1]:=INT_TO_DINT(Input);
for i:=(Avg_num-1) to 1 by -1 do
j:=i+1;
Value_temp[j]:=Value_temp[i];
end_for;
Value_sum:=0;
for i:=1 to Avg_num by 1 do
Value_sum:=Value_sum+Value_temp[i];
end_for;
end_if;
output:=DINT_TO_INT(Value_sum/INT_TO_DINT(k));
end_if;
END_FUNCTION_BLOCK

1189
BRCON_MCFB_IU_v3.3.0/BS_CMFCU.POE

File diff suppressed because it is too large

385
BRCON_MCFB_IU_v3.3.0/BS_CMFCU.ST

@ -0,0 +1,385 @@
FUNCTION_BLOCK BS_CMFCU
VAR_EXTERNAL
END_VAR
VAR_INPUT
FAU_STRUCT_IN :FAU_IN;
END_VAR
VAR_OUTPUT
FAU_STRUCT_OUT :FAU_OUT;
END_VAR
VAR
FAU_SPID :BS_PID;
FAU_WPID :BS_PID;
FAU_RunTime :BS_Runtime;
FAU_WVCTEMP :REAL;
RunTon1 :TON;
RunTon2 :TON;
RunTon3 :TON;
RunTon5 :TON;
FanTon1 :TON;
FanTon2 :TON;
FanTon2q :BOOL;
RunTof1 :TOF;
RunTof2 :TOF;
RunTof3 :TOF;
DevCheck1_time :TIME :=t#15s; (*设备运行状态反馈*)
DevCheck2_time :TIME :=t#15s; (*设备运行状态反馈*)
AFSDelay_time :TIME :=t#10s;
Status0 :INT;
Status1 :INT;
Status2 :INT;
Status3 :INT;
FAU_SPID_VP :REAL;
FAU_SPID_VI :REAL;
FAU_WPID_VP :REAL;
FAU_WPID_VI :REAL;
PID_in :BOOL;
PID_timer :TON;
AFSM :BOOL;
FDSM :BOOL;
FDOM :BOOL;
FDOTon :TON;
FDSTon :TON;
FAU_FEC :BS_FEC;
FAU_CM :BOOL;
FAU_VFCSM :INT;
ini :BOOL;
VFMVM :INT;
AFSON :BOOL;
AFSOF :BOOL;
AFSTON :TON;
AFSTOF :TOF;
FVCS :REAL;
END_VAR
(*
时 间:20201028
版 本:1.1
作 者:姚立
名 称:江苏省教育厅定制吊顶空调机组程序功能块
说 明:
输入变量
FAU_STRUCT_IN.
SM :INT ; 季节模式 0夏季 1冬季 2过渡
LM :LM ; 联动模式 0无联动 1联动
Run :BOOL; 运行状态
Fault :BOOL; 故障状态
Auto :BOOL; 自动状态
Control :BOOL; 程序控制
FVMC :BOOL; 风阀手动控制
FVMV :REAL; 风阀手动控制值
FVOCT :TIME; 风阀开启时间周期设定OpenCycleTime
FVOST :TIME; 风阀开启稳定时间设定OpenStableTime
TSET :REAL; 温度设定
WVMC :BOOL; 水阀手动控制
WVMV :REAL; 水阀手动控制值
VFMC :BOOL; 变频手动控制
VFMV :INT; 变频设定值
STS :REAL; 送风温度
RST :BOOL; 运行时间累计重置
RSTV :REAL; 运行时间累计重置值
FPS :BOOL; 风机压差
IPS :BOOL; 滤网压差
AFS :BOOL; 低温断路开关
ISO1 :BOOL; 运行故障反馈隔离
ISO2 :BOOL; 风机压差反馈隔离
ISO3 :BOOL; 低温断路报警隔离
VFBS :INT; 变频反馈
VP :REAL; PI设定值P
VI :REAL; PI设定值I
FDELAY :TIME; 风机启动延时
VDELAY :TIME; 风阀信号切除延时
FAU_STRUCT_OUT.
WVCS :INT ; 水阀控制转换值,放大100倍
VFCS :INT ; 变频控制 (35~50)
FVCS :INT ; 风阀控制 (50~100)
Control :BOOL; 启停控制
RH :REAL; 运行小时
SN :INT ; 设备状态代码
包含以下几点功能
1.运行故障回检,输出故障代码,支持故障报警隔离
2.水阀PID调节/手动调节
3.运行时间累计
4.防冻联动程序
5.风阀联动程序,默认50%开度,开机根据OST稳定100%一段时间,每隔设定时间OCT(预设4小时),再开启至100%开度稳定时间OST
7.风机启停联动程序
8.变频程序
备 注:
依赖块:
BS_PID;
BS_Runtime;
*)(*
if ini=0 then
FAU_STRUCT_IN.VFMV:=40;
ini:=1;
end_if;*)
(******************************************************CO2联动程序*******************************************************
暂由总控来进行
if FAU_STRUCT_IN.LM=0 then
if FAU_STRUCT_IN.Control=1 then
FAU_CM:=1;
else FAU_CM:=0;
end_if;
end_if;
if FAU_STRUCT_IN.LM=1 then
FAU_FEC(RUN :=FAU_STRUCT_IN.CM , SET :=FAU_STRUCT_IN.CO2SET , FB :=FAU_STRUCT_IN.CO2S , DEAD_BAND :=10.0 , DELAY :=t#20s | FAU_CM:= DevC);
end_if;
*)
(******************************************************新风机启停程序********************************************************)
if AFSM=0 then(*防冻报警触发隔离程序段起始*)
(*流程启动,先启动风阀*)
if FAU_STRUCT_IN.Control=1 then
FanTon1 ( IN:=FanTon2q , PT:=FAU_STRUCT_IN.FVOCT );
FanTon2 ( IN:=FanTon1.q , PT:=FAU_STRUCT_IN.FVOST );
FanTon2q:=not FanTon2.q;
if FAU_STRUCT_IN.FVMC=0 then
if FanTon1.q=1 and FanTon2.q=0 then
FAU_STRUCT_OUT.FVCS:=50;
else
FAU_STRUCT_OUT.FVCS:=100;
end_if;
else
FAU_STRUCT_OUT.FVCS:=FAU_STRUCT_IN.FVMV;
end_if;
end_if;
(***************************************风机延时启动程序**********************************************)
RunTon3 ( IN:=FAU_STRUCT_IN.Control , PT:=FAU_STRUCT_IN.FDELAY | FAU_STRUCT_OUT.Control:=q );
if FAU_STRUCT_IN.Run=1 then
(*变频器输出赋值*)
if FAU_STRUCT_IN.VFMC =1 then
if FAU_STRUCT_IN.VFMV<=50 and FAU_STRUCT_IN.VFMV>=35 then
FAU_STRUCT_OUT.VFCS:=FAU_STRUCT_IN.VFMV;
end_if;
if FAU_STRUCT_IN.VFMV>50 then
FAU_STRUCT_OUT.VFCS:=50;
end_if;
if FAU_STRUCT_IN.VFMV<35 then
FAU_STRUCT_OUT.VFCS:=35;
end_if;
else
FAU_STRUCT_OUT.VFCS:=50;
end_if;
else
FAU_STRUCT_OUT.VFCS:=0;
end_if;
(******************************************************水阀控制******************************************************)
PID_in:= not PID_timer.q;
PID_timer(in:=PID_in, pt:=t#1s );(*PID积分时间*)
if FAU_STRUCT_IN.WVMC=0 then
if FAU_STRUCT_IN.Run=1 then
if FAU_STRUCT_IN.VP<>0.0 and FAU_STRUCT_IN.VI<>0.0 then
FAU_SPID_VP:=-FAU_STRUCT_IN.VP;
FAU_SPID_VI:=-FAU_STRUCT_IN.VI;
FAU_WPID_VP:=FAU_STRUCT_IN.VP;
FAU_WPID_VI:=FAU_STRUCT_IN.VI;
else
FAU_SPID_VP:=-30.0;
FAU_SPID_VI:=-150.0;
FAU_WPID_VP:=30.0;
FAU_WPID_VI:=150.0;
end_if;
(*制冷季*)
if FAU_STRUCT_IN.SM=0 then
if FAU_STRUCT_IN.STS-FAU_STRUCT_IN.TSET>=3.0 then
FAU_WVCTEMP:=100.0;
end_if;
if PID_timer.q then
FAU_SPID(RUN:= FAU_STRUCT_IN.RUN,STOP_D:=1,STOP_I:=0,SET:=FAU_STRUCT_IN.TSET,FB:=FAU_STRUCT_IN.STS,KFB:=1.0,KP:=FAU_SPID_VP,TI:=FAU_SPID_VI,TD:=-1.0,DEAD_BAND:=0.2,YMAX:=100.0,YMIN:=0.0 | FAU_WVCTEMP:=OUT);
end_if;
end_if;
(*制热季*)
if FAU_STRUCT_IN.SM=1 then
if FAU_STRUCT_IN.TSET-FAU_STRUCT_IN.STS>=3.0 then
FAU_WVCTEMP:=100.0;
end_if;
if PID_timer.q then
FAU_WPID(RUN:= FAU_STRUCT_IN.RUN,STOP_D:=1,STOP_I:=0,SET:=FAU_STRUCT_IN.TSET,FB:=FAU_STRUCT_IN.STS,KFB:=1.0,KP:=FAU_WPID_VP,TI:=FAU_WPID_VI,TD:=1.0,DEAD_BAND:=0.2,YMAX:=100.0,YMIN:=0.0 | FAU_WVCTEMP:=OUT);
end_if;
end_if;
(*过渡季*)
if FAU_STRUCT_IN.SM=2 then
FAU_WVCTEMP:=0.0;
end_if;
else
FAU_WVCTEMP:=0.0;
end_if;
else
FAU_WVCTEMP:=FAU_STRUCT_IN.WVMV;
end_if;
end_if;(*防冻报警触发隔离程序段结束*)
(*水阀赋值量程转换*)
FAU_STRUCT_OUT.WVCS:=REAL_TO_INT(FAU_WVCTEMP*100.0);
(***************************************风阀阀门到位后延迟停止控制点输出程序*********************************************
FDOTon( IN:=FDOM , PT:=FAU_STRUCT_IN.VDELAY);
FDSTon( IN:=FDSM , PT:=FAU_STRUCT_IN.VDELAY);
if FDOM=1 and FDOTon.q=0 then
FAU_STRUCT_OUT.FDO:=1;
else FAU_STRUCT_OUT.FDO:=0;
end_if;
if FDSM=1 and FDSTon.q=0 then
FAU_STRUCT_OUT.FDS:=1;
else FAU_STRUCT_OUT.FDS:=0;
end_if;
*)
(*变频器软启动,软停机程序*)
(*
变频软启动、停止完成后开启主机,关闭主机,但因变频器一般自带软启动、软停止,暂时保留此功能
RunTon5 ( IN:=RunTon5M , PT:=DevDelay5_time );
RunTon5M:= not RunTon5.q;
if RunTon3.Q =1 then
if RunTon5.Q then
FAU_VFCSM:=FAU_VFCSM+1;
end_if;
if FAU_VFCSM>FAU_STRUCT_IN.VFMV then
FAU_VFCSM:=FAU_STRUCT_IN.VFMV;
end_if;
end_if;
if FAU_CM =0 then
if RunTon5.Q then
FAU_VFCSM:=FAU_VFCSM-1;
end_if;
if FAU_VFCSM<1 then
FAU_VFCSM:=0;
FAU_STRUCT_OUT.Control :=0;
FDOM:=0;
FDSM:=1;
end_if;
end_if;
if RunTon3.q=1 then
if FAU_VFCSM=FAU_STRUCT_IN.VFMV then
FAU_STRUCT_OUT.Control:=1;
end_if;
if FAU_VFCSM=0 then
FAU_STRUCT_OUT.Control:=0;
end_if;
end_if;
FAU_STRUCT_OUT.VFCS :=FAU_VFCSM;
*)
(******************************************************防冻联动程序******************************************************)
if FAU_STRUCT_IN.ISO3=0 and FAU_STRUCT_IN.SM=1 then
AFSTON ( IN:=FAU_STRUCT_IN.AFS , PT:=AFSDelay_time | AFSON:=q );
AFSTOF ( IN:=FAU_STRUCT_IN.AFS , PT:=AFSDelay_time | AFSOF:=q );
if AFSON=1 and AFSOF=1 then
AFSM:=1 ;
end_if;
if AFSOF=0 and AFSON=0 then
AFSM:=0 ;
end_if;
if AFSM=1 then
FAU_STRUCT_OUT.Control:=0;
FAU_WVCTEMP:=100.0;
FDSM:=1;
FDOM:=0;
Status3:=1;
else
Status3:=0;
end_if;
end_if;
(*非冬季或隔离切除防冻报警*)
if FAU_STRUCT_IN.ISO3=1 or FAU_STRUCT_IN.SM<>1 then
AFSM:=0;
end_if;
(******************************************************运行故障回检******************************************************)
RunTon1( IN:=FAU_STRUCT_IN.Control , PT:=DevCheck1_time);
RunTof1( IN:=FAU_STRUCT_IN.Control , PT:=DevCheck1_time);
RunTon2( IN:=FAU_STRUCT_IN.Control , PT:=DevCheck2_time);
RunTof2( IN:=FAU_STRUCT_IN.Control , PT:=DevCheck2_time);
(*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等为Status0*);
if FAU_STRUCT_IN.ISO1=0 then
if RunTon1.q or not RunTof1.q then
if FAU_STRUCT_OUT.Control<>FAU_STRUCT_IN.Run then
Status0:=1;
else
Status0:=0;
end_if;
if FAU_STRUCT_IN.Fault=1 then
Status1:=1;
else
Status1:=0;
end_if;
end_if;
else
Status0:=0;
Status1:=0;
end_if;
(*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生风机压差无回检信号*);
if FAU_STRUCT_IN.ISO2=0 then
if RunTon2.q or not RunTof2.q then
if FAU_STRUCT_OUT.Control<>FAU_STRUCT_IN.FPS then
Status2:=1;
else
Status2:=0;
end_if;
end_if;
else
Status2:=0;
end_if;
(*输出故障代码*)
if FAU_STRUCT_OUT.Control<>0 then
FAU_STRUCT_OUT.SN := Status0 * 1 + Status1* 2 + Status2* 4 + Status3*8;
else
FAU_STRUCT_OUT.SN := 0 ;
end_if;
(******************************************************运行时间累计******************************************************)
FAU_RunTime(RUN :=FAU_STRUCT_IN.Run , RUNTIMESET :=FAU_STRUCT_IN.RSTV , RUNTIMERST :=FAU_STRUCT_IN.RST | FAU_STRUCT_OUT.RH:= RUNTIME);
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_CMFCU.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_CMFCU
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

1102
BRCON_MCFB_IU_v3.3.0/BS_DELAYGROUPVAVLE.POE

File diff suppressed because it is too large

1163
BRCON_MCFB_IU_v3.3.0/BS_DELAYREMOTEVAVLE.POE

File diff suppressed because it is too large

97
BRCON_MCFB_IU_v3.3.0/BS_DEVHEART.POE

@ -0,0 +1,97 @@
FUNCTION_BLOCK BS_DevHeart
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
HeartVavle :int;
END_VAR
VAR
ton1 :ton;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** **)
(** {* **)
(** **)
(** 时 间:20191003 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:设备心跳存活程序 **)
(** 说 明:用于判断设备是否存活的心跳程序 **)
(** 备 注: **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** **)
(** Output_Type 输出 **)
(** 心跳数据0-99 **)
(** **)
(** *} **)
(** ton1(pt:=t#2s); **)
(* call - Stmt *)
CAL ton1 (
pt := t#2s
)
(** ton1.in:=not ton1.q; **)
(* assign - Stmt *)
LD ton1.q
NOT
ST ton1.in
(** if ton1.q=1 then **)
(* if - Cond *)
LD ton1.q
EQ 1
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** HeartVavle :=HeartVavle+1; **)
(* assign - Stmt *)
LD HeartVavle
ADD 1
ST HeartVavle
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** if HeartVavle =99 then **)
(* if - Cond *)
LD HeartVavle
EQ 99
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** HeartVavle:=0; **)
(* assign - Stmt *)
LD 0
ST HeartVavle
JMP ODK_END_IF_000000000000002
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(** **)
(** **)
(** **)
END_FUNCTION_BLOCK

92
BRCON_MCFB_IU_v3.3.0/BS_DEVHEARTCHECK.POE

@ -0,0 +1,92 @@
FUNCTION_BLOCK BS_DevHeartCheck
VAR_EXTERNAL
END_VAR
VAR_INPUT
DHV :INT;
END_VAR
VAR_OUTPUT
DHR :BOOL;
END_VAR
VAR
DHVT :INT;
TON01 :TON;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** **)
(** {* **)
(** **)
(** 时 间:20191003 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:设备心跳程序 **)
(** 说 明: **)
(** 备 注: **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** **)
(** **)
(** **)
(** *} **)
(** TON01(PT:=t#60s); **)
(* call - Stmt *)
CAL TON01 (
PT := t#60s
)
(** **)
(** if DHV=DHVT then **)
(* if - Cond *)
LD DHV
EQ DHVT
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** TON01.IN:=1; **)
(* assign - Stmt *)
LD 1
ST TON01.IN
(** DHVT:=DHV; **)
(* assign - Stmt *)
LD DHV
ST DHVT
JMP ODK_END_IF_000000000000001
(** else **)
(* else *)
ODK_SKIP_000000000000001_000000000000001:
(* else - Stmts *)
(** TON01.IN:=0; **)
(* assign - Stmt *)
LD 0
ST TON01.IN
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000001:
(** **)
(** DHR := not TON01.Q; **)
(* assign - Stmt *)
LD TON01.Q
NOT
ST DHR
(** **)
(** **)
END_FUNCTION_BLOCK

317
BRCON_MCFB_IU_v3.3.0/BS_DEVSCAN.POE

@ -0,0 +1,317 @@
FUNCTION_BLOCK BS_DevScan
VAR_EXTERNAL
END_VAR
VAR_INPUT
Dev_Scan_Hex :DWORD; (*璁惧�鐘舵€佽緭鍏ュ€硷紝杞�寲鎴愪簩杩涘埗瀵瑰簲妯″潡鍦ㄧ嚎鐘舵€�*)
Dev_Array :ARRAY[0..31] of byte;(*璁惧�鐘舵€侀€氶亾杈撳叆*)
END_VAR
VAR_OUTPUT
Dev_Status :DWORD; (*璁惧�鐘舵€佽緭鍑哄€硷紝杞�寲鎴愪簩杩涘埗瀵瑰簲妯″潡鍦ㄧ嚎鐘舵€�*)
Dev_Ratio :REAL; (*璁惧�鍦ㄧ嚎姣斾緥*)
Dev_Ready :BOOL; (*璁惧�鍑嗗�灏辩华锛�0涓哄瓨鍦ㄤ笉杩愯�妯″潡锛�1涓哄叏閮ㄦ�甯歌繍琛�*)
Dev_Total :INT; (*璁惧�鎬昏�鏁伴噺*)
Dev_Error :INT; (*璁惧�鏁呴殰鏁伴噺*)
HeartVavle :int;
END_VAR
VAR
i :UINT;
Dev_Scan_temp :DWORD;
Dev_Error_Flag :BOOL;
Dev_Status_temp :DWORD;
SHR_D :SHR_DWORD;
SHR_L :SHL_DWORD;
ton1 :ton;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20190905 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:设备扫描功能块 **)
(** 说 明:用于扫描模块在线状态,输出在线模块比例值等参数 **)
(** 备 注: **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** {*输出初始化*} **)
(** Dev_Error_Flag := 0; **)
(* assign - Stmt *)
LD 0
ST Dev_Error_Flag
(** Dev_Status := 0; **)
(* assign - Stmt *)
LD 0
ST Dev_Status
(** Dev_Total := 0; **)
(* assign - Stmt *)
LD 0
ST Dev_Total
(** Dev_Error := 0; **)
(* assign - Stmt *)
LD 0
ST Dev_Error
(** **)
(** for i:= 0 to 31 by 1 do **)
(* for - Init *)
LD 0
ST i
EQ 31
JMPC ODK_FOR_STMTS_000000000000001
(* for - Cond *)
ODK_FOR_000000000000001:
LD 0
GT 31
JMPC ODK_FOR_DOWN_000000000000001
LD 0
GT 1
JMPC ODK_END_FOR_000000000000001
LD 31
LT i
JMPC ODK_END_FOR_000000000000001
JMP ODK_FOR_STMTS_000000000000001
ODK_FOR_DOWN_000000000000001:
LD 31
GT i
JMPC ODK_END_FOR_000000000000001
LD 0
LT 1
JMPC ODK_END_FOR_000000000000001
(* for - Stmts *)
ODK_FOR_STMTS_000000000000001:
(** Dev_Scan_temp := 0; **)
(* assign - Stmt *)
LD 0
ST Dev_Scan_temp
(** SHR_D(EN :=1 , IN := Dev_Scan_Hex , N := i | Dev_Scan_temp:= OUT); **)
(* call - Stmt *)
CAL SHR_D (
EN := 1,
IN := Dev_Scan_Hex,
N := i
|
Dev_Scan_temp := OUT
)
(** {*数据右移i位至1地址位与16#1进行AND比较,如果为1,代表i地址位设备有预设定,需要判断在线情况*} **)
(** if (Dev_Scan_temp and 16#1) = 1 then **)
(* if - Cond *)
LD Dev_Scan_temp
AND 16#1
EQ 1
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** Dev_Total := Dev_Total+1; **)
(* assign - Stmt *)
LD Dev_Total
ADD 1
ST Dev_Total
(** {*i地址位判断值是否为16#4,是的话进入状态写入*} **)
(** if Dev_Array[i] = 16#4 then **)
(* if - Cond *)
LD Dev_Array[i]
EQ 16#4
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** Dev_Status_temp := 1; **)
(* assign - Stmt *)
LD 1
ST Dev_Status_temp
(** {*1地址位左移至i位,与输出值OR比较,将状态赋值到对应i地址位*} **)
(** SHR_L(EN :=1 , IN := Dev_Status_temp, N := i | Dev_Status_temp := OUT); **)
(* call - Stmt *)
CAL SHR_L (
EN := 1,
IN := Dev_Status_temp,
N := i
|
Dev_Status_temp := OUT
)
(** Dev_Status :=Dev_Status_temp or Dev_Status ; **)
(* assign - Stmt *)
LD Dev_Status_temp
OR Dev_Status
ST Dev_Status
JMP ODK_END_IF_000000000000003
(** else **)
(* else *)
ODK_SKIP_000000000000003_000000000000001:
(* else - Stmts *)
(** {*任一预设定地址设备不存在,标记错误*} **)
(** Dev_Error_Flag := 1; **)
(* assign - Stmt *)
LD 1
ST Dev_Error_Flag
(** Dev_Error:= Dev_Error+1; **)
(* assign - Stmt *)
LD Dev_Error
ADD 1
ST Dev_Error
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000003:
JMP ODK_END_IF_000000000000002
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(* for - By *)
LD 1
ADD i
ST i
(** end_for; **)
JMP ODK_FOR_000000000000001
(* for - End *)
ODK_END_FOR_000000000000001:
(** **)
(** if Dev_Scan_Hex<>0 then **)
(* if - Cond *)
LD Dev_Scan_Hex
NE 0
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** {*有预设定值的情况下,无错误报警,即代表该设备就绪*} **)
(** Dev_Ready := not Dev_Error_Flag; **)
(* assign - Stmt *)
LD Dev_Error_Flag
NOT
ST Dev_Ready
JMP ODK_END_IF_000000000000004
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
(** if Dev_Total<>0 then **)
(* if - Cond *)
LD Dev_Total
NE 0
JMPCN ODK_SKIP_000000000000005_000000000000001
(* then - Stmts *)
(** {*设备在线比例计算*} **)
(** Dev_Ratio := 1.0-INT_TO_REAL(Dev_Error)/INT_TO_REAL(Dev_Total); **)
(* assign - Stmt *)
LD 1.0
SUB ( Dev_Error
INT_TO_REAL
DIV ( Dev_Total
INT_TO_REAL
)
)
ST Dev_Ratio
JMP ODK_END_IF_000000000000005
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000005_000000000000001:
ODK_END_IF_000000000000005:
(** **)
(** ton1(pt:=t#2s); **)
(* call - Stmt *)
CAL ton1 (
pt := t#2s
)
(** ton1.in:=not ton1.q; **)
(* assign - Stmt *)
LD ton1.q
NOT
ST ton1.IN
(** if ton1.q=1 then **)
(* if - Cond *)
LD ton1.q
EQ 1
JMPCN ODK_SKIP_000000000000006_000000000000001
(* then - Stmts *)
(** HeartVavle :=HeartVavle+1; **)
(* assign - Stmt *)
LD HeartVavle
ADD 1
ST HeartVavle
JMP ODK_END_IF_000000000000006
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000006_000000000000001:
ODK_END_IF_000000000000006:
(** if HeartVavle =99 then **)
(* if - Cond *)
LD HeartVavle
EQ 99
JMPCN ODK_SKIP_000000000000007_000000000000001
(* then - Stmts *)
(** HeartVavle:=0; **)
(* assign - Stmt *)
LD 0
ST HeartVavle
JMP ODK_END_IF_000000000000007
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000007_000000000000001:
ODK_END_IF_000000000000007:
(** **)
(** **)
END_FUNCTION_BLOCK

173
BRCON_MCFB_IU_v3.3.0/BS_DelayGroupVavle.ST

@ -0,0 +1,173 @@
FUNCTION_BLOCK BS_DelayGroupVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet :BOOL;
INT_GroupSet :INT;
REAL_GroupSet :REAL;
REAL_IN :ARRAY[0..10] OF REAL;
INT_IN :ARRAY[0..10] OF INT;
BOOL_IN :ARRAY[0..10] OF BOOL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..10] OF REAL;
INT_OUT :ARRAY[0..10] OF INT;
BOOL_OUT :ARRAY[0..10] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
Delay_Ton1 :TON;
Delay_Ton2 :TON;
Delay_Ton3 :TON;
END_VAR
(*
时 间:20191008
版 本:1.1
作 者:姚立
名 称:变量延时批量赋值
说 明:用于变量延时批量赋值,可选锁定单体变量输入
1-5s分别赋值1-10变量/1-5s分别赋值11-20变量;
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持10组BOOL,10组REAL,10组INT
依赖块:无
*)
(**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************)
Delay_Ton1(PT :=t#5s );
if REAL_GroupSet<>REAL_GroupSetP and Delay_Ton1.Q=0 then
Delay_Ton1.IN:=1;
end_if;
if Delay_Ton1.Q=1 then
Delay_Ton1.IN:=0;
end_if;
Delay_Ton2(PT :=t#5s );
if BOOL_GroupSet<>BOOL_GroupSetP and Delay_Ton2.Q=0 then
Delay_Ton2.IN:=1;
end_if;
if Delay_Ton2.Q=1 then
Delay_Ton2.IN:=0;
end_if;
Delay_Ton3(PT :=t#5s );
if INT_GroupSet<>INT_GroupSetP and Delay_Ton3.Q=0 then
Delay_Ton3.IN:=1;
end_if;
if Delay_Ton3.Q=1 then
Delay_Ton3.IN:=0;
end_if;
if Delay_Ton1.IN=1 then
if Delay_Ton1.et>t#0.0s then REAL_OUT[01]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#0.5s then REAL_OUT[02]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#1.0s then REAL_OUT[03]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#1.5s then REAL_OUT[04]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#2.0s then REAL_OUT[05]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#2.5s then REAL_OUT[06]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#3.0s then REAL_OUT[07]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#3.5s then REAL_OUT[08]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#4.0s then REAL_OUT[09]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#4.5s then REAL_OUT[10]:=REAL_GroupSet; end_if;
elsif REAL_GroupSet=REAL_GroupSetP then
REAL_OUT[01]:=REAL_IN[01];
REAL_OUT[02]:=REAL_IN[02];
REAL_OUT[03]:=REAL_IN[03];
REAL_OUT[04]:=REAL_IN[04];
REAL_OUT[05]:=REAL_IN[05];
REAL_OUT[06]:=REAL_IN[06];
REAL_OUT[07]:=REAL_IN[07];
REAL_OUT[08]:=REAL_IN[08];
REAL_OUT[09]:=REAL_IN[09];
REAL_OUT[10]:=REAL_IN[10];
end_if;
(**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if Delay_Ton2.IN=1 then
if Delay_Ton2.et>t#0.0s then BOOL_OUT[01]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#0.5s then BOOL_OUT[02]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#1.0s then BOOL_OUT[03]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#1.5s then BOOL_OUT[04]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#2.0s then BOOL_OUT[05]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#2.5s then BOOL_OUT[06]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#3.0s then BOOL_OUT[07]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#3.5s then BOOL_OUT[08]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#4.0s then BOOL_OUT[09]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#4.5s then BOOL_OUT[10]:=BOOL_GroupSet; end_if;
elsif BOOL_GroupSet=BOOL_GroupSetP then
BOOL_OUT[01]:=BOOL_IN[01];
BOOL_OUT[02]:=BOOL_IN[02];
BOOL_OUT[03]:=BOOL_IN[03];
BOOL_OUT[04]:=BOOL_IN[04];
BOOL_OUT[05]:=BOOL_IN[05];
BOOL_OUT[06]:=BOOL_IN[06];
BOOL_OUT[07]:=BOOL_IN[07];
BOOL_OUT[08]:=BOOL_IN[08];
BOOL_OUT[09]:=BOOL_IN[09];
BOOL_OUT[10]:=BOOL_IN[10];
end_if;
(**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************)
if Delay_Ton3.IN=1 then
if Delay_Ton3.et>t#0.0s then INT_OUT[01]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#0.5s then INT_OUT[02]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#1.0s then INT_OUT[03]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#1.5s then INT_OUT[04]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#2.0s then INT_OUT[05]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#2.5s then INT_OUT[06]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#3.0s then INT_OUT[07]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#3.5s then INT_OUT[08]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#4.0s then INT_OUT[09]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#4.5s then INT_OUT[10]:=INT_GroupSet; end_if;
elsif INT_GroupSet=INT_GroupSetP then
INT_OUT[01]:=INT_IN[01];
INT_OUT[02]:=INT_IN[02];
INT_OUT[03]:=INT_IN[03];
INT_OUT[04]:=INT_IN[04];
INT_OUT[05]:=INT_IN[05];
INT_OUT[06]:=INT_IN[06];
INT_OUT[07]:=INT_IN[07];
INT_OUT[08]:=INT_IN[08];
INT_OUT[09]:=INT_IN[09];
INT_OUT[10]:=INT_IN[10];
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
1:
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
2:
BOOL_GroupSetP:=BOOL_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
3:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
end_case;
END_FUNCTION_BLOCK

173
BRCON_MCFB_IU_v3.3.0/BS_DelayGroupVavle.bak

@ -0,0 +1,173 @@
FUNCTION_BLOCK BS_DelayGroupVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet :BOOL;
INT_GroupSet :INT;
REAL_GroupSet :REAL;
REAL_IN :ARRAY[0..10] OF REAL;
INT_IN :ARRAY[0..10] OF INT;
BOOL_IN :ARRAY[0..10] OF BOOL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..10] OF REAL;
INT_OUT :ARRAY[0..10] OF INT;
BOOL_OUT :ARRAY[0..10] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
Delay_Ton1 :TON;
Delay_Ton2 :TON;
Delay_Ton3 :TON;
END_VAR
(*
时 间:20191008
版 本:1.1
作 者:姚立
名 称:变量延时批量赋值
说 明:用于变量延时批量赋值,可选锁定单体变量输入
1-5s分别赋值1-10变量/1-5s分别赋值11-20变量;
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持10组BOOL,10组REAL,10组INT
依赖块:无
*)
(**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************)
Delay_Ton1(PT :=t#5s );
if REAL_GroupSet<>REAL_GroupSetP and Delay_Ton1.Q=0 then
Delay_Ton1.IN:=1;
end_if;
if Delay_Ton1.Q=1 then
Delay_Ton1.IN:=0;
end_if;
Delay_Ton2(PT :=t#5s );
if BOOL_GroupSet<>BOOL_GroupSetP and Delay_Ton2.Q=0 then
Delay_Ton2.IN:=1;
end_if;
if Delay_Ton2.Q=1 then
Delay_Ton2.IN:=0;
end_if;
Delay_Ton3(PT :=t#5s );
if INT_GroupSet<>INT_GroupSetP and Delay_Ton3.Q=0 then
Delay_Ton3.IN:=1;
end_if;
if Delay_Ton3.Q=1 then
Delay_Ton3.IN:=0;
end_if;
if Delay_Ton1.IN=1 then
if Delay_Ton1.et>t#0.0s then REAL_OUT[01]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#0.5s then REAL_OUT[02]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#1.0s then REAL_OUT[03]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#1.5s then REAL_OUT[04]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#2.0s then REAL_OUT[05]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#2.5s then REAL_OUT[06]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#3.0s then REAL_OUT[07]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#3.5s then REAL_OUT[08]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#4.0s then REAL_OUT[09]:=REAL_GroupSet; end_if;
if Delay_Ton1.et>t#4.5s then REAL_OUT[10]:=REAL_GroupSet; end_if;
elsif REAL_GroupSet=REAL_GroupSetP then
REAL_OUT[01]:=REAL_IN[01];
REAL_OUT[02]:=REAL_IN[02];
REAL_OUT[03]:=REAL_IN[03];
REAL_OUT[04]:=REAL_IN[04];
REAL_OUT[05]:=REAL_IN[05];
REAL_OUT[06]:=REAL_IN[06];
REAL_OUT[07]:=REAL_IN[07];
REAL_OUT[08]:=REAL_IN[08];
REAL_OUT[09]:=REAL_IN[09];
REAL_OUT[10]:=REAL_IN[10];
end_if;
(**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if Delay_Ton2.IN=1 then
if Delay_Ton2.et>t#0.0s then BOOL_OUT[01]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#0.5s then BOOL_OUT[02]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#1.0s then BOOL_OUT[03]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#1.5s then BOOL_OUT[04]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#2.0s then BOOL_OUT[05]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#2.5s then BOOL_OUT[06]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#3.0s then BOOL_OUT[07]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#3.5s then BOOL_OUT[08]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#4.0s then BOOL_OUT[09]:=BOOL_GroupSet; end_if;
if Delay_Ton2.et>t#4.5s then BOOL_OUT[10]:=BOOL_GroupSet; end_if;
elsif BOOL_GroupSet=BOOL_GroupSetP then
BOOL_OUT[01]:=BOOL_IN[01];
BOOL_OUT[02]:=BOOL_IN[02];
BOOL_OUT[03]:=BOOL_IN[03];
BOOL_OUT[04]:=BOOL_IN[04];
BOOL_OUT[05]:=BOOL_IN[05];
BOOL_OUT[06]:=BOOL_IN[06];
BOOL_OUT[07]:=BOOL_IN[07];
BOOL_OUT[08]:=BOOL_IN[08];
BOOL_OUT[09]:=BOOL_IN[09];
BOOL_OUT[10]:=BOOL_IN[10];
end_if;
(**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************)
if Delay_Ton3.IN=1 then
if Delay_Ton3.et>t#0.0s then INT_OUT[01]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#0.5s then INT_OUT[02]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#1.0s then INT_OUT[03]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#1.5s then INT_OUT[04]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#2.0s then INT_OUT[05]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#2.5s then INT_OUT[06]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#3.0s then INT_OUT[07]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#3.5s then INT_OUT[08]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#4.0s then INT_OUT[09]:=INT_GroupSet; end_if;
if Delay_Ton3.et>t#4.5s then INT_OUT[10]:=INT_GroupSet; end_if;
elsif INT_GroupSet=INT_GroupSetP then
INT_OUT[01]:=INT_IN[01];
INT_OUT[02]:=INT_IN[02];
INT_OUT[03]:=INT_IN[03];
INT_OUT[04]:=INT_IN[04];
INT_OUT[05]:=INT_IN[05];
INT_OUT[06]:=INT_IN[06];
INT_OUT[07]:=INT_IN[07];
INT_OUT[08]:=INT_IN[08];
INT_OUT[09]:=INT_IN[09];
INT_OUT[10]:=INT_IN[10];
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
1:
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
2:
BOOL_GroupSetP:=BOOL_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
3:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
end_case;
END_FUNCTION_BLOCK

234
BRCON_MCFB_IU_v3.3.0/BS_DelayRemoteVavle.ST

@ -0,0 +1,234 @@
FUNCTION_BLOCK BS_DelayRemoteVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
Lock :INT;
REAL_RemoteSet:REAL;
REAL_IN01 :REAL;
REAL_IN02 :REAL;
REAL_IN03 :REAL;
REAL_IN04 :REAL;
REAL_IN05 :REAL;
REAL_IN06 :REAL;
REAL_IN07 :REAL;
REAL_IN08 :REAL;
REAL_IN09 :REAL;
REAL_IN10 :REAL;
BOOL_RemoteSet:BOOL;
BOOL_IN01 :BOOL;
BOOL_IN02 :BOOL;
BOOL_IN03 :BOOL;
BOOL_IN04 :BOOL;
BOOL_IN05 :BOOL;
BOOL_IN06 :BOOL;
BOOL_IN07 :BOOL;
BOOL_IN08 :BOOL;
BOOL_IN09 :BOOL;
BOOL_IN10 :BOOL;
INT_RemoteSet:INT;
INT_IN01 :INT;
INT_IN02 :INT;
INT_IN03 :INT;
INT_IN04 :INT;
INT_IN05 :INT;
INT_IN06 :INT;
INT_IN07 :INT;
INT_IN08 :INT;
INT_IN09 :INT;
INT_IN10 :INT;
END_VAR
VAR_OUTPUT
REAL_OUT01 :REAL;
REAL_OUT02 :REAL;
REAL_OUT03 :REAL;
REAL_OUT04 :REAL;
REAL_OUT05 :REAL;
REAL_OUT06 :REAL;
REAL_OUT07 :REAL;
REAL_OUT08 :REAL;
REAL_OUT09 :REAL;
REAL_OUT10 :REAL;
BOOL_OUT01 :BOOL;
BOOL_OUT02 :BOOL;
BOOL_OUT03 :BOOL;
BOOL_OUT04 :BOOL;
BOOL_OUT05 :BOOL;
BOOL_OUT06 :BOOL;
BOOL_OUT07 :BOOL;
BOOL_OUT08 :BOOL;
BOOL_OUT09 :BOOL;
BOOL_OUT10 :BOOL;
INT_OUT01 :INT;
INT_OUT02 :INT;
INT_OUT03 :INT;
INT_OUT04 :INT;
INT_OUT05 :INT;
INT_OUT06 :INT;
INT_OUT07 :INT;
INT_OUT08 :INT;
INT_OUT09 :INT;
INT_OUT10 :INT;
END_VAR
VAR
REAL_RemoteSetP :REAL;
BOOL_RemoteSetP :BOOL;
INT_RemoteSetP :INT;
Delay_Ton1 :TON;
Delay_Ton2 :TON;
Delay_Ton3 :TON;
END_VAR
(*
时 间:20191008
版 本:1.1
作 者:姚立
名 称:变量延时批量赋值
说 明:用于变量延时批量赋值,可选锁定单体变量输入
1-5s分别赋值1-10变量/1-5s分别赋值11-20变量;
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持10组BOOL,10组REAL,10组INT
依赖块:无
*)
(**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************)
Delay_Ton1(PT :=t#5s );
if REAL_RemoteSet<>REAL_RemoteSetP and Delay_Ton1.Q=0 then
Delay_Ton1.IN:=1;
end_if;
if Delay_Ton1.Q=1 then
Delay_Ton1.IN:=0;
end_if;
Delay_Ton2(PT :=t#5s );
if BOOL_RemoteSet<>BOOL_RemoteSetP and Delay_Ton2.Q=0 then
Delay_Ton2.IN:=1;
end_if;
if Delay_Ton2.Q=1 then
Delay_Ton2.IN:=0;
end_if;
Delay_Ton3(PT :=t#5s );
if INT_RemoteSet<>INT_RemoteSetP and Delay_Ton3.Q=0 then
Delay_Ton3.IN:=1;
end_if;
if Delay_Ton3.Q=1 then
Delay_Ton3.IN:=0;
end_if;
if REAL_RemoteSet<>REAL_RemoteSetP then
if Delay_Ton1.et>t#0.0s then REAL_OUT01:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#0.5s then REAL_OUT02:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#1.0s then REAL_OUT03:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#1.5s then REAL_OUT04:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#2.0s then REAL_OUT05:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#2.5s then REAL_OUT06:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#3.0s then REAL_OUT07:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#3.5s then REAL_OUT08:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#4.0s then REAL_OUT09:=REAL_RemoteSet; end_if;
if Delay_Ton1.et>t#4.5s then REAL_OUT10:=REAL_RemoteSet; end_if;
elsif REAL_RemoteSet=REAL_RemoteSetP then
REAL_OUT01:=REAL_IN01;
REAL_OUT02:=REAL_IN02;
REAL_OUT03:=REAL_IN03;
REAL_OUT04:=REAL_IN04;
REAL_OUT05:=REAL_IN05;
REAL_OUT06:=REAL_IN06;
REAL_OUT07:=REAL_IN07;
REAL_OUT08:=REAL_IN08;
REAL_OUT09:=REAL_IN09;
REAL_OUT10:=REAL_IN10;
end_if;
(**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if BOOL_RemoteSet<>BOOL_RemoteSetP then
if Delay_Ton2.et>t#0.0s then BOOL_OUT01:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#0.5s then BOOL_OUT02:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#1.0s then BOOL_OUT03:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#1.5s then BOOL_OUT04:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#2.0s then BOOL_OUT05:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#2.5s then BOOL_OUT06:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#3.0s then BOOL_OUT07:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#3.5s then BOOL_OUT08:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#4.0s then BOOL_OUT09:=BOOL_RemoteSet; end_if;
if Delay_Ton2.et>t#4.5s then BOOL_OUT10:=BOOL_RemoteSet; end_if;
elsif BOOL_RemoteSet=BOOL_RemoteSetP then
BOOL_OUT01:=BOOL_IN01;
BOOL_OUT02:=BOOL_IN02;
BOOL_OUT03:=BOOL_IN03;
BOOL_OUT04:=BOOL_IN04;
BOOL_OUT05:=BOOL_IN05;
BOOL_OUT06:=BOOL_IN06;
BOOL_OUT07:=BOOL_IN07;
BOOL_OUT08:=BOOL_IN08;
BOOL_OUT09:=BOOL_IN09;
BOOL_OUT10:=BOOL_IN10;
end_if;
(**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************)
if INT_RemoteSet<>INT_RemoteSetP then
if Delay_Ton3.et>t#0.0s then INT_OUT01:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#0.5s then INT_OUT02:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#1.0s then INT_OUT03:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#1.5s then INT_OUT04:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#2.0s then INT_OUT05:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#2.5s then INT_OUT06:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#3.0s then INT_OUT07:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#3.5s then INT_OUT08:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#4.0s then INT_OUT09:=INT_RemoteSet; end_if;
if Delay_Ton3.et>t#4.5s then INT_OUT10:=INT_RemoteSet; end_if;
elsif INT_RemoteSet=INT_RemoteSetP then
INT_OUT01:=INT_IN01;
INT_OUT02:=INT_IN02;
INT_OUT03:=INT_IN03;
INT_OUT04:=INT_IN04;
INT_OUT05:=INT_IN05;
INT_OUT06:=INT_IN06;
INT_OUT07:=INT_IN07;
INT_OUT08:=INT_IN08;
INT_OUT09:=INT_IN09;
INT_OUT10:=INT_IN10;
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_RemoteSetP:=BOOL_RemoteSet;
INT_RemoteSetP:=INT_RemoteSet;
REAL_RemoteSetP:=REAL_RemoteSet;
1:
INT_RemoteSetP:=INT_RemoteSet;
REAL_RemoteSetP:=REAL_RemoteSet;
2:
BOOL_RemoteSetP:=BOOL_RemoteSet;
REAL_RemoteSetP:=REAL_RemoteSet;
3:
BOOL_RemoteSetP:=BOOL_RemoteSet;
INT_RemoteSetP:=INT_RemoteSet;
end_case;
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_DelayRemoteVavle.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_DelayRemoteVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

48
BRCON_MCFB_IU_v3.3.0/BS_DevHeart.ST

@ -0,0 +1,48 @@
FUNCTION_BLOCK BS_DevHeart
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
HeartVavle :int;
END_VAR
VAR
ton1 :ton;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:设备心跳存活程序
说 明:用于判断设备是否存活的心跳程序
备 注:
依赖块:无
*)
(*
Output_Type 输出
心跳数据0-99
*)
ton1(pt:=t#2s);
ton1.in:=not ton1.q;
if ton1.q=1 then
HeartVavle :=HeartVavle+1;
end_if;
if HeartVavle =99 then
HeartVavle:=0;
end_if;
END_FUNCTION_BLOCK

48
BRCON_MCFB_IU_v3.3.0/BS_DevHeart.bak

@ -0,0 +1,48 @@
FUNCTION_BLOCK BS_DevHeart
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
HeartVavle :int;
END_VAR
VAR
ton1 :ton;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:设备心跳存活程序
说 明:用于判断设备是否存活的心跳程序
备 注:
依赖块:无
*)
(*
Output_Type 输出
心跳数据0-99
*)
ton1(pt:=t#2s);
ton1.in:=not ton1.q;
if ton1.q=1 then
HeartVavle :=HeartVavle+1;
end_if;
if HeartVavle =99 then
HeartVavle:=0;
end_if;
END_FUNCTION_BLOCK

49
BRCON_MCFB_IU_v3.3.0/BS_DevHeartCheck.ST

@ -0,0 +1,49 @@
FUNCTION_BLOCK BS_DevHeartCheck
VAR_EXTERNAL
END_VAR
VAR_INPUT
DHV :INT;
END_VAR
VAR_OUTPUT
DHR :BOOL;
END_VAR
VAR
DHVT :INT;
TON01 :TON;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:设备心跳程序
说 明:
备 注:
依赖块:无
*)
(*
*)
TON01(PT:=t#60s);
if DHV=DHVT then
TON01.IN:=1;
DHVT:=DHV;
else
TON01.IN:=0;
end_if;
DHR := not TON01.Q;
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_DevHeartCheck.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_DevHeartCheck
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

90
BRCON_MCFB_IU_v3.3.0/BS_DevScan.ST

@ -0,0 +1,90 @@
FUNCTION_BLOCK BS_DevScan
VAR_EXTERNAL
END_VAR
VAR_INPUT
Dev_Scan_Hex :DWORD; (*设备状态输入值,转化成二进制对应模块在线状态*)
Dev_Array :ARRAY[0..31] of byte;(*设备状态通道输入*)
END_VAR
VAR_OUTPUT
Dev_Status :DWORD; (*设备状态输出值,转化成二进制对应模块在线状态*)
Dev_Ratio :REAL; (*设备在线比例*)
Dev_Ready :BOOL; (*设备准备就绪,0为存在不运行模块,1为全部正常运行*)
Dev_Total :INT; (*设备总计数量*)
Dev_Error :INT; (*设备故障数量*)
HeartVavle :int;
END_VAR
VAR
i :UINT;
Dev_Scan_temp :DWORD;
Dev_Error_Flag :BOOL;
Dev_Status_temp :DWORD;
SHR_D :SHR_DWORD;
SHR_L :SHL_DWORD;
ton1 :ton;
END_VAR
(*
时 间:20190905
版 本:1.0
作 者:姚立
名 称:设备扫描功能块
说 明:用于扫描模块在线状态,输出在线模块比例值等参数
备 注:
依赖块:无
*)
(*输出初始化*)
Dev_Error_Flag := 0;
Dev_Status := 0;
Dev_Total := 0;
Dev_Error := 0;
for i:= 0 to 31 by 1 do
Dev_Scan_temp := 0;
SHR_D(EN :=1 , IN := Dev_Scan_Hex , N := i | Dev_Scan_temp:= OUT);
(*数据右移i位至1地址位与16#1进行AND比较,如果为1,代表i地址位设备有预设定,需要判断在线情况*)
if (Dev_Scan_temp and 16#1) = 1 then
Dev_Total := Dev_Total+1;
(*i地址位判断值是否为16#4,是的话进入状态写入*)
if Dev_Array[i] = 16#4 then
Dev_Status_temp := 1;
(*1地址位左移至i位,与输出值OR比较,将状态赋值到对应i地址位*)
SHR_L(EN :=1 , IN := Dev_Status_temp, N := i | Dev_Status_temp := OUT);
Dev_Status :=Dev_Status_temp or Dev_Status ;
else
(*任一预设定地址设备不存在,标记错误*)
Dev_Error_Flag := 1;
Dev_Error:= Dev_Error+1;
end_if;
end_if;
end_for;
if Dev_Scan_Hex<>0 then
(*有预设定值的情况下,无错误报警,即代表该设备就绪*)
Dev_Ready := not Dev_Error_Flag;
end_if;
if Dev_Total<>0 then
(*设备在线比例计算*)
Dev_Ratio := 1.0-INT_TO_REAL(Dev_Error)/INT_TO_REAL(Dev_Total);
end_if;
ton1(pt:=t#2s);
ton1.in:=not ton1.q;
if ton1.q=1 then
HeartVavle :=HeartVavle+1;
end_if;
if HeartVavle =99 then
HeartVavle:=0;
end_if;
END_FUNCTION_BLOCK

90
BRCON_MCFB_IU_v3.3.0/BS_DevScan.bak

@ -0,0 +1,90 @@
FUNCTION_BLOCK BS_DevScan
VAR_EXTERNAL
END_VAR
VAR_INPUT
Dev_Scan_Hex :DWORD; (*设备状态输入值,转化成二进制对应模块在线状态*)
Dev_Array :ARRAY[0..31] of byte;(*设备状态通道输入*)
END_VAR
VAR_OUTPUT
Dev_Status :DWORD; (*设备状态输出值,转化成二进制对应模块在线状态*)
Dev_Ratio :REAL; (*设备在线比例*)
Dev_Ready :BOOL; (*设备准备就绪,0为存在不运行模块,1为全部正常运行*)
Dev_Total :INT; (*设备总计数量*)
Dev_Error :INT; (*设备故障数量*)
HeartVavle :int;
END_VAR
VAR
i :UINT;
Dev_Scan_temp :DWORD;
Dev_Error_Flag :BOOL;
Dev_Status_temp :DWORD;
SHR_D :SHR_DWORD;
SHR_L :SHL_DWORD;
ton1 :ton;
END_VAR
(*
时 间:20190905
版 本:1.0
作 者:姚立
名 称:设备扫描功能块
说 明:用于扫描模块在线状态,输出在线模块比例值等参数
备 注:
依赖块:无
*)
(*输出初始化*)
Dev_Error_Flag := 0;
Dev_Status := 0;
Dev_Total := 0;
Dev_Error := 0;
for i:= 0 to 31 by 1 do
Dev_Scan_temp := 0;
SHR_D(EN :=1 , IN := Dev_Scan_Hex , N := i | Dev_Scan_temp:= OUT);
(*数据右移i位至1地址位与16#1进行AND比较,如果为1,代表i地址位设备有预设定,需要判断在线情况*)
if (Dev_Scan_temp and 16#1) = 1 then
Dev_Total := Dev_Total+1;
(*i地址位判断值是否为16#4,是的话进入状态写入*)
if Dev_Array[i] = 16#4 then
Dev_Status_temp := 1;
(*1地址位左移至i位,与输出值OR比较,将状态赋值到对应i地址位*)
SHR_L(EN :=1 , IN := Dev_Status_temp, N := i | Dev_Status_temp := OUT);
Dev_Status :=Dev_Status_temp or Dev_Status ;
else
(*任一预设定地址设备不存在,标记错误*)
Dev_Error_Flag := 1;
Dev_Error:= Dev_Error+1;
end_if;
end_if;
end_for;
if Dev_Scan_Hex<>0 then
(*有预设定值的情况下,无错误报警,即代表该设备就绪*)
Dev_Ready := not Dev_Error_Flag;
end_if;
if Dev_Total<>0 then
(*设备在线比例计算*)
Dev_Ratio := 1.0-INT_TO_REAL(Dev_Error)/INT_TO_REAL(Dev_Total);
end_if;
ton1(pt:=t#2s);
ton1.in:=not ton1.q;
if ton1.q=1 then
HeartVavle :=HeartVavle+1;
end_if;
if HeartVavle =99 then
HeartVavle:=0;
end_if;
END_FUNCTION_BLOCK

318
BRCON_MCFB_IU_v3.3.0/BS_EVC.POE

@ -0,0 +1,318 @@
FUNCTION_BLOCK BS_EVC
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID鍔熻兘鍧楀惎鐢� *)
SET : REAL ; (* 璋冭妭鐩�爣鍊� *)
FB : REAL ; (* 璋冭妭鐩�爣鍊肩殑鍙嶉�鍊� *)
Dead_Band : REAL :=0.5 ; (* 姝诲尯 *)
Delay : TIME :=t#30s;(* 寤舵椂鏃堕棿 *)
SW : INT ; (* 瀛h妭妯″紡 0澶忓� 1鍐�� 2杩囨浮 *)
END_VAR
VAR_OUTPUT
EVC : BOOL ; (* 鐢电�闃€鎺у埗 *)
END_VAR
VAR
ton1 : TON ;
ton2 : TON ;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20191003 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:电磁阀/开关阀值控程序 **)
(** 说 明:用于电磁阀/开关阀类的开关量阀门的值控程序 **)
(** 备 注:适用于温度、湿度等控制 **)
(** 依赖块:无 **)
(** **)
(** 输入变量 **)
(** RUN : BOOL ; PID功能块启用 **)
(** SET : REAL ; 调节目标值 **)
(** FB : REAL ; 调节目标值的反馈值 **)
(** Dead_Band : REAL ; 死区,默认0.5 **)
(** Delay : TIME ; 延时时间,默认30S **)
(** SW : INT ; 季节模式 0夏季 1冬季 **)
(** 输出变量 **)
(** EVC : BOOL ; 电磁阀/开关阀控制输出 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** 夏季:FB>SET EVC:=1 **)
(** FB-(SET+D)>=0 EVC:=1 **)
(** FB-(SET-D)<0 EVC:=0 **)
(** 冬季:SET>FB EVC:=1 **)
(** (SET-D)-FB>=0 EVC:=1 **)
(** (SET+D)-FB<0 EVC:=0 **)
(** *} **)
(** ton1(pt:=Delay); **)
(* call - Stmt *)
CAL ton1 (
pt := Delay
)
(** ton2(pt:=Delay); **)
(* call - Stmt *)
CAL ton2 (
pt := Delay
)
(** **)
(** if RUN =1 then **)
(* if - Cond *)
LD RUN
EQ 1
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** if SW=0 then **)
(* if - Cond *)
LD SW
EQ 0
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** if FB-(SET+Dead_Band)>=0.0 then **)
(* if - Cond *)
LD FB
SUB ( SET
ADD Dead_Band
)
GE 0.0
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** ton1.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton1.in
JMP ODK_END_IF_000000000000003
(** else **)
(* else *)
ODK_SKIP_000000000000003_000000000000001:
(* else - Stmts *)
(** ton1.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton1.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000003:
(** if ton1.q=1 then **)
(* if - Cond *)
LD ton1.q
EQ 1
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** EVC:=1; **)
(* assign - Stmt *)
LD 1
ST EVC
JMP ODK_END_IF_000000000000004
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
(** if FB-(SET-Dead_Band)<0.0 then **)
(* if - Cond *)
LD FB
SUB ( SET
SUB Dead_Band
)
LT 0.0
JMPCN ODK_SKIP_000000000000005_000000000000001
(* then - Stmts *)
(** ton2.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton2.in
JMP ODK_END_IF_000000000000005
(** else **)
(* else *)
ODK_SKIP_000000000000005_000000000000001:
(* else - Stmts *)
(** ton2.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton2.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000005:
(** if ton2.q=1 then **)
(* if - Cond *)
LD ton2.q
EQ 1
JMPCN ODK_SKIP_000000000000006_000000000000001
(* then - Stmts *)
(** EVC:=0; **)
(* assign - Stmt *)
LD 0
ST EVC
JMP ODK_END_IF_000000000000006
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000006_000000000000001:
ODK_END_IF_000000000000006:
JMP ODK_END_IF_000000000000002
(** else **)
(* else *)
ODK_SKIP_000000000000002_000000000000001:
(* else - Stmts *)
(** if (SET-Dead_Band)-FB>=0.0 then **)
(* if - Cond *)
LD SET
SUB Dead_Band
SUB FB
GE 0.0
JMPCN ODK_SKIP_000000000000007_000000000000001
(* then - Stmts *)
(** ton1.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton1.in
JMP ODK_END_IF_000000000000007
(** else **)
(* else *)
ODK_SKIP_000000000000007_000000000000001:
(* else - Stmts *)
(** ton1.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton1.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000007:
(** if ton1.q=1 then **)
(* if - Cond *)
LD ton1.q
EQ 1
JMPCN ODK_SKIP_000000000000008_000000000000001
(* then - Stmts *)
(** EVC:=1; **)
(* assign - Stmt *)
LD 1
ST EVC
JMP ODK_END_IF_000000000000008
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000008_000000000000001:
ODK_END_IF_000000000000008:
(** if (SET+Dead_Band)-FB<0.0 then **)
(* if - Cond *)
LD SET
ADD Dead_Band
SUB FB
LT 0.0
JMPCN ODK_SKIP_000000000000009_000000000000001
(* then - Stmts *)
(** ton2.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton2.in
JMP ODK_END_IF_000000000000009
(** else **)
(* else *)
ODK_SKIP_000000000000009_000000000000001:
(* else - Stmts *)
(** ton2.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton2.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000009:
(** if ton2.q=1 then **)
(* if - Cond *)
LD ton2.q
EQ 1
JMPCN ODK_SKIP_00000000000000A_000000000000001
(* then - Stmts *)
(** EVC:=0; **)
(* assign - Stmt *)
LD 0
ST EVC
JMP ODK_END_IF_00000000000000A
(** end_if; **)
(* if - End *)
ODK_SKIP_00000000000000A_000000000000001:
ODK_END_IF_00000000000000A:
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000002:
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** **)
END_FUNCTION_BLOCK

95
BRCON_MCFB_IU_v3.3.0/BS_EVC.ST

@ -0,0 +1,95 @@
FUNCTION_BLOCK BS_EVC
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID功能块启用 *)
SET : REAL ; (* 调节目标值 *)
FB : REAL ; (* 调节目标值的反馈值 *)
Dead_Band : REAL :=0.5 ; (* 死区 *)
Delay : TIME :=t#30s;(* 延时时间 *)
SW : INT ; (* 季节模式 0夏季 1冬季 2过渡 *)
END_VAR
VAR_OUTPUT
EVC : BOOL ; (* 电磁阀控制 *)
END_VAR
VAR
ton1 : TON ;
ton2 : TON ;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:电磁阀/开关阀值控程序
说 明:用于电磁阀/开关阀类的开关量阀门的值控程序
备 注:适用于温度、湿度等控制
依赖块:无
输入变量
RUN : BOOL ; PID功能块启用
SET : REAL ; 调节目标值
FB : REAL ; 调节目标值的反馈值
Dead_Band : REAL ; 死区,默认0.5
Delay : TIME ; 延时时间,默认30S
SW : INT ; 季节模式 0夏季 1冬季
输出变量
EVC : BOOL ; 电磁阀/开关阀控制输出
*)
(*
夏季:FB>SET EVC:=1
FB-(SET+D)>=0 EVC:=1
FB-(SET-D)<0 EVC:=0
冬季:SET>FB EVC:=1
(SET-D)-FB>=0 EVC:=1
(SET+D)-FB<0 EVC:=0
*)
ton1(pt:=Delay);
ton2(pt:=Delay);
if RUN =1 then
if SW=0 then
if FB-(SET+Dead_Band)>=0.0 then
ton1.in:=1;
else
ton1.in:=0;
end_if;
if ton1.q=1 then
EVC:=1;
end_if;
if FB-(SET-Dead_Band)<0.0 then
ton2.in:=1;
else
ton2.in:=0;
end_if;
if ton2.q=1 then
EVC:=0;
end_if;
else
if (SET-Dead_Band)-FB>=0.0 then
ton1.in:=1;
else
ton1.in:=0;
end_if;
if ton1.q=1 then
EVC:=1;
end_if;
if (SET+Dead_Band)-FB<0.0 then
ton2.in:=1;
else
ton2.in:=0;
end_if;
if ton2.q=1 then
EVC:=0;
end_if;
end_if;
end_if;
END_FUNCTION_BLOCK

97
BRCON_MCFB_IU_v3.3.0/BS_EVC.bak

@ -0,0 +1,97 @@
FUNCTION_BLOCK BS_EVC
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID功能块启用 *)
SET : REAL ; (* 调节目标值 *)
FB : REAL ; (* 调节目标值的反馈值 *)
Dead_Band : REAL :=0.5 ; (* 死区 *)
Delay : TIME :=t#30s;(* 延时时间 *)
SW : INT ; (* 季节模式 0夏季 1冬季 2过渡 *)
END_VAR
VAR_OUTPUT
EVC : BOOL ; (* 电磁阀控制 *)
END_VAR
VAR
ton1 : TON ;
ton2 : TON ;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:电磁阀/开关阀值控程序
说 明:用于电磁阀/开关阀类的开关量阀门的值控程序
备 注:适用于温度、湿度等控制
依赖块:无
输入变量
RUN : BOOL ; PID功能块启用
SET : REAL ; 调节目标值
FB : REAL ; 调节目标值的反馈值
Dead_Band : REAL ; 死区,默认0.5
Delay : TIME ; 延时时间,默认30S
SW : INT ; 季节模式 0夏季 1冬季
输出变量
EVC : BOOL ; 电磁阀/开关阀控制输出
*)
(*
夏季:FB>SET EVC:=1
FB-(SET+D)>=0 EVC:=1
FB-(SET-D)<0 EVC:=0
冬季:SET>FB EVC:=1
(SET-D)-FB>=0 EVC:=1
(SET+D)-FB<0 EVC:=0
*)
ton1(pt:=Delay);
ton2(pt:=Delay);
if RUN =1 then
if SW=0 then
if FB-(SET+Dead_Band)>=0.0 then
ton1.in:=1;
else
ton1.in:=0;
end_if;
if ton1.q=1 then
EVC:=1;
end_if;
if FB-(SET-Dead_Band)<0.0 then
ton2.in:=1;
else
ton2.in:=0;
end_if;
if ton2.q=1 then
EVC:=0;
end_if;
else
if (SET-Dead_Band)-FB>=0.0 then
ton1.in:=1;
else
ton1.in:=0;
end_if;
if ton1.q=1 then
EVC:=1;
end_if;
if (SET+Dead_Band)-FB<0.0 then
ton2.in:=1;
else
ton2.in:=0;
end_if;
if ton2.q=1 then
EVC:=0;
end_if;
end_if;
end_if;
END_FUNCTION_BLOCK

197
BRCON_MCFB_IU_v3.3.0/BS_FEC.POE

@ -0,0 +1,197 @@
FUNCTION_BLOCK BS_FEC
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID鍔熻兘鍧楀惎鐢� *)
SET : REAL ; (* 璋冭妭鐩�爣鍊� *)
FB : REAL ; (* 璋冭妭鐩�爣鍊肩殑鍙嶉�鍊� *)
Dead_Band : REAL :=10.0 ; (* 姝诲尯 *)
Delay : TIME :=t#300s;(* 寤舵椂鏃堕棿 *)
END_VAR
VAR_OUTPUT
DevC : BOOL ; (* 璁惧�寮€鍏虫帶鍒� *)
END_VAR
VAR
ton1 : TON ;
ton2 : TON ;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20200220 **)
(** 版 本:1.0 **)
(** 作 者:潘平 **)
(** 名 称:设备开关值控程序 **)
(** 说 明:用于设备开关的值控程序 **)
(** 备 注:适用于风机联动环境值等控制 **)
(** 依赖块:无 **)
(** **)
(** 输入变量 **)
(** RUN : BOOL ; PID功能块启用 **)
(** SET : REAL ; 调节目标值 **)
(** FB : REAL ; 调节目标值的反馈值 **)
(** Dead_Band : REAL ; 死区,默认10 **)
(** Delay : TIME ; 延时时间,默认300S **)
(** 输出变量 **)
(** DevC : BOOL ; 设备控制输出 **)
(** **)
(** *} **)
(** **)
(** {* **)
(** FB>SET DevC:=1 **)
(** FB-(SET-D)<0 DevC:=0 **)
(** **)
(** *} **)
(** ton1(pt:=Delay); **)
(* call - Stmt *)
CAL ton1 (
pt := Delay
)
(** ton2(pt:=Delay); **)
(* call - Stmt *)
CAL ton2 (
pt := Delay
)
(** **)
(** if RUN =1 then **)
(* if - Cond *)
LD RUN
EQ 1
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** if FB-SET>=0.0 then **)
(* if - Cond *)
LD FB
SUB SET
GE 0.0
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** DevC:=1; **)
(* assign - Stmt *)
LD 1
ST DevC
(** ton1.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton1.in
JMP ODK_END_IF_000000000000002
(** else **)
(* else *)
ODK_SKIP_000000000000002_000000000000001:
(* else - Stmts *)
(** ton1.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton1.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000002:
(** if ton1.q=1 then **)
(* if - Cond *)
LD ton1.q
EQ 1
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** DevC:=1; **)
(* assign - Stmt *)
LD 1
ST DevC
JMP ODK_END_IF_000000000000003
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000003_000000000000001:
ODK_END_IF_000000000000003:
(** if FB-(SET-Dead_Band)<0.0 then **)
(* if - Cond *)
LD FB
SUB ( SET
SUB Dead_Band
)
LT 0.0
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** ton2.in:=1; **)
(* assign - Stmt *)
LD 1
ST ton2.in
JMP ODK_END_IF_000000000000004
(** else **)
(* else *)
ODK_SKIP_000000000000004_000000000000001:
(* else - Stmts *)
(** ton2.in:=0; **)
(* assign - Stmt *)
LD 0
ST ton2.in
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000004:
(** if ton2.q=1 then **)
(* if - Cond *)
LD ton2.q
EQ 1
JMPCN ODK_SKIP_000000000000005_000000000000001
(* then - Stmts *)
(** DevC:=0; **)
(* assign - Stmt *)
LD 0
ST DevC
JMP ODK_END_IF_000000000000005
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000005_000000000000001:
ODK_END_IF_000000000000005:
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
END_FUNCTION_BLOCK

78
BRCON_MCFB_IU_v3.3.0/BS_FEC.ST

@ -0,0 +1,78 @@
FUNCTION_BLOCK BS_FEC
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID功能块启用 *)
SET : REAL ; (* 调节目标值 *)
FB : REAL ; (* 调节目标值的反馈值 *)
Dead_Band : REAL :=10.0 ; (* 死区 *)
Delay : TIME :=t#300s;(* 延时时间 *)
END_VAR
VAR_OUTPUT
DevC : BOOL ; (* 设备开关控制 *)
END_VAR
VAR
ton1 : TON ;
ton2 : TON ;
END_VAR
(*
时 间:20200220
版 本:1.0
作 者:潘平
名 称:设备开关值控程序
说 明:用于设备开关的值控程序
备 注:适用于风机联动环境值等控制
依赖块:无
输入变量
RUN : BOOL ; PID功能块启用
SET : REAL ; 调节目标值
FB : REAL ; 调节目标值的反馈值
Dead_Band : REAL ; 死区,默认10
Delay : TIME ; 延时时间,默认300S
输出变量
DevC : BOOL ; 设备控制输出
*)
(*
FB>SET DevC:=1
FB-(SET-D)<0 DevC:=0
*)
ton1(pt:=Delay);
ton2(pt:=Delay);
if RUN =1 then
if FB-SET>=0.0 then
DevC:=1;
ton1.in:=1;
else
ton1.in:=0;
end_if;
if ton1.q=1 then
DevC:=1;
end_if;
if FB-(SET-Dead_Band)<0.0 then
ton2.in:=1;
else
ton2.in:=0;
end_if;
if ton2.q=1 then
DevC:=0;
end_if;
end_if;
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_FEC.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_FEC
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

103
BRCON_MCFB_IU_v3.3.0/BS_FEEDBACK.POE

@ -0,0 +1,103 @@
FUNCTION_BLOCK BS_Feedback
VAR_EXTERNAL
END_VAR
VAR_INPUT
Control :BOOL; (*璁惧�鎺у埗鎸囦护*)
Run :BOOL; (*璁惧�杩愯�鐘舵€佸弽棣�*)
END_VAR
VAR_OUTPUT
ALARM :BOOL; (*璁惧�鐢垫皵鎺у埗绠辨晠闅滄姤璀�*)
END_VAR
VAR
TON1 :TON;
TOF1 :TOF;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20191003 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:控制反馈不一致报警 **)
(** 说 明:注:设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等 **)
(** 备 注: **)
(** **)
(** *} **)
(** **)
(** TON1( IN:=Control , PT:=t#15S); **)
(* call - Stmt *)
CAL TON1 (
IN := Control,
PT := t#15S
)
(** TOF1( IN:=Control , PT:=t#15S); **)
(* call - Stmt *)
CAL TOF1 (
IN := Control,
PT := t#15S
)
(** **)
(** IF TON1.q=1 or TOF1.q=1 then **)
(* if - Cond *)
LD TON1.q
EQ 1
OR ( TOF1.q
EQ 1
)
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** if Control<>Run then **)
(* if - Cond *)
LD Control
NE Run
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** ALARM:=1; **)
(* assign - Stmt *)
LD 1
ST ALARM
JMP ODK_END_IF_000000000000002
(** else **)
(* else *)
ODK_SKIP_000000000000002_000000000000001:
(* else - Stmts *)
(** ALARM:=0; **)
(* assign - Stmt *)
LD 0
ST ALARM
(** end_if; **)
(* if - End *)
ODK_END_IF_000000000000002:
JMP ODK_END_IF_000000000000001
(** END_IF; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** **)
(** **)
END_FUNCTION_BLOCK

46
BRCON_MCFB_IU_v3.3.0/BS_Feedback.ST

@ -0,0 +1,46 @@
FUNCTION_BLOCK BS_Feedback
VAR_EXTERNAL
END_VAR
VAR_INPUT
Control :BOOL; (*设备控制指令*)
Run :BOOL; (*设备运行状态反馈*)
END_VAR
VAR_OUTPUT
ALARM :BOOL; (*设备电气控制箱故障报警*)
END_VAR
VAR
TON1 :TON;
TOF1 :TOF;
END_VAR
(*
时 间:20191003
版 本:1.0
作 者:姚立
名 称:控制反馈不一致报警
说 明:注:设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等
备 注:
*)
TON1( IN:=Control , PT:=t#15S);
TOF1( IN:=Control , PT:=t#15S);
IF TON1.q=1 or TOF1.q=1 then
if Control<>Run then
ALARM:=1;
else
ALARM:=0;
end_if;
END_IF;
END_FUNCTION_BLOCK

36
BRCON_MCFB_IU_v3.3.0/BS_Feedback.bak

@ -0,0 +1,36 @@
FUNCTION_BLOCK BS_Feedback
VAR_EXTERNAL
END_VAR
VAR_INPUT
Control :BOOL; (*设备控制指令*)
Run :BOOL; (*设备运行状态反馈*)
END_VAR
VAR_OUTPUT
ALARM :BOOL; (*设备电气控制箱故障报警*)
END_VAR
VAR
TON1 :TON;
TOF1 :TOF;
END_VAR
(*设备电气控制箱控制指令与设备运行反馈不一致故障检测,检测故障产生原因电箱没电、断路器断开、中间继电器与接触器故障等*);
TON1( IN:=Control , PT:=t#15S);
TOF1( IN:=Control , PT:=t#15S);
IF TON1.q=1 or TOF1.q=1 then
if Control<>Run then
ALARM:=1;
else
ALARM:=0;
end_if;
END_IF;
END_FUNCTION_BLOCK

301
BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.POE

@ -0,0 +1,301 @@
FUNCTION_BLOCK BS_GETCRC16
VAR_EXTERNAL
END_VAR
VAR_INPUT
(*CRC_ADR :dword;*)
CRC_IN : array[0..200] of byte;
CRC_LEN :INT;
END_VAR
VAR_OUTPUT
CRC16H :byte;
CRC16L :byte;
END_VAR
VAR
(*CRC璁$畻鐢ㄥ畾涔�*)
CRC16Lo,CRC16Hi : Byte;
CL,CH : Byte;
SaveHi,SaveLo : Byte;
Flag: Int;
i : int;
j : int;
k : int;
VALCRC : array[0..100] of byte;
v2v : NW_MemCopy;
p1,p2 : pointer;
(*
MemToVar : AdvMemToVar;
VarToMem : AdvVarToMem;
*)
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20200924 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:CRC校验 **)
(** 说 明: **)
(** 备 注: **)
(** **)
(** INPUT: **)
(** CRC_IN : array[0..200] of byte; modbus发送序列 **)
(** **)
(** CRC_LEN :INT; 发送序列数据长度 **)
(** **)
(** **)
(** OUTPUT: **)
(** CRC16H :byte; **)
(** CRC16L :byte; **)
(** *} **)
(** **)
(** **)
(** **)
(** {*MemToVar(EN :=true , DW_MEM_ADDR :=CRC_ADR , W_MEM_LEN :=CRC_LEN , STR_FILENAME :='OPCDA1' , STR_VARNAME :='VALCRC' );*} **)
(** **)
(** p1:=&VALCRC; **)
(* assign - Stmt *)
LD &VALCRC
ST p1
(** p2:=&CRC_IN; **)
(* assign - Stmt *)
LD &CRC_IN
ST p2
(** v2v(DEST :=p1 , SRC :=p2 , LENGTH :=CRC_LEN , IQM :=0 ); **)
(* call - Stmt *)
CAL v2v (
DEST := p1,
SRC := p2,
LENGTH := CRC_LEN,
IQM := 0
)
(** CRC16Lo := 255; **)
(* assign - Stmt *)
LD 255
ST CRC16Lo
(** CRC16Hi := 255; **)
(* assign - Stmt *)
LD 255
ST CRC16Hi
(** CL := 1; **)
(* assign - Stmt *)
LD 1
ST CL
(** CH := 160; **)
(* assign - Stmt *)
LD 160
ST CH
(** **)
(** For i := 0 To (CRC_LEN-1) by 1 do **)
(* for - Init *)
LD 0
ST i
EQ( CRC_LEN
SUB 1
)
JMPC ODK_FOR_STMTS_000000000000001
(* for - Cond *)
ODK_FOR_000000000000001:
LD 0
GT( CRC_LEN
SUB 1
)
JMPC ODK_FOR_DOWN_000000000000001
LD 0
GT 1
JMPC ODK_END_FOR_000000000000001
LD CRC_LEN
SUB 1
LT i
JMPC ODK_END_FOR_000000000000001
JMP ODK_FOR_STMTS_000000000000001
ODK_FOR_DOWN_000000000000001:
LD CRC_LEN
SUB 1
GT i
JMPC ODK_END_FOR_000000000000001
LD 0
LT 1
JMPC ODK_END_FOR_000000000000001
(* for - Stmts *)
ODK_FOR_STMTS_000000000000001:
(** CRC16Lo := CRC16Lo Xor VALCRC[i]; **)
(* assign - Stmt *)
LD CRC16Lo
XOR VALCRC[i]
ST CRC16Lo
(** For Flag := 0 To 7 by 1 do **)
(* for - Init *)
LD 0
ST Flag
EQ 7
JMPC ODK_FOR_STMTS_000000000000002
(* for - Cond *)
ODK_FOR_000000000000002:
LD 0
GT 7
JMPC ODK_FOR_DOWN_000000000000002
LD 0
GT 1
JMPC ODK_END_FOR_000000000000002
LD 7
LT Flag
JMPC ODK_END_FOR_000000000000002
JMP ODK_FOR_STMTS_000000000000002
ODK_FOR_DOWN_000000000000002:
LD 7
GT Flag
JMPC ODK_END_FOR_000000000000002
LD 0
LT 1
JMPC ODK_END_FOR_000000000000002
(* for - Stmts *)
ODK_FOR_STMTS_000000000000002:
(** SaveHi := CRC16Hi; **)
(* assign - Stmt *)
LD CRC16Hi
ST SaveHi
(** SaveLo := CRC16Lo; **)
(* assign - Stmt *)
LD CRC16Lo
ST SaveLo
(** CRC16Hi := shr(CRC16Hi,1); **)
(* assign - Stmt *)
LD CRC16Hi
shr 1
ST CRC16Hi
(** CRC16Lo := shr(CRC16Lo,1); **)
(* assign - Stmt *)
LD CRC16Lo
shr 1
ST CRC16Lo
(** **)
(** If ((SaveHi And 1) = 1) Then **)
(* if - Cond *)
LD SaveHi
AND 1
EQ 1
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** CRC16Lo := CRC16Lo Or 128; **)
(* assign - Stmt *)
LD CRC16Lo
OR 128
ST CRC16Lo
JMP ODK_END_IF_000000000000003
(** End_If; **)
(* if - End *)
ODK_SKIP_000000000000003_000000000000001:
ODK_END_IF_000000000000003:
(** If ((SaveLo And 1) = 1) Then **)
(* if - Cond *)
LD SaveLo
AND 1
EQ 1
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** CRC16Hi := CRC16Hi Xor CH; **)
(* assign - Stmt *)
LD CRC16Hi
XOR CH
ST CRC16Hi
(** CRC16Lo := CRC16Lo Xor CL; **)
(* assign - Stmt *)
LD CRC16Lo
XOR CL
ST CRC16Lo
JMP ODK_END_IF_000000000000004
(** End_If; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
(* for - By *)
LD 1
ADD Flag
ST Flag
(** end_for; **)
JMP ODK_FOR_000000000000002
(* for - End *)
ODK_END_FOR_000000000000002:
(* for - By *)
LD 1
ADD i
ST i
(** **)
(** end_for; **)
JMP ODK_FOR_000000000000001
(* for - End *)
ODK_END_FOR_000000000000001:
(** **)
(** CRC16H:=CRC16Lo; **)
(* assign - Stmt *)
LD CRC16Lo
ST CRC16H
(** CRC16L:=CRC16Hi; **)
(* assign - Stmt *)
LD CRC16Hi
ST CRC16L
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
END_FUNCTION_BLOCK

95
BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.ST

@ -0,0 +1,95 @@
FUNCTION_BLOCK BS_GETCRC16
VAR_EXTERNAL
END_VAR
VAR_INPUT
(*CRC_ADR :dword;*)
CRC_IN : array[0..200] of byte;
CRC_LEN :INT;
END_VAR
VAR_OUTPUT
CRC16H :byte;
CRC16L :byte;
END_VAR
VAR
(*CRC计算用定义*)
CRC16Lo,CRC16Hi : Byte;
CL,CH : Byte;
SaveHi,SaveLo : Byte;
Flag: Int;
i : int;
j : int;
k : int;
VALCRC : array[0..100] of byte;
v2v : NW_MemCopy;
p1,p2 : pointer;
(*
MemToVar : AdvMemToVar;
VarToMem : AdvVarToMem;
*)
END_VAR
(*
时 间:20200924
版 本:1.0
作 者:姚立
名 称:CRC校验
说 明:
备 注:
INPUT:
CRC_IN : array[0..200] of byte; modbus发送序列
CRC_LEN :INT; 发送序列数据长度
OUTPUT:
CRC16H :byte;
CRC16L :byte;
*)
(*MemToVar(EN :=true , DW_MEM_ADDR :=CRC_ADR , W_MEM_LEN :=CRC_LEN , STR_FILENAME :='OPCDA1' , STR_VARNAME :='VALCRC' );*)
p1:=&VALCRC;
p2:=&CRC_IN;
v2v(DEST :=p1 , SRC :=p2 , LENGTH :=CRC_LEN , IQM :=0 );
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
For i := 0 To (CRC_LEN-1) by 1 do
CRC16Lo := CRC16Lo Xor VALCRC[i];
For Flag := 0 To 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
If ((SaveHi And 1) = 1) Then
CRC16Lo := CRC16Lo Or 128;
End_If;
If ((SaveLo And 1) = 1) Then
CRC16Hi := CRC16Hi Xor CH;
CRC16Lo := CRC16Lo Xor CL;
End_If;
end_for;
end_for;
CRC16H:=CRC16Lo;
CRC16L:=CRC16Hi;
END_FUNCTION_BLOCK

73
BRCON_MCFB_IU_v3.3.0/BS_GETCRC16.bak

@ -0,0 +1,73 @@
FUNCTION_BLOCK BS_GETCRC16
VAR_EXTERNAL
END_VAR
VAR_INPUT
(*CRC_ADR :dword;*)
CRC_IN : array[0..200] of byte;
CRC_LEN :INT;
END_VAR
VAR_OUTPUT
CRC16H :byte;
CRC16L :byte;
END_VAR
VAR
(*CRC计算用定义*)
CRC16Lo,CRC16Hi : Byte;
CL,CH : Byte;
SaveHi,SaveLo : Byte;
Flag: Int;
i : int;
j : int;
k : int;
VALCRC : array[0..100] of byte;
v2v : NW_MemCopy;
p1,p2 : pointer;
(*
MemToVar : AdvMemToVar;
VarToMem : AdvVarToMem;
*)
END_VAR
(*MemToVar(EN :=true , DW_MEM_ADDR :=CRC_ADR , W_MEM_LEN :=CRC_LEN , STR_FILENAME :='OPCDA1' , STR_VARNAME :='VALCRC' );*)
p1:=&VALCRC;
p2:=&CRC_IN;
v2v(DEST :=p1 , SRC :=p2 , LENGTH :=CRC_LEN , IQM :=0 );
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
For i := 0 To (CRC_LEN-1) by 1 do
CRC16Lo := CRC16Lo Xor VALCRC[i];
For Flag := 0 To 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
If ((SaveHi And 1) = 1) Then
CRC16Lo := CRC16Lo Or 128;
End_If;
If ((SaveLo And 1) = 1) Then
CRC16Hi := CRC16Hi Xor CH;
CRC16Lo := CRC16Lo Xor CL;
End_If;
end_for;
end_for;
CRC16H:=CRC16Lo;
CRC16L:=CRC16Hi;
END_FUNCTION_BLOCK

368
BRCON_MCFB_IU_v3.3.0/BS_GROUPVAVLE.POE

@ -0,0 +1,368 @@
FUNCTION_BLOCK BS_GroupVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet:BOOL;
INT_GroupSet:INT;
REAL_GroupSet:REAL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..10] OF REAL;
INT_OUT :ARRAY[0..10] OF INT;
BOOL_OUT :ARRAY[0..10] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** **)
(** {* **)
(** **)
(** 时 间:20191008 **)
(** 版 本:1.5 **)
(** 作 者:姚立 **)
(** 名 称:变量批量赋值 **)
(** 说 明:用于变量批量赋值,可选锁定单体变量输入 **)
(** LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL; **)
(** 备 注:支持10组BOOL,10组REAL,10组INT **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** {**********一个REAL型总变量对10个变量赋值,10个变量也可单独赋值*************} **)
(** **)
(** if REAL_GroupSet<>REAL_GroupSetP then **)
(* if - Cond *)
LD REAL_GroupSet
NE REAL_GroupSetP
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** REAL_OUT[01]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[01]
(** REAL_OUT[02]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[02]
(** REAL_OUT[03]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[03]
(** REAL_OUT[04]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[04]
(** REAL_OUT[05]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[05]
(** REAL_OUT[06]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[06]
(** REAL_OUT[07]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[07]
(** REAL_OUT[08]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[08]
(** REAL_OUT[09]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[09]
(** REAL_OUT[10]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[10]
JMP ODK_END_IF_000000000000001
(** **)
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** **)
(** {**********一个BOOL型总变量对10个变量赋值,10个变量也可单独赋值*************} **)
(** **)
(** if BOOL_GroupSet<>BOOL_GroupSetP then **)
(* if - Cond *)
LD BOOL_GroupSet
NE BOOL_GroupSetP
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** BOOL_OUT[01]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[01]
(** BOOL_OUT[02]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[02]
(** BOOL_OUT[03]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[03]
(** BOOL_OUT[04]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[04]
(** BOOL_OUT[05]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[05]
(** BOOL_OUT[06]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[06]
(** BOOL_OUT[07]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[07]
(** BOOL_OUT[08]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[08]
(** BOOL_OUT[09]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[09]
(** BOOL_OUT[10]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[10]
JMP ODK_END_IF_000000000000002
(** **)
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(** **)
(** **)
(** {**********一个INT型总变量对10个变量赋值,10个变量也可单独赋值*************} **)
(** **)
(** if INT_GroupSet<>INT_GroupSetP then **)
(* if - Cond *)
LD INT_GroupSet
NE INT_GroupSetP
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** INT_OUT[01]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[01]
(** INT_OUT[02]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[02]
(** INT_OUT[03]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[03]
(** INT_OUT[04]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[04]
(** INT_OUT[05]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[05]
(** INT_OUT[06]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[06]
(** INT_OUT[07]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[07]
(** INT_OUT[08]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[08]
(** INT_OUT[09]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[09]
(** INT_OUT[10]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[10]
JMP ODK_END_IF_000000000000003
(** **)
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000003_000000000000001:
ODK_END_IF_000000000000003:
(** **)
(** case lock of **)
(** {*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*} **)
(** 0: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000000:
(* case - Cond *)
LD lock
EQ 0
JMPC ODK_CASE_000000000000004_000000000000001
JMP ODK_SKIP_000000000000004_000000000000001
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000001:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 1: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000001:
(* case - Cond *)
LD lock
EQ 1
JMPC ODK_CASE_000000000000004_000000000000002
JMP ODK_SKIP_000000000000004_000000000000002
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000002:
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 2: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000002:
(* case - Cond *)
LD lock
EQ 2
JMPC ODK_CASE_000000000000004_000000000000003
JMP ODK_SKIP_000000000000004_000000000000003
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000003:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 3: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000003:
(* case - Cond *)
LD lock
EQ 3
JMPC ODK_CASE_000000000000004_000000000000004
JMP ODK_SKIP_000000000000004_000000000000004
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000004:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
JMP ODK_END_CASE_000000000000004
(** end_case; **)
(* case - End *)
ODK_SKIP_000000000000004_000000000000004:
ODK_END_CASE_000000000000004:
(** **)
END_FUNCTION_BLOCK

964
BRCON_MCFB_IU_v3.3.0/BS_GROUPVAVLE50.POE

@ -0,0 +1,964 @@
FUNCTION_BLOCK BS_GroupVavle50
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet:BOOL;
INT_GroupSet:INT;
REAL_GroupSet:REAL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..50] OF REAL;
INT_OUT :ARRAY[0..50] OF INT;
BOOL_OUT :ARRAY[0..50] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20190923 **)
(** 版 本:1.4 **)
(** 作 者:姚立 **)
(** 名 称:变量批量赋值 **)
(** 说 明:用于变量批量赋值,可选锁定单体变量输入 **)
(** LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL; **)
(** 备 注:支持50组BOOL,50组REAL,50组INT **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** {**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************} **)
(** **)
(** if REAL_GroupSet<>REAL_GroupSetP then **)
(* if - Cond *)
LD REAL_GroupSet
NE REAL_GroupSetP
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** REAL_OUT[01]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[01]
(** REAL_OUT[02]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[02]
(** REAL_OUT[03]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[03]
(** REAL_OUT[04]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[04]
(** REAL_OUT[05]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[05]
(** REAL_OUT[06]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[06]
(** REAL_OUT[07]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[07]
(** REAL_OUT[08]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[08]
(** REAL_OUT[09]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[09]
(** REAL_OUT[10]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[10]
(** REAL_OUT[11]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[11]
(** REAL_OUT[12]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[12]
(** REAL_OUT[13]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[13]
(** REAL_OUT[14]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[14]
(** REAL_OUT[15]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[15]
(** REAL_OUT[16]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[16]
(** REAL_OUT[17]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[17]
(** REAL_OUT[18]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[18]
(** REAL_OUT[19]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[19]
(** REAL_OUT[20]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[20]
(** REAL_OUT[21]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[21]
(** REAL_OUT[22]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[22]
(** REAL_OUT[23]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[23]
(** REAL_OUT[24]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[24]
(** REAL_OUT[25]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[25]
(** REAL_OUT[26]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[26]
(** REAL_OUT[27]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[27]
(** REAL_OUT[28]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[28]
(** REAL_OUT[29]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[29]
(** REAL_OUT[30]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[30]
(** REAL_OUT[31]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[31]
(** REAL_OUT[32]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[32]
(** REAL_OUT[33]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[33]
(** REAL_OUT[34]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[34]
(** REAL_OUT[35]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[35]
(** REAL_OUT[36]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[36]
(** REAL_OUT[37]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[37]
(** REAL_OUT[38]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[38]
(** REAL_OUT[39]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[39]
(** REAL_OUT[40]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[40]
(** REAL_OUT[41]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[41]
(** REAL_OUT[42]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[42]
(** REAL_OUT[43]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[43]
(** REAL_OUT[44]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[44]
(** REAL_OUT[45]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[45]
(** REAL_OUT[46]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[46]
(** REAL_OUT[47]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[47]
(** REAL_OUT[48]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[48]
(** REAL_OUT[49]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[49]
(** REAL_OUT[50]:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_OUT[50]
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** **)
(** **)
(** {**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************} **)
(** **)
(** if BOOL_GroupSet<>BOOL_GroupSetP then **)
(* if - Cond *)
LD BOOL_GroupSet
NE BOOL_GroupSetP
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** BOOL_OUT[01]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[01]
(** BOOL_OUT[02]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[02]
(** BOOL_OUT[03]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[03]
(** BOOL_OUT[04]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[04]
(** BOOL_OUT[05]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[05]
(** BOOL_OUT[06]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[06]
(** BOOL_OUT[07]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[07]
(** BOOL_OUT[08]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[08]
(** BOOL_OUT[09]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[09]
(** BOOL_OUT[10]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[10]
(** BOOL_OUT[11]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[11]
(** BOOL_OUT[12]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[12]
(** BOOL_OUT[13]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[13]
(** BOOL_OUT[14]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[14]
(** BOOL_OUT[15]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[15]
(** BOOL_OUT[16]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[16]
(** BOOL_OUT[17]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[17]
(** BOOL_OUT[18]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[18]
(** BOOL_OUT[19]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[19]
(** BOOL_OUT[20]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[20]
(** BOOL_OUT[21]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[21]
(** BOOL_OUT[22]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[22]
(** BOOL_OUT[23]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[23]
(** BOOL_OUT[24]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[24]
(** BOOL_OUT[25]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[25]
(** BOOL_OUT[26]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[26]
(** BOOL_OUT[27]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[27]
(** BOOL_OUT[28]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[28]
(** BOOL_OUT[29]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[29]
(** BOOL_OUT[30]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[30]
(** BOOL_OUT[31]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[31]
(** BOOL_OUT[32]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[32]
(** BOOL_OUT[33]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[33]
(** BOOL_OUT[34]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[34]
(** BOOL_OUT[35]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[35]
(** BOOL_OUT[36]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[36]
(** BOOL_OUT[37]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[37]
(** BOOL_OUT[38]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[38]
(** BOOL_OUT[39]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[39]
(** BOOL_OUT[40]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[40]
(** BOOL_OUT[41]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[41]
(** BOOL_OUT[42]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[42]
(** BOOL_OUT[43]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[43]
(** BOOL_OUT[44]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[44]
(** BOOL_OUT[45]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[45]
(** BOOL_OUT[46]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[46]
(** BOOL_OUT[47]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[47]
(** BOOL_OUT[48]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[48]
(** BOOL_OUT[49]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[49]
(** BOOL_OUT[50]:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_OUT[50]
JMP ODK_END_IF_000000000000002
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(** **)
(** **)
(** {**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************} **)
(** **)
(** if INT_GroupSet<>INT_GroupSetP then **)
(* if - Cond *)
LD INT_GroupSet
NE INT_GroupSetP
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** INT_OUT[01]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[01]
(** INT_OUT[02]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[02]
(** INT_OUT[03]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[03]
(** INT_OUT[04]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[04]
(** INT_OUT[05]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[05]
(** INT_OUT[06]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[06]
(** INT_OUT[07]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[07]
(** INT_OUT[08]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[08]
(** INT_OUT[09]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[09]
(** INT_OUT[10]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[10]
(** INT_OUT[11]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[11]
(** INT_OUT[12]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[12]
(** INT_OUT[13]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[13]
(** INT_OUT[14]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[14]
(** INT_OUT[15]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[15]
(** INT_OUT[16]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[16]
(** INT_OUT[17]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[17]
(** INT_OUT[18]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[18]
(** INT_OUT[19]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[19]
(** INT_OUT[20]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[20]
(** INT_OUT[21]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[21]
(** INT_OUT[22]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[22]
(** INT_OUT[23]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[23]
(** INT_OUT[24]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[24]
(** INT_OUT[25]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[25]
(** INT_OUT[26]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[26]
(** INT_OUT[27]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[27]
(** INT_OUT[28]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[28]
(** INT_OUT[29]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[29]
(** INT_OUT[30]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[30]
(** INT_OUT[31]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[31]
(** INT_OUT[32]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[32]
(** INT_OUT[33]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[33]
(** INT_OUT[34]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[34]
(** INT_OUT[35]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[35]
(** INT_OUT[36]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[36]
(** INT_OUT[37]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[37]
(** INT_OUT[38]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[38]
(** INT_OUT[39]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[39]
(** INT_OUT[40]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[40]
(** INT_OUT[41]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[41]
(** INT_OUT[42]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[42]
(** INT_OUT[43]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[43]
(** INT_OUT[44]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[44]
(** INT_OUT[45]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[45]
(** INT_OUT[46]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[46]
(** INT_OUT[47]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[47]
(** INT_OUT[48]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[48]
(** INT_OUT[49]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[49]
(** INT_OUT[50]:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_OUT[50]
JMP ODK_END_IF_000000000000003
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000003_000000000000001:
ODK_END_IF_000000000000003:
(** **)
(** case lock of **)
(** {*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*} **)
(** 0: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000000:
(* case - Cond *)
LD lock
EQ 0
JMPC ODK_CASE_000000000000004_000000000000001
JMP ODK_SKIP_000000000000004_000000000000001
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000001:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 1: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000001:
(* case - Cond *)
LD lock
EQ 1
JMPC ODK_CASE_000000000000004_000000000000002
JMP ODK_SKIP_000000000000004_000000000000002
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000002:
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 2: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000002:
(* case - Cond *)
LD lock
EQ 2
JMPC ODK_CASE_000000000000004_000000000000003
JMP ODK_SKIP_000000000000004_000000000000003
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000003:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** REAL_GroupSetP:=REAL_GroupSet; **)
(* assign - Stmt *)
LD REAL_GroupSet
ST REAL_GroupSetP
JMP ODK_END_CASE_000000000000004
(** 3: **)
(* case - Elm *)
ODK_SKIP_000000000000004_000000000000003:
(* case - Cond *)
LD lock
EQ 3
JMPC ODK_CASE_000000000000004_000000000000004
JMP ODK_SKIP_000000000000004_000000000000004
(* case - Stmts *)
ODK_CASE_000000000000004_000000000000004:
(** BOOL_GroupSetP:=BOOL_GroupSet; **)
(* assign - Stmt *)
LD BOOL_GroupSet
ST BOOL_GroupSetP
(** INT_GroupSetP:=INT_GroupSet; **)
(* assign - Stmt *)
LD INT_GroupSet
ST INT_GroupSetP
JMP ODK_END_CASE_000000000000004
(** end_case; **)
(* case - End *)
ODK_SKIP_000000000000004_000000000000004:
ODK_END_CASE_000000000000004:
(** **)
END_FUNCTION_BLOCK

105
BRCON_MCFB_IU_v3.3.0/BS_GroupVavle.ST

@ -0,0 +1,105 @@
FUNCTION_BLOCK BS_GroupVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet:BOOL;
INT_GroupSet:INT;
REAL_GroupSet:REAL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..10] OF REAL;
INT_OUT :ARRAY[0..10] OF INT;
BOOL_OUT :ARRAY[0..10] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
END_VAR
(*
时 间:20191008
版 本:1.5
作 者:姚立
名 称:变量批量赋值
说 明:用于变量批量赋值,可选锁定单体变量输入
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持10组BOOL,10组REAL,10组INT
依赖块:无
*)
(**********一个REAL型总变量对10个变量赋值,10个变量也可单独赋值*************)
if REAL_GroupSet<>REAL_GroupSetP then
REAL_OUT[01]:=REAL_GroupSet;
REAL_OUT[02]:=REAL_GroupSet;
REAL_OUT[03]:=REAL_GroupSet;
REAL_OUT[04]:=REAL_GroupSet;
REAL_OUT[05]:=REAL_GroupSet;
REAL_OUT[06]:=REAL_GroupSet;
REAL_OUT[07]:=REAL_GroupSet;
REAL_OUT[08]:=REAL_GroupSet;
REAL_OUT[09]:=REAL_GroupSet;
REAL_OUT[10]:=REAL_GroupSet;
end_if;
(**********一个BOOL型总变量对10个变量赋值,10个变量也可单独赋值*************)
if BOOL_GroupSet<>BOOL_GroupSetP then
BOOL_OUT[01]:=BOOL_GroupSet;
BOOL_OUT[02]:=BOOL_GroupSet;
BOOL_OUT[03]:=BOOL_GroupSet;
BOOL_OUT[04]:=BOOL_GroupSet;
BOOL_OUT[05]:=BOOL_GroupSet;
BOOL_OUT[06]:=BOOL_GroupSet;
BOOL_OUT[07]:=BOOL_GroupSet;
BOOL_OUT[08]:=BOOL_GroupSet;
BOOL_OUT[09]:=BOOL_GroupSet;
BOOL_OUT[10]:=BOOL_GroupSet;
end_if;
(**********一个INT型总变量对10个变量赋值,10个变量也可单独赋值*************)
if INT_GroupSet<>INT_GroupSetP then
INT_OUT[01]:=INT_GroupSet;
INT_OUT[02]:=INT_GroupSet;
INT_OUT[03]:=INT_GroupSet;
INT_OUT[04]:=INT_GroupSet;
INT_OUT[05]:=INT_GroupSet;
INT_OUT[06]:=INT_GroupSet;
INT_OUT[07]:=INT_GroupSet;
INT_OUT[08]:=INT_GroupSet;
INT_OUT[09]:=INT_GroupSet;
INT_OUT[10]:=INT_GroupSet;
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
1:
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
2:
BOOL_GroupSetP:=BOOL_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
3:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
end_case;
END_FUNCTION_BLOCK

105
BRCON_MCFB_IU_v3.3.0/BS_GroupVavle.bak

@ -0,0 +1,105 @@
FUNCTION_BLOCK BS_GroupVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet:BOOL;
INT_GroupSet:INT;
REAL_GroupSet:REAL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..10] OF REAL;
INT_OUT :ARRAY[0..10] OF INT;
BOOL_OUT :ARRAY[0..10] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
END_VAR
(*
时 间:20191008
版 本:1.5
作 者:姚立
名 称:变量批量赋值
说 明:用于变量批量赋值,可选锁定单体变量输入
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持10组BOOL,10组REAL,10组INT
依赖块:无
*)
(**********一个REAL型总变量对10个变量赋值,10个变量也可单独赋值*************)
if REAL_GroupSet<>REAL_GroupSetP then
REAL_OUT[01]:=REAL_GroupSet;
REAL_OUT[02]:=REAL_GroupSet;
REAL_OUT[03]:=REAL_GroupSet;
REAL_OUT[04]:=REAL_GroupSet;
REAL_OUT[05]:=REAL_GroupSet;
REAL_OUT[06]:=REAL_GroupSet;
REAL_OUT[07]:=REAL_GroupSet;
REAL_OUT[08]:=REAL_GroupSet;
REAL_OUT[09]:=REAL_GroupSet;
REAL_OUT[10]:=REAL_GroupSet;
end_if;
(**********一个BOOL型总变量对10个变量赋值,10个变量也可单独赋值*************)
if BOOL_GroupSet<>BOOL_GroupSetP then
BOOL_OUT[01]:=BOOL_GroupSet;
BOOL_OUT[02]:=BOOL_GroupSet;
BOOL_OUT[03]:=BOOL_GroupSet;
BOOL_OUT[04]:=BOOL_GroupSet;
BOOL_OUT[05]:=BOOL_GroupSet;
BOOL_OUT[06]:=BOOL_GroupSet;
BOOL_OUT[07]:=BOOL_GroupSet;
BOOL_OUT[08]:=BOOL_GroupSet;
BOOL_OUT[09]:=BOOL_GroupSet;
BOOL_OUT[10]:=BOOL_GroupSet;
end_if;
(**********一个INT型总变量对10个变量赋值,10个变量也可单独赋值*************)
if INT_GroupSet<>INT_GroupSetP then
INT_OUT[01]:=INT_GroupSet;
INT_OUT[02]:=INT_GroupSet;
INT_OUT[03]:=INT_GroupSet;
INT_OUT[04]:=INT_GroupSet;
INT_OUT[05]:=INT_GroupSet;
INT_OUT[06]:=INT_GroupSet;
INT_OUT[07]:=INT_GroupSet;
INT_OUT[08]:=INT_GroupSet;
INT_OUT[09]:=INT_GroupSet;
INT_OUT[10]:=INT_GroupSet;
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
1:
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
2:
BOOL_GroupSetP:=BOOL_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
3:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
end_case;
END_FUNCTION_BLOCK

221
BRCON_MCFB_IU_v3.3.0/BS_GroupVavle50.ST

@ -0,0 +1,221 @@
FUNCTION_BLOCK BS_GroupVavle50
VAR_EXTERNAL
END_VAR
VAR_INPUT
LOCK :INT:=0;
BOOL_GroupSet:BOOL;
INT_GroupSet:INT;
REAL_GroupSet:REAL;
END_VAR
VAR_OUTPUT
REAL_OUT :ARRAY[0..50] OF REAL;
INT_OUT :ARRAY[0..50] OF INT;
BOOL_OUT :ARRAY[0..50] OF BOOL;
END_VAR
VAR
REAL_GroupSetP :REAL;
BOOL_GroupSetP :BOOL;
INT_GroupSetP :INT;
END_VAR
(*
时 间:20190923
版 本:1.4
作 者:姚立
名 称:变量批量赋值
说 明:用于变量批量赋值,可选锁定单体变量输入
LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL;
备 注:支持50组BOOL,50组REAL,50组INT
依赖块:无
*)
(**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if REAL_GroupSet<>REAL_GroupSetP then
REAL_OUT[01]:=REAL_GroupSet;
REAL_OUT[02]:=REAL_GroupSet;
REAL_OUT[03]:=REAL_GroupSet;
REAL_OUT[04]:=REAL_GroupSet;
REAL_OUT[05]:=REAL_GroupSet;
REAL_OUT[06]:=REAL_GroupSet;
REAL_OUT[07]:=REAL_GroupSet;
REAL_OUT[08]:=REAL_GroupSet;
REAL_OUT[09]:=REAL_GroupSet;
REAL_OUT[10]:=REAL_GroupSet;
REAL_OUT[11]:=REAL_GroupSet;
REAL_OUT[12]:=REAL_GroupSet;
REAL_OUT[13]:=REAL_GroupSet;
REAL_OUT[14]:=REAL_GroupSet;
REAL_OUT[15]:=REAL_GroupSet;
REAL_OUT[16]:=REAL_GroupSet;
REAL_OUT[17]:=REAL_GroupSet;
REAL_OUT[18]:=REAL_GroupSet;
REAL_OUT[19]:=REAL_GroupSet;
REAL_OUT[20]:=REAL_GroupSet;
REAL_OUT[21]:=REAL_GroupSet;
REAL_OUT[22]:=REAL_GroupSet;
REAL_OUT[23]:=REAL_GroupSet;
REAL_OUT[24]:=REAL_GroupSet;
REAL_OUT[25]:=REAL_GroupSet;
REAL_OUT[26]:=REAL_GroupSet;
REAL_OUT[27]:=REAL_GroupSet;
REAL_OUT[28]:=REAL_GroupSet;
REAL_OUT[29]:=REAL_GroupSet;
REAL_OUT[30]:=REAL_GroupSet;
REAL_OUT[31]:=REAL_GroupSet;
REAL_OUT[32]:=REAL_GroupSet;
REAL_OUT[33]:=REAL_GroupSet;
REAL_OUT[34]:=REAL_GroupSet;
REAL_OUT[35]:=REAL_GroupSet;
REAL_OUT[36]:=REAL_GroupSet;
REAL_OUT[37]:=REAL_GroupSet;
REAL_OUT[38]:=REAL_GroupSet;
REAL_OUT[39]:=REAL_GroupSet;
REAL_OUT[40]:=REAL_GroupSet;
REAL_OUT[41]:=REAL_GroupSet;
REAL_OUT[42]:=REAL_GroupSet;
REAL_OUT[43]:=REAL_GroupSet;
REAL_OUT[44]:=REAL_GroupSet;
REAL_OUT[45]:=REAL_GroupSet;
REAL_OUT[46]:=REAL_GroupSet;
REAL_OUT[47]:=REAL_GroupSet;
REAL_OUT[48]:=REAL_GroupSet;
REAL_OUT[49]:=REAL_GroupSet;
REAL_OUT[50]:=REAL_GroupSet;
end_if;
(**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if BOOL_GroupSet<>BOOL_GroupSetP then
BOOL_OUT[01]:=BOOL_GroupSet;
BOOL_OUT[02]:=BOOL_GroupSet;
BOOL_OUT[03]:=BOOL_GroupSet;
BOOL_OUT[04]:=BOOL_GroupSet;
BOOL_OUT[05]:=BOOL_GroupSet;
BOOL_OUT[06]:=BOOL_GroupSet;
BOOL_OUT[07]:=BOOL_GroupSet;
BOOL_OUT[08]:=BOOL_GroupSet;
BOOL_OUT[09]:=BOOL_GroupSet;
BOOL_OUT[10]:=BOOL_GroupSet;
BOOL_OUT[11]:=BOOL_GroupSet;
BOOL_OUT[12]:=BOOL_GroupSet;
BOOL_OUT[13]:=BOOL_GroupSet;
BOOL_OUT[14]:=BOOL_GroupSet;
BOOL_OUT[15]:=BOOL_GroupSet;
BOOL_OUT[16]:=BOOL_GroupSet;
BOOL_OUT[17]:=BOOL_GroupSet;
BOOL_OUT[18]:=BOOL_GroupSet;
BOOL_OUT[19]:=BOOL_GroupSet;
BOOL_OUT[20]:=BOOL_GroupSet;
BOOL_OUT[21]:=BOOL_GroupSet;
BOOL_OUT[22]:=BOOL_GroupSet;
BOOL_OUT[23]:=BOOL_GroupSet;
BOOL_OUT[24]:=BOOL_GroupSet;
BOOL_OUT[25]:=BOOL_GroupSet;
BOOL_OUT[26]:=BOOL_GroupSet;
BOOL_OUT[27]:=BOOL_GroupSet;
BOOL_OUT[28]:=BOOL_GroupSet;
BOOL_OUT[29]:=BOOL_GroupSet;
BOOL_OUT[30]:=BOOL_GroupSet;
BOOL_OUT[31]:=BOOL_GroupSet;
BOOL_OUT[32]:=BOOL_GroupSet;
BOOL_OUT[33]:=BOOL_GroupSet;
BOOL_OUT[34]:=BOOL_GroupSet;
BOOL_OUT[35]:=BOOL_GroupSet;
BOOL_OUT[36]:=BOOL_GroupSet;
BOOL_OUT[37]:=BOOL_GroupSet;
BOOL_OUT[38]:=BOOL_GroupSet;
BOOL_OUT[39]:=BOOL_GroupSet;
BOOL_OUT[40]:=BOOL_GroupSet;
BOOL_OUT[41]:=BOOL_GroupSet;
BOOL_OUT[42]:=BOOL_GroupSet;
BOOL_OUT[43]:=BOOL_GroupSet;
BOOL_OUT[44]:=BOOL_GroupSet;
BOOL_OUT[45]:=BOOL_GroupSet;
BOOL_OUT[46]:=BOOL_GroupSet;
BOOL_OUT[47]:=BOOL_GroupSet;
BOOL_OUT[48]:=BOOL_GroupSet;
BOOL_OUT[49]:=BOOL_GroupSet;
BOOL_OUT[50]:=BOOL_GroupSet;
end_if;
(**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************)
if INT_GroupSet<>INT_GroupSetP then
INT_OUT[01]:=INT_GroupSet;
INT_OUT[02]:=INT_GroupSet;
INT_OUT[03]:=INT_GroupSet;
INT_OUT[04]:=INT_GroupSet;
INT_OUT[05]:=INT_GroupSet;
INT_OUT[06]:=INT_GroupSet;
INT_OUT[07]:=INT_GroupSet;
INT_OUT[08]:=INT_GroupSet;
INT_OUT[09]:=INT_GroupSet;
INT_OUT[10]:=INT_GroupSet;
INT_OUT[11]:=INT_GroupSet;
INT_OUT[12]:=INT_GroupSet;
INT_OUT[13]:=INT_GroupSet;
INT_OUT[14]:=INT_GroupSet;
INT_OUT[15]:=INT_GroupSet;
INT_OUT[16]:=INT_GroupSet;
INT_OUT[17]:=INT_GroupSet;
INT_OUT[18]:=INT_GroupSet;
INT_OUT[19]:=INT_GroupSet;
INT_OUT[20]:=INT_GroupSet;
INT_OUT[21]:=INT_GroupSet;
INT_OUT[22]:=INT_GroupSet;
INT_OUT[23]:=INT_GroupSet;
INT_OUT[24]:=INT_GroupSet;
INT_OUT[25]:=INT_GroupSet;
INT_OUT[26]:=INT_GroupSet;
INT_OUT[27]:=INT_GroupSet;
INT_OUT[28]:=INT_GroupSet;
INT_OUT[29]:=INT_GroupSet;
INT_OUT[30]:=INT_GroupSet;
INT_OUT[31]:=INT_GroupSet;
INT_OUT[32]:=INT_GroupSet;
INT_OUT[33]:=INT_GroupSet;
INT_OUT[34]:=INT_GroupSet;
INT_OUT[35]:=INT_GroupSet;
INT_OUT[36]:=INT_GroupSet;
INT_OUT[37]:=INT_GroupSet;
INT_OUT[38]:=INT_GroupSet;
INT_OUT[39]:=INT_GroupSet;
INT_OUT[40]:=INT_GroupSet;
INT_OUT[41]:=INT_GroupSet;
INT_OUT[42]:=INT_GroupSet;
INT_OUT[43]:=INT_GroupSet;
INT_OUT[44]:=INT_GroupSet;
INT_OUT[45]:=INT_GroupSet;
INT_OUT[46]:=INT_GroupSet;
INT_OUT[47]:=INT_GroupSet;
INT_OUT[48]:=INT_GroupSet;
INT_OUT[49]:=INT_GroupSet;
INT_OUT[50]:=INT_GroupSet;
end_if;
case lock of
(*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*)
0:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
1:
INT_GroupSetP:=INT_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
2:
BOOL_GroupSetP:=BOOL_GroupSet;
REAL_GroupSetP:=REAL_GroupSet;
3:
BOOL_GroupSetP:=BOOL_GroupSet;
INT_GroupSetP:=INT_GroupSet;
end_case;
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_GroupVavle50.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_GroupVavle50
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

1662
BRCON_MCFB_IU_v3.3.0/BS_MODBUSCOM.POE

File diff suppressed because it is too large

442
BRCON_MCFB_IU_v3.3.0/BS_ModbusCom.ST

@ -0,0 +1,442 @@
FUNCTION_BLOCK BS_ModbusCom
VAR_EXTERNAL
END_VAR
VAR_INPUT
SerialCom : byte;
NetSend : array[0..64] of NetSendConfig;
NetSendDelay : time;
ComSend : array[0..64] of ComSendConfig;
ComSendDelay : time; (*系统默认t#200ms*)
ComRecvDelay : time; (*系统默认t#120ms*)
ComAnalysisDelay: time; (*系统默认t#150ms*)
DataReadLength : int;
END_VAR
VAR_OUTPUT
DataStr : array[0..128] of byte;
DataRead : array[0..128] of DataFormat;
END_VAR
VAR
SendFB : NW_SerSend;
RecvFB : NW_SerRecv;
SendP : pointer;
RecvP : pointer;
Send_act : bool;
Recv_act : bool;
i,j,k : int;
i0,i1,i2,i3 : int;
CRC16Lo1 : Byte;
CRC16Hi1 : Byte;
CRC16Lo : Byte;
CRC16Hi : Byte;
CL,CH : Byte;
SaveHi,SaveLo : Byte;
Flag : int;
ENO_Count0 : dword;
ENO_Count1 : dword;
timer1 : ton;
timer1_run : bool;
NetVarSend1 : NetVarSend;
t1 : ton;
t1_in : bool;
t1_q : bool;
t2 : ton;
t2_in : bool;
t2_q : bool;
t3 : ton;
t3_in : bool;
t3_q : bool;
Commandsend : int;
SendStr : array[0..8] of byte;
RecvStr : array[0..200] of byte;
CalcStr : array[0..200] of byte;
ErrStr : array[0..100] of int;
Recv_len : int;
Recv_lenp : int;
Recv_DataLen : int;
Recv_CRCLo : int;
Recv_CRCHi : int;
TestMode : bool;
StopMem : int;
ComTimeoutCount : int;
ComTimeoutClear : bool;
checkmark1 : bool;
checkmark2 : bool;
checkmark3 : bool;
checkmark4 : bool;
DATA1 : int;
DATA2 : int;
TempStr : array[0..128] of byte;
TempReal : real;
v2v : NW_MemCopy;
P1 : Pointer;
P2 : Pointer;
END_VAR
(*
时 间:20200915
版 本:1.3
作 者:姚立
名 称:通讯功能块
说 明:
支持Modbus协议的03/04命令的读取及解析
支持读取失败次数查询
支持读取失败数据清除或保留设置
支持Modbus协议的06命令的单个寄存器写入
进一步修正了通讯错位问题
input 输入说明
SerialCom : byte;
NetSend : array[0..64] of NetSendConfig;
NetSendDelay : time;
ComSend : array[0..64] of ComSendConfig;
ComSendDelay : time;
ComRecvDelay : time;
ComAnalysisDelay: time;
DataReadLength : int;
DataType : array[0..256] of int ;
output 输出说明
DataStr : array[0..256] of byte;
DataRead : array[0..256] of DataFormat;
config 读写设置
ComSend[1].Enable :=1; 读取启用1 禁用为0,测试为2,测试时,该码被跳过,但不中断;
ComSend[1].EquipAddr :=1; 设备站号0-255
ComSend[1].FunctionCode :=16#03; 功能码 目前支持 读取HR区16#03,读取AR区16#04 ,写入HR区,16#06
ComSend[1].StartAddr :=2504; Modscan测试地址
ComSend[1].Length :=12; 读取寄存器数量
ComSend[1].StartMem :=0; 存放入DataStr数组起始位置,一般为前一数据的起始地址+前一数据读取寄存器长度*2
ComSend[1].WriteDataH1 :=0; 写入数据的高位,读取时不需要输入
ComSend[1].WriteDataL1 :=WriteTestW; 写入数据的低位,读取时不需要输入
read 读取数据
DataType[00]:=1; 数据类型设置 1 int 2 float 3 byte 0 任意,数据多时不建议为0
DATA:=DataRead[00].TO_BYTE; 分别对应 DataType 3
DATA:=DataRead[00].TO_REAL; 分别对应 DataType 2
DATA:=DataRead[00].TO_INT; 分别对应 DataType 1
备 注:
目前为示例程序,暂未完成封装,测试程序需两台EXC5000C3版本以上CPU,本程序下载CPU配置COM口为自由口,另一CPU配置COM口为Modbus
配套示例读取程序为表具仿真程序MeterSim
依赖块:无
*)
(**********************************************通讯配置**********************************************)
(*
以下延迟时间关系为基于EXC1000COM口485读取,测试速度为9600BPS所得
若简短和延长,需同步调整,比例关系参考目前关系
延迟时间和总线波特率,被访问设备响应速度有关,需根据实际情况调整
*)
(********************************************串口通讯发送********************************************)
t1_in:=not t1.q;
t1(IN :=t1_in , PT :=ComSendDelay );
t2(IN :=t1_in , PT :=ComRecvDelay );
t3(IN :=t1_in , PT :=ComAnalysisDelay );
if t1.q=0 and t1_q=1 then
Send_act:=1;
else
Send_act:=0;
end_if;
if t2.q=1 then
Recv_act:=1;
else
Recv_act:=0;
end_if;
if ComSend[1].Enable=1 then (*序列首位有配置的话开始执行发送命令*)
if Send_act=1 then
if TestMode=0 then
Commandsend:=Commandsend + 1;
end_if;
end_if;
if ComSend[Commandsend].Enable=0 then (*执行到非启用位结束*)
Commandsend:=0;
end_if;
if ComSend[Commandsend].Enable=1 then
(*读取命令*)
if ComSend[Commandsend].FunctionCode = 16#03 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=0;(*长度高位*)
SendStr[5]:=ComSend[Commandsend].Length;(*长度低位*)
end_if;
(*读取命令*)
if ComSend[Commandsend].FunctionCode = 16#04 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=0;(*长度高位*)
SendStr[5]:=ComSend[Commandsend].Length;(*长度低位*)
end_if;
(*写入命令*)
if ComSend[Commandsend].FunctionCode = 16#06 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=ComSend[Commandsend].WriteDataH1;
SendStr[5]:=ComSend[Commandsend].WriteDataL1;
end_if;
end_if;
if ComSend[Commandsend].Enable=2 then
SendStr[0]:= 16#00 ;
SendStr[1]:= 16#00 ;
SendStr[2]:= 16#00 ;
SendStr[3]:= 16#00 ;
SendStr[4]:= 16#00 ;
SendStr[5]:= 16#00 ;
end_if;
(*CRC校验*)
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
for i := 0 To 5 by 1 do
CRC16Lo := CRC16Lo xor SendStr[i];
for Flag := 0 to 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
if ((SaveHi and 1) = 1) then
CRC16Lo := CRC16Lo Or 128;
end_If;
If ((SaveLo and 1) = 1) then
CRC16Hi := CRC16Hi xor CH;
CRC16Lo := CRC16Lo xor CL;
end_if;
end_for;
end_for;
SendStr[6]:=CRC16Lo;
SendStr[7]:=CRC16Hi;
end_if;
if t3.q=1 then
(*接收数据处理*)
if Recv_len>=6 then(*有返回*)
Recv_lenp :=Recv_len-3;(*去掉校验位-2,0开始-1*)
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
for i := 0 To Recv_lenp by 1 do
CRC16Lo := CRC16Lo xor RecvStr[i];
for Flag := 0 to 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
if ((SaveHi and 1) = 1) then
CRC16Lo := CRC16Lo Or 128;
end_If;
If ((SaveLo and 1) = 1) then
CRC16Hi := CRC16Hi xor CH;
CRC16Lo := CRC16Lo xor CL;
end_if;
end_for;
end_for;
CRC16Hi1:=CRC16Hi;
CRC16Lo1:=CRC16Lo;
Recv_CRCLo:=Recv_lenp+1;
Recv_CRCHi:=Recv_lenp+2;
(*
funtionCode03
Tx 设备地址 03 起始地址高位 起始地址地位 寄存器数量高位 寄存器数量低位 CRCH CRCL
Rx 设备地址 03 字节数 寄存器1高位 寄存器1低位... CRCH CRCL
Recv_DataLen =(RecvStr[2])-1 是因为数据长度=“字节数”(字节数刚好是RecvStr[2])-1(i从0开始,所以-1)
j = i+3 是因为数据位是从第3位之后开始的
funtionCode06
Tx 设备地址 06 起始地址高位 起始地址地位 寄存器值高位 寄存器值低位 CRCH CRCL
Rx 设备地址 06 起始地址高位 起始地址地位 寄存器值高位 寄存器值低位 CRCH CRCL
Recv_DataLen =(RecvStr[2])-1 是因为数据长度=2(单个寄存器读取只有2位)-1(i从0开始,所以-1)
j = i+4 是因为数据位是从第4位之后开始的
*)
if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then
Recv_DataLen:=byte_to_int(RecvStr[2])-1;
end_if;
if ComSend[Commandsend].FunctionCode = 16#06 then
Recv_DataLen:=1;
end_if;
if Commandsend<>0 then
if RecvStr[Recv_CRCLo]=CRC16Lo and RecvStr[Recv_CRCHi]=CRC16Hi then(*校验正确*)
for i:=0 to Recv_DataLen by 1 do
if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then
j:=i+3;
end_if;
if ComSend[Commandsend].FunctionCode = 16#06 then
j:=i+4;
end_if;
if (SendStr[2]=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256)) and (SendStr[3]=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256) )and (SendStr[1]=ComSend[Commandsend].FunctionCode) then(*功能码*)
CalcStr[i]:=RecvStr[j];
k:=ComSend[Commandsend].StartMem+i;
DataStr[k]:=CalcStr[i];
end_if;
end_for;
ErrStr[commandsend]:=0;
else
(*错误累计*)
ErrStr[Commandsend]:=ErrStr[Commandsend]+1;
if ErrStr[Commandsend]>999 then
ErrStr[Commandsend]:=999;
end_if;
end_if;
end_if;
(*清空接收*)
for i:=0 to 200 by 1 do
RecvStr[i]:=0;
CalcStr[i]:=0;
end_for;
(*错误返回累计超时,清空内容*)
if ErrStr[Commandsend]>ComTimeoutCount and ComTimeoutClear=1 then
StopMem:=ComSend[Commandsend].StartMem+byte_to_int(ComSend[Commandsend].Length);
for i:=ComSend[Commandsend].StartMem to StopMem by 1 do
DataStr[i]:=0;
end_for;
end_if;
end_if;
end_if;
SendP:=&SendStr;
RecvP:=&RecvStr;
SendFB(EN :=Send_act , COM :=SerialCom , DATA :=SendP , LENGTH :=8 , IQM :=0 );
RecvFB(EN :=Recv_act , COM :=SerialCom , DATA :=RecvP , IQM :=0 | Recv_len:= LENGTH);
t1_q:=t1.q;
t2_q:=t2.q;
t3_q:=t3.q;
(********************************************数据处理********************************************)
for i := 0 To DataReadLength by 1 do
(* Type 为0时全读*)
i0:=i;
i1:=i+1;
i2:=i+2;
i3:=i+3;
(* 1 int *)
DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
(* 2 Float *)
TempStr[0]:=DataStr[i1];
TempStr[1]:=DataStr[i0];
TempStr[2]:=DataStr[i3];
TempStr[3]:=DataStr[i2];
P1:=&TempStr;
P2:=&TempReal;
v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 );
DataRead[i].TO_REAL:=TempReal;
(* 3 byte *)
DataRead[i].TO_BYTE:=1;
end_for;
(* 此段解析方式上后会导致错位,有时间时测试原因
for i := 0 To DataReadLength by 1 do
if DataType[i]=1 or DataType[i]=0 then
i0:=i;
i1:=i+1;
DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
end_if;
if DataType[i]=2 or DataType[i]=0 then
i0:=i;
i1:=i+1;
i2:=i+2;
i3:=i+3;
TempStr[0]:=DataStr[i1];
TempStr[1]:=DataStr[i0];
TempStr[2]:=DataStr[i3];
TempStr[3]:=DataStr[i2];
P1:=&TempStr;
P2:=&TempReal;
v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 );
DataRead[i].TO_REAL:=TempReal;
end_if;
if DataType[i]=3 or DataType[i]=0 then
i0:=i;
DataRead[i].TO_BYTE:=DataStr[i];
end_if;
4 BCD
if DataType[i]=4 or DataType[i]=0 then
i0:=i;
i1:=i+1;
k1:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
DataRead[i].TO_BCD01:=int_to_bool( k1 Mod 2#0000000000000001 );
DataRead[i].TO_BCD02:=int_to_bool( k1 Mod 2#0000000000000010 );
DataRead[i].TO_BCD03:=int_to_bool( k1 Mod 2#0000000000000100 );
DataRead[i].TO_BCD04:=int_to_bool( k1 Mod 2#0000000000001000 );
DataRead[i].TO_BCD05:=int_to_bool( k1 Mod 2#0000000000010000 );
DataRead[i].TO_BCD06:=int_to_bool( k1 Mod 2#0000000000100000 );
DataRead[i].TO_BCD07:=int_to_bool( k1 Mod 2#0000000001000000 );
DataRead[i].TO_BCD08:=int_to_bool( k1 Mod 2#0000000010000000 );
DataRead[i].TO_BCD09:=int_to_bool( k1 Mod 2#0000000100000000 );
DataRead[i].TO_BCD10:=int_to_bool( k1 Mod 2#0000001000000000 );
DataRead[i].TO_BCD11:=int_to_bool( k1 Mod 2#0000010000000000 );
DataRead[i].TO_BCD12:=int_to_bool( k1 Mod 2#0000100000000000 );
DataRead[i].TO_BCD13:=int_to_bool( k1 Mod 2#0001000000000000 );
DataRead[i].TO_BCD14:=int_to_bool( k1 Mod 2#0010000000000000 );
DataRead[i].TO_BCD15:=int_to_bool( k1 Mod 2#0100000000000000 );
DataRead[i].TO_BCD16:=int_to_bool( k1 Mod 2#1000000000000000 );
end_if;
*)
END_FUNCTION_BLOCK

442
BRCON_MCFB_IU_v3.3.0/BS_ModbusCom.bak

@ -0,0 +1,442 @@
FUNCTION_BLOCK BS_ModbusCom
VAR_EXTERNAL
END_VAR
VAR_INPUT
SerialCom : byte;
NetSend : array[0..64] of NetSendConfig;
NetSendDelay : time;
ComSend : array[0..64] of ComSendConfig;
ComSendDelay : time; (*系统默认t#200ms*)
ComRecvDelay : time; (*系统默认t#120ms*)
ComAnalysisDelay: time; (*系统默认t#150ms*)
DataReadLength : int;
END_VAR
VAR_OUTPUT
DataStr : array[0..128] of byte;
DataRead : array[0..128] of DataFormat;
END_VAR
VAR
SendFB : NW_SerSend;
RecvFB : NW_SerRecv;
SendP : pointer;
RecvP : pointer;
Send_act : bool;
Recv_act : bool;
i,j,k : int;
i0,i1,i2,i3 : int;
CRC16Lo1 : Byte;
CRC16Hi1 : Byte;
CRC16Lo : Byte;
CRC16Hi : Byte;
CL,CH : Byte;
SaveHi,SaveLo : Byte;
Flag : int;
ENO_Count0 : dword;
ENO_Count1 : dword;
timer1 : ton;
timer1_run : bool;
NetVarSend1 : NetVarSend;
t1 : ton;
t1_in : bool;
t1_q : bool;
t2 : ton;
t2_in : bool;
t2_q : bool;
t3 : ton;
t3_in : bool;
t3_q : bool;
Commandsend : int;
SendStr : array[0..8] of byte;
RecvStr : array[0..200] of byte;
CalcStr : array[0..200] of byte;
ErrStr : array[0..100] of int;
Recv_len : int;
Recv_lenp : int;
Recv_DataLen : int;
Recv_CRCLo : int;
Recv_CRCHi : int;
TestMode : bool;
StopMem : int;
ComTimeoutCount : int;
ComTimeoutClear : bool;
checkmark1 : bool;
checkmark2 : bool;
checkmark3 : bool;
checkmark4 : bool;
DATA1 : int;
DATA2 : int;
TempStr : array[0..128] of byte;
TempReal : real;
v2v : NW_MemCopy;
P1 : Pointer;
P2 : Pointer;
END_VAR
(*
时 间:20200915
版 本:1.3
作 者:姚立
名 称:通讯功能块
说 明:
支持Modbus协议的03/04命令的读取及解析
支持读取失败次数查询
支持读取失败数据清除或保留设置
支持Modbus协议的06命令的单个寄存器写入
进一步修正了通讯错位问题
input 输入说明
SerialCom : byte;
NetSend : array[0..64] of NetSendConfig;
NetSendDelay : time;
ComSend : array[0..64] of ComSendConfig;
ComSendDelay : time;
ComRecvDelay : time;
ComAnalysisDelay: time;
DataReadLength : int;
DataType : array[0..256] of int ;
output 输出说明
DataStr : array[0..256] of byte;
DataRead : array[0..256] of DataFormat;
config 读写设置
ComSend[1].Enable :=1; 读取启用1 禁用为0,测试为2,测试时,该码被跳过,但不中断;
ComSend[1].EquipAddr :=1; 设备站号0-255
ComSend[1].FunctionCode :=16#03; 功能码 目前支持 读取HR区16#03,读取AR区16#04 ,写入HR区,16#06
ComSend[1].StartAddr :=2504; Modscan测试地址
ComSend[1].Length :=12; 读取寄存器数量
ComSend[1].StartMem :=0; 存放入DataStr数组起始位置,一般为前一数据的起始地址+前一数据读取寄存器长度*2
ComSend[1].WriteDataH1 :=0; 写入数据的高位,读取时不需要输入
ComSend[1].WriteDataL1 :=WriteTestW; 写入数据的低位,读取时不需要输入
read 读取数据
DataType[00]:=1; 数据类型设置 1 int 2 float 3 byte 0 任意,数据多时不建议为0
DATA:=DataRead[00].TO_BYTE; 分别对应 DataType 3
DATA:=DataRead[00].TO_REAL; 分别对应 DataType 2
DATA:=DataRead[00].TO_INT; 分别对应 DataType 1
备 注:
目前为示例程序,暂未完成封装,测试程序需两台EXC5000C3版本以上CPU,本程序下载CPU配置COM口为自由口,另一CPU配置COM口为Modbus
配套示例读取程序为表具仿真程序MeterSim
依赖块:无
*)
(**********************************************通讯配置**********************************************)
(*
以下延迟时间关系为基于EXC1000COM口485读取,测试速度为9600BPS所得
若简短和延长,需同步调整,比例关系参考目前关系
延迟时间和总线波特率,被访问设备响应速度有关,需根据实际情况调整
*)
(********************************************串口通讯发送********************************************)
t1_in:=not t1.q;
t1(IN :=t1_in , PT :=ComSendDelay );
t2(IN :=t1_in , PT :=ComRecvDelay );
t3(IN :=t1_in , PT :=ComAnalysisDelay );
if t1.q=0 and t1_q=1 then
Send_act:=1;
else
Send_act:=0;
end_if;
if t2.q=1 then
Recv_act:=1;
else
Recv_act:=0;
end_if;
if ComSend[1].Enable=1 then (*序列首位有配置的话开始执行发送命令*)
if Send_act=1 then
if TestMode=0 then
Commandsend:=Commandsend + 1;
end_if;
end_if;
if ComSend[Commandsend].Enable=0 then (*执行到非启用位结束*)
Commandsend:=0;
end_if;
if ComSend[Commandsend].Enable=1 then
(*读取命令*)
if ComSend[Commandsend].FunctionCode = 16#03 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=0;(*长度高位*)
SendStr[5]:=ComSend[Commandsend].Length;(*长度低位*)
end_if;
(*读取命令*)
if ComSend[Commandsend].FunctionCode = 16#04 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=0;(*长度高位*)
SendStr[5]:=ComSend[Commandsend].Length;(*长度低位*)
end_if;
(*写入命令*)
if ComSend[Commandsend].FunctionCode = 16#06 then
SendStr[0]:=ComSend[Commandsend].EquipAddr;(*地址*)
SendStr[1]:=ComSend[Commandsend].FunctionCode;(*功能码*)
SendStr[2]:=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256);(*起始地址高位*)
SendStr[3]:=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256);(*起始地址低位*)
SendStr[4]:=ComSend[Commandsend].WriteDataH1;
SendStr[5]:=ComSend[Commandsend].WriteDataL1;
end_if;
end_if;
if ComSend[Commandsend].Enable=2 then
SendStr[0]:= 16#00 ;
SendStr[1]:= 16#00 ;
SendStr[2]:= 16#00 ;
SendStr[3]:= 16#00 ;
SendStr[4]:= 16#00 ;
SendStr[5]:= 16#00 ;
end_if;
(*CRC校验*)
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
for i := 0 To 5 by 1 do
CRC16Lo := CRC16Lo xor SendStr[i];
for Flag := 0 to 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
if ((SaveHi and 1) = 1) then
CRC16Lo := CRC16Lo Or 128;
end_If;
If ((SaveLo and 1) = 1) then
CRC16Hi := CRC16Hi xor CH;
CRC16Lo := CRC16Lo xor CL;
end_if;
end_for;
end_for;
SendStr[6]:=CRC16Lo;
SendStr[7]:=CRC16Hi;
end_if;
if t3.q=1 then
(*接收数据处理*)
if Recv_len>=6 then(*有返回*)
Recv_lenp :=Recv_len-3;(*去掉校验位-2,0开始-1*)
CRC16Lo := 255;
CRC16Hi := 255;
CL := 1;
CH := 160;
for i := 0 To Recv_lenp by 1 do
CRC16Lo := CRC16Lo xor RecvStr[i];
for Flag := 0 to 7 by 1 do
SaveHi := CRC16Hi;
SaveLo := CRC16Lo;
CRC16Hi := shr(CRC16Hi,1);
CRC16Lo := shr(CRC16Lo,1);
if ((SaveHi and 1) = 1) then
CRC16Lo := CRC16Lo Or 128;
end_If;
If ((SaveLo and 1) = 1) then
CRC16Hi := CRC16Hi xor CH;
CRC16Lo := CRC16Lo xor CL;
end_if;
end_for;
end_for;
CRC16Hi1:=CRC16Hi;
CRC16Lo1:=CRC16Lo;
Recv_CRCLo:=Recv_lenp+1;
Recv_CRCHi:=Recv_lenp+2;
(*
funtionCode03
Tx 设备地址 03 起始地址高位 起始地址地位 寄存器数量高位 寄存器数量低位 CRCH CRCL
Rx 设备地址 03 字节数 寄存器1高位 寄存器1低位... CRCH CRCL
Recv_DataLen =(RecvStr[2])-1 是因为数据长度=“字节数”(字节数刚好是RecvStr[2])-1(i从0开始,所以-1)
j = i+3 是因为数据位是从第3位之后开始的
funtionCode06
Tx 设备地址 06 起始地址高位 起始地址地位 寄存器值高位 寄存器值低位 CRCH CRCL
Rx 设备地址 06 起始地址高位 起始地址地位 寄存器值高位 寄存器值低位 CRCH CRCL
Recv_DataLen =(RecvStr[2])-1 是因为数据长度=2(单个寄存器读取只有2位)-1(i从0开始,所以-1)
j = i+4 是因为数据位是从第4位之后开始的
*)
if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then
Recv_DataLen:=byte_to_int(RecvStr[2])-1;
end_if;
if ComSend[Commandsend].FunctionCode = 16#06 then
Recv_DataLen:=1;
end_if;
if Commandsend<>0 then
if RecvStr[Recv_CRCLo]=CRC16Lo and RecvStr[Recv_CRCHi]=CRC16Hi then(*校验正确*)
for i:=0 to Recv_DataLen by 1 do
if ComSend[Commandsend].FunctionCode = 16#03 or ComSend[Commandsend].FunctionCode = 16#04 then
j:=i+3;
end_if;
if ComSend[Commandsend].FunctionCode = 16#06 then
j:=i+4;
end_if;
if (SendStr[2]=int_to_byte((ComSend[Commandsend].StartAddr-1) / 256)) and (SendStr[3]=int_to_byte((ComSend[Commandsend].StartAddr-1) mod 256) )and (SendStr[1]=ComSend[Commandsend].FunctionCode) then(*功能码*)
CalcStr[i]:=RecvStr[j];
k:=ComSend[Commandsend].StartMem+i;
DataStr[k]:=CalcStr[i];
end_if;
end_for;
ErrStr[commandsend]:=0;
else
(*错误累计*)
ErrStr[Commandsend]:=ErrStr[Commandsend]+1;
if ErrStr[Commandsend]>999 then
ErrStr[Commandsend]:=999;
end_if;
end_if;
end_if;
(*清空接收*)
for i:=0 to 200 by 1 do
RecvStr[i]:=0;
CalcStr[i]:=0;
end_for;
(*错误返回累计超时,清空内容*)
if ErrStr[Commandsend]>ComTimeoutCount and ComTimeoutClear=1 then
StopMem:=ComSend[Commandsend].StartMem+byte_to_int(ComSend[Commandsend].Length);
for i:=ComSend[Commandsend].StartMem to StopMem by 1 do
DataStr[i]:=0;
end_for;
end_if;
end_if;
end_if;
SendP:=&SendStr;
RecvP:=&RecvStr;
SendFB(EN :=Send_act , COM :=SerialCom , DATA :=SendP , LENGTH :=8 , IQM :=0 );
RecvFB(EN :=Recv_act , COM :=SerialCom , DATA :=RecvP , IQM :=0 | Recv_len:= LENGTH);
t1_q:=t1.q;
t2_q:=t2.q;
t3_q:=t3.q;
(********************************************数据处理********************************************)
for i := 0 To DataReadLength by 1 do
(* Type 为0时全读*)
i0:=i;
i1:=i+1;
i2:=i+2;
i3:=i+3;
(* 1 int *)
DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
(* 2 Float *)
TempStr[0]:=DataStr[i1];
TempStr[1]:=DataStr[i0];
TempStr[2]:=DataStr[i3];
TempStr[3]:=DataStr[i2];
P1:=&TempStr;
P2:=&TempReal;
v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 );
DataRead[i].TO_REAL:=TempReal;
(* 3 byte *)
DataRead[i].TO_BYTE:=1;
end_for;
(* 此段解析方式上后会导致错位,有时间时测试原因
for i := 0 To DataReadLength by 1 do
if DataType[i]=1 or DataType[i]=0 then
i0:=i;
i1:=i+1;
DataRead[i].TO_INT:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
end_if;
if DataType[i]=2 or DataType[i]=0 then
i0:=i;
i1:=i+1;
i2:=i+2;
i3:=i+3;
TempStr[0]:=DataStr[i1];
TempStr[1]:=DataStr[i0];
TempStr[2]:=DataStr[i3];
TempStr[3]:=DataStr[i2];
P1:=&TempStr;
P2:=&TempReal;
v2v(DEST :=P2 , SRC :=P1 , LENGTH :=4 , IQM :=0 );
DataRead[i].TO_REAL:=TempReal;
end_if;
if DataType[i]=3 or DataType[i]=0 then
i0:=i;
DataRead[i].TO_BYTE:=DataStr[i];
end_if;
4 BCD
if DataType[i]=4 or DataType[i]=0 then
i0:=i;
i1:=i+1;
k1:=byte_to_int(DataStr[i0])*256+byte_to_int(DataStr[i1]);
DataRead[i].TO_BCD01:=int_to_bool( k1 Mod 2#0000000000000001 );
DataRead[i].TO_BCD02:=int_to_bool( k1 Mod 2#0000000000000010 );
DataRead[i].TO_BCD03:=int_to_bool( k1 Mod 2#0000000000000100 );
DataRead[i].TO_BCD04:=int_to_bool( k1 Mod 2#0000000000001000 );
DataRead[i].TO_BCD05:=int_to_bool( k1 Mod 2#0000000000010000 );
DataRead[i].TO_BCD06:=int_to_bool( k1 Mod 2#0000000000100000 );
DataRead[i].TO_BCD07:=int_to_bool( k1 Mod 2#0000000001000000 );
DataRead[i].TO_BCD08:=int_to_bool( k1 Mod 2#0000000010000000 );
DataRead[i].TO_BCD09:=int_to_bool( k1 Mod 2#0000000100000000 );
DataRead[i].TO_BCD10:=int_to_bool( k1 Mod 2#0000001000000000 );
DataRead[i].TO_BCD11:=int_to_bool( k1 Mod 2#0000010000000000 );
DataRead[i].TO_BCD12:=int_to_bool( k1 Mod 2#0000100000000000 );
DataRead[i].TO_BCD13:=int_to_bool( k1 Mod 2#0001000000000000 );
DataRead[i].TO_BCD14:=int_to_bool( k1 Mod 2#0010000000000000 );
DataRead[i].TO_BCD15:=int_to_bool( k1 Mod 2#0100000000000000 );
DataRead[i].TO_BCD16:=int_to_bool( k1 Mod 2#1000000000000000 );
end_if;
*)
END_FUNCTION_BLOCK

421
BRCON_MCFB_IU_v3.3.0/BS_PID.POE

@ -0,0 +1,421 @@
FUNCTION_BLOCK BS_PID
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID鍔熻兘鍧楀惎鐢� *)
STOP_D : BOOL ; (* 寰�垎鍚�仠 *)
STOP_I : BOOL ; (* 绉�垎鍚�仠 *)
SET : REAL ; (* PID璋冭妭鐩�爣鍊� *)
FB : REAL ; (* PID璋冭妭鐩�爣鍊肩殑鍙嶉�鍊� *)
Kfb : REAL:=1.0; (* 鍙嶉�鍙傛暟 *)
Kp : REAL:=30.0 ; (* 姣斾緥鍙傛暟 *)
Ti : REAL:=150.0 ; (* 绉�垎鍙傛暟 *)
Td : REAL ; (* 寰�垎鍙傛暟 *)
Dead_Band : REAL; (* 姝诲尯 *)
Ymax : REAL ; (* 鏈€澶ц緭鍑哄€� *)
Ymin : REAL ; (* 鏈€灏忚緭鍑哄€� *)
END_VAR
VAR_OUTPUT
OUT : REAL ; (* 绉�垎鏈€澶ц緭鍑哄€� *)
END_VAR
VAR
TIME1 : REAL ;
TIME2 : REAL ;
Y1 : REAL ;
Y2 : REAL ;
Y3 : REAL ;
CYCL : BOOL ;
START : BOOL ;
Delta : REAL ;
OUTP : REAL ;
OUTI : REAL ;
OUTD : REAL ;
I : DINT ;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20191006 **)
(** 版 本:1.1 **)
(** 作 者:姚立 **)
(** 名 称:PID程序 **)
(** 说 明:用于PID控制计算 **)
(** 备 注:修正了除0情况的报错发生 **)
(** 依赖块:无 **)
(** **)
(** *} **)
(** **)
(** IF RUN=TRUE AND kp<>0.0 AND Ti<>0.0 THEN **)
(* if - Cond *)
LD RUN
EQ TRUE
AND ( kp
NE 0.0
)
AND ( Ti
NE 0.0
)
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** IF (TIME2<>(DINT_TO_REAL(TIME_TO_DINT(GetTime(t#0ms))))) THEN **)
(* if - Cond *)
LD TIME2
NE ( t#0ms
GetTime
TIME_TO_DINT
DINT_TO_REAL
)
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** TIME1:=TIME2; **)
(* assign - Stmt *)
LD TIME2
ST TIME1
(** TIME2:=DINT_TO_REAL(TIME_TO_DINT(GetTime(t#0ms))); **)
(* assign - Stmt *)
LD t#0ms
GetTime
TIME_TO_DINT
DINT_TO_REAL
ST TIME2
(** Y1:=Y2; **)
(* assign - Stmt *)
LD Y2
ST Y1
(** Y2:=Y3; **)
(* assign - Stmt *)
LD Y3
ST Y2
(** Y3:=SET-(Kfb*FB); **)
(* assign - Stmt *)
LD SET
SUB ( Kfb
MUL FB
)
ST Y3
(** IF I>=2 AND DEAD_BAND<ABS(Y3) THEN{*死区*} **)
(* if - Cond *)
LD I
GE 2
AND ( DEAD_BAND
LT ( Y3
ABS
)
)
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** OUTP:=Y3*Kp; **)
(* assign - Stmt *)
LD Y3
MUL kp
ST OUTP
(** Delta:=(TIME2-TIME1)/1000.0; **)
(* assign - Stmt *)
LD TIME2
SUB TIME1
DIV 1000.0
ST Delta
(** IF STOP_I<>TRUE THEN **)
(* if - Cond *)
LD STOP_I
NE TRUE
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** OUTI:=OUTI+((Y2+Y3)*Delta/2.0)/Ti; **)
(* assign - Stmt *)
LD OUTI
ADD ( Y2
ADD Y3
MUL Delta
DIV 2.0
DIV Ti
)
ST OUTI
(** IF OUTI>Ymax THEN{*防止积分过大*} **)
(* if - Cond *)
LD OUTI
GT Ymax
JMPCN ODK_SKIP_000000000000005_000000000000001
(* then - Stmts *)
(** OUTI:=Ymax; **)
(* assign - Stmt *)
LD Ymax
ST OUTI
JMP ODK_END_IF_000000000000005
(** ELSIF OUTI<(0.0-Ymax) THEN **)
(* elseif - Cond *)
ODK_SKIP_000000000000005_000000000000001:
LD OUTI
LT ( 0.0
SUB Ymax
)
JMPCN ODK_SKIP_000000000000005_000000000000002
(* elsif - Stmts *)
(** OUTI:=(0.0-Ymax); **)
(* assign - Stmt *)
LD 0.0
SUB Ymax
ST OUTI
JMP ODK_END_IF_000000000000005
(** END_IF; **)
(* if - End *)
ODK_SKIP_000000000000005_000000000000002:
ODK_END_IF_000000000000005:
JMP ODK_END_IF_000000000000004
(** END_IF; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
(** IF STOP_D<>TRUE THEN **)
(* if - Cond *)
LD STOP_D
NE TRUE
JMPCN ODK_SKIP_000000000000006_000000000000001
(* then - Stmts *)
(** OUTD:=Td*(0.5*Y1-2.0*Y2+1.5*Y3)/Delta; **)
(* assign - Stmt *)
LD Td
MUL ( 0.5
MUL Y1
SUB ( 2.0
MUL Y2
)
ADD ( 1.5
MUL Y3
)
)
DIV Delta
ST OUTD
JMP ODK_END_IF_000000000000006
(** END_IF; **)
(* if - End *)
ODK_SKIP_000000000000006_000000000000001:
ODK_END_IF_000000000000006:
JMP ODK_END_IF_000000000000003
(** ELSE **)
(* else *)
ODK_SKIP_000000000000003_000000000000001:
(* else - Stmts *)
(** I:=I+1; **)
(* assign - Stmt *)
LD I
ADD 1
ST I
(** END_IF; **)
(* if - End *)
ODK_END_IF_000000000000003:
JMP ODK_END_IF_000000000000002
(** END_IF; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(** {* Adder *} **)
(** IF OUTP+OUTI+OUTD>Ymax THEN **)
(* if - Cond *)
LD OUTP
ADD OUTI
ADD OUTD
GT Ymax
JMPCN ODK_SKIP_000000000000007_000000000000001
(* then - Stmts *)
(** OUT:=Ymax; **)
(* assign - Stmt *)
LD Ymax
ST OUT
JMP ODK_END_IF_000000000000007
(** ELSIF OUTP+OUTI+OUTD<Ymin THEN **)
(* elseif - Cond *)
ODK_SKIP_000000000000007_000000000000001:
LD OUTP
ADD OUTI
ADD OUTD
LT Ymin
JMPCN ODK_SKIP_000000000000007_000000000000002
(* elsif - Stmts *)
(** OUT:=Ymin; **)
(* assign - Stmt *)
LD Ymin
ST OUT
JMP ODK_END_IF_000000000000007
(** ELSE **)
(* else *)
ODK_SKIP_000000000000007_000000000000002:
(* else - Stmts *)
(** OUT:=OUTP+OUTI+OUTD; **)
(* assign - Stmt *)
LD OUTP
ADD OUTI
ADD OUTD
ST OUT
(** END_IF; **)
(* if - End *)
ODK_END_IF_000000000000007:
JMP ODK_END_IF_000000000000001
(** **)
(** ELSE **)
(* else *)
ODK_SKIP_000000000000001_000000000000001:
(* else - Stmts *)
(** TIME1:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST TIME1
(** TIME2:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST TIME2
(** Y1:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST Y1
(** Y2:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST Y2
(** Y3:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST Y3
(** CYCL:=FALSE; **)
(* assign - Stmt *)
LD FALSE
ST CYCL
(** START:=FALSE; **)
(* assign - Stmt *)
LD FALSE
ST START
(** Delta:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST Delta
(** OUTP:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST OUTP
(** OUTI:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST OUTI
(** OUTD:=0.0; **)
(* assign - Stmt *)
LD 0.0
ST OUTD
(** OUT :=0.0; **)
(* assign - Stmt *)
LD 0.0
ST OUT
(** I :=0; **)
(* assign - Stmt *)
LD 0
ST I
(** END_IF; **)
(* if - End *)
ODK_END_IF_000000000000001:
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
(** **)
END_FUNCTION_BLOCK

132
BRCON_MCFB_IU_v3.3.0/BS_PID.ST

@ -0,0 +1,132 @@
FUNCTION_BLOCK BS_PID
VAR_EXTERNAL
END_VAR
VAR_INPUT
RUN : BOOL ; (* PID功能块启用 *)
STOP_D : BOOL ; (* 微分启停 *)
STOP_I : BOOL ; (* 积分启停 *)
SET : REAL ; (* PID调节目标值 *)
FB : REAL ; (* PID调节目标值的反馈值 *)
Kfb : REAL:=1.0; (* 反馈参数 *)
Kp : REAL:=30.0 ; (* 比例参数 *)
Ti : REAL:=150.0 ; (* 积分参数 *)
Td : REAL ; (* 微分参数 *)
Dead_Band : REAL; (* 死区 *)
Ymax : REAL ; (* 最大输出值 *)
Ymin : REAL ; (* 最小输出值 *)
END_VAR
VAR_OUTPUT
OUT : REAL ; (* 积分最大输出值 *)
END_VAR
VAR
TIME1 : REAL ;
TIME2 : REAL ;
Y1 : REAL ;
Y2 : REAL ;
Y3 : REAL ;
CYCL : BOOL ;
START : BOOL ;
Delta : REAL ;
OUTP : REAL ;
OUTI : REAL ;
OUTD : REAL ;
I : DINT ;
END_VAR
(*
时 间:20191006
版 本:1.1
作 者:姚立
名 称:PID程序
说 明:用于PID控制计算
备 注:修正了除0情况的报错发生
依赖块:无
*)
IF RUN=TRUE AND kp<>0.0 AND Ti<>0.0 THEN
IF (TIME2<>(DINT_TO_REAL(TIME_TO_DINT(GetTime(t#0ms))))) THEN
TIME1:=TIME2;
TIME2:=DINT_TO_REAL(TIME_TO_DINT(GetTime(t#0ms)));
Y1:=Y2;
Y2:=Y3;
Y3:=SET-(Kfb*FB);
IF I>=2 AND DEAD_BAND<ABS(Y3) THEN(*死区*)
OUTP:=Y3*Kp;
Delta:=(TIME2-TIME1)/1000.0;
IF STOP_I<>TRUE THEN
OUTI:=OUTI+((Y2+Y3)*Delta/2.0)/Ti;
IF OUTI>Ymax THEN(*防止积分过大*)
OUTI:=Ymax;
ELSIF OUTI<(0.0-Ymax) THEN
OUTI:=(0.0-Ymax);
END_IF;
END_IF;
IF STOP_D<>TRUE THEN
OUTD:=Td*(0.5*Y1-2.0*Y2+1.5*Y3)/Delta;
END_IF;
ELSE
I:=I+1;
END_IF;
END_IF;
(* Adder *)
IF OUTP+OUTI+OUTD>Ymax THEN
OUT:=Ymax;
ELSIF OUTP+OUTI+OUTD<Ymin THEN
OUT:=Ymin;
ELSE
OUT:=OUTP+OUTI+OUTD;
END_IF;
ELSE
TIME1:=0.0;
TIME2:=0.0;
Y1:=0.0;
Y2:=0.0;
Y3:=0.0;
CYCL:=FALSE;
START:=FALSE;
Delta:=0.0;
OUTP:=0.0;
OUTI:=0.0;
OUTD:=0.0;
OUT :=0.0;
I :=0;
END_IF;
END_FUNCTION_BLOCK

22
BRCON_MCFB_IU_v3.3.0/BS_PID.bak

@ -0,0 +1,22 @@
FUNCTION_BLOCK BS_PID
VAR_EXTERNAL
END_VAR
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
;
END_FUNCTION_BLOCK

1073
BRCON_MCFB_IU_v3.3.0/BS_REMOTEVAVLE.POE

File diff suppressed because it is too large

165
BRCON_MCFB_IU_v3.3.0/BS_RUNTIME.POE

@ -0,0 +1,165 @@
FUNCTION_BLOCK BS_RunTime
VAR_EXTERNAL
END_VAR
VAR_INPUT
Run :BOOL;
RunTimeSet :REAL;
RunTimeRST :BOOL;
RunTimeRec_In :REAL;
END_VAR
VAR_OUTPUT
RunTime :REAL;
END_VAR
VAR
Time_m :TON;
Time_RST :TON;
Cycle :BOOL;
Minute :REAL;
ini :BOOL;
Runtime_ini :REAL;
END_VAR
(*Automatically declared*)
VAR_EXTERNAL
END_VAR
(** {* **)
(** **)
(** 时 间:20190907 **)
(** 版 本:1.0 **)
(** 作 者:姚立 **)
(** 名 称:运行时间累计程序 **)
(** 说 明:运行时间累计程序,单位分钟,可通过重置按钮修改计数基础值 **)
(** 时 间:20220210 **)
(** 版 本:1.1 **)
(** 作 者:潘平 **)
(** 名 称:运行时间累计程序 **)
(** 说 明:增加断电数据写入值变量,以使断电前数据进行输入 **)
(** 备 注: **)
(** 依赖块: **)
(** **)
(** *} **)
(** {*初始化将断电前数据写入累计值*} **)
(** if ini=0 then **)
(* if - Cond *)
LD ini
EQ 0
JMPCN ODK_SKIP_000000000000001_000000000000001
(* then - Stmts *)
(** Runtime_ini:=RunTimeRec_In; **)
(* assign - Stmt *)
LD RunTimeRec_In
ST Runtime_ini
(** ini:=1; **)
(* assign - Stmt *)
LD 1
ST ini
JMP ODK_END_IF_000000000000001
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000001_000000000000001:
ODK_END_IF_000000000000001:
(** {*计时周期为分钟*} **)
(** if RunTimeRST=0 then **)
(* if - Cond *)
LD RunTimeRST
EQ 0
JMPCN ODK_SKIP_000000000000002_000000000000001
(* then - Stmts *)
(** time_m(in:=Cycle,pt:=t#60s); **)
(* call - Stmt *)
CAL time_m (
in := Cycle,
pt := t#60s
)
(** Cycle:= not Time_m.q; **)
(* assign - Stmt *)
LD time_m.q
NOT
ST Cycle
(** if Run then **)
(* if - Cond *)
LD Run
JMPCN ODK_SKIP_000000000000003_000000000000001
(* then - Stmts *)
(** if Time_m.q then **)
(* if - Cond *)
LD time_m.q
JMPCN ODK_SKIP_000000000000004_000000000000001
(* then - Stmts *)
(** Minute:=Minute+1.0; **)
(* assign - Stmt *)
LD Minute
ADD 1.0
ST Minute
JMP ODK_END_IF_000000000000004
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000004_000000000000001:
ODK_END_IF_000000000000004:
JMP ODK_END_IF_000000000000003
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000003_000000000000001:
ODK_END_IF_000000000000003:
(** Runtime:=Minute/60.0+Runtime_ini; **)
(* assign - Stmt *)
LD Minute
DIV 60.0
ADD Runtime_ini
ST Runtime
JMP ODK_END_IF_000000000000002
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000002_000000000000001:
ODK_END_IF_000000000000002:
(** {*重置按钮按下时,期间Minute的读值按RunTimeSet赋值*} **)
(** if RunTimeRST=1 then **)
(* if - Cond *)
LD RunTimeRST
EQ 1
JMPCN ODK_SKIP_000000000000005_000000000000001
(* then - Stmts *)
(** Minute:=RunTimeSet*60.0; **)
(* assign - Stmt *)
LD RunTimeSet
MUL 60.0
ST Minute
JMP ODK_END_IF_000000000000005
(** end_if; **)
(* if - End *)
ODK_SKIP_000000000000005_000000000000001:
ODK_END_IF_000000000000005:
END_FUNCTION_BLOCK

508
BRCON_MCFB_IU_v3.3.0/BS_RemoteVavle.ST

@ -0,0 +1,508 @@
FUNCTION_BLOCK BS_RemoteVavle
VAR_EXTERNAL
END_VAR
VAR_INPUT
REAL_RemoteSet:REAL;
REAL_IN01 :REAL;
REAL_IN02 :REAL;
REAL_IN03 :REAL;
REAL_IN04 :REAL;
REAL_IN05 :REAL;
REAL_IN06 :REAL;
REAL_IN07 :REAL;
REAL_IN08 :REAL;
REAL_IN09 :REAL;
REAL_IN10 :REAL;
REAL_IN11 :REAL;
REAL_IN12 :REAL;
REAL_IN13 :REAL;
REAL_IN14 :REAL;
REAL_IN15 :REAL;
REAL_IN16 :REAL;
REAL_IN17 :REAL;
REAL_IN18 :REAL;
REAL_IN19 :REAL;
REAL_IN20 :REAL;
REAL_IN21 :REAL;
REAL_IN22 :REAL;
REAL_IN23 :REAL;
REAL_IN24 :REAL;
REAL_IN25 :REAL;
REAL_IN26 :REAL;
REAL_IN27 :REAL;
REAL_IN28 :REAL;
REAL_IN29 :REAL;
REAL_IN30 :REAL;
REAL_IN31 :REAL;
REAL_IN32 :REAL;
REAL_IN33 :REAL;
REAL_IN34 :REAL;
REAL_IN35 :REAL;
REAL_IN36 :REAL;
REAL_IN37 :REAL;
REAL_IN38 :REAL;
REAL_IN39 :REAL;
REAL_IN40 :REAL;
REAL_IN41 :REAL;
REAL_IN42 :REAL;
REAL_IN43 :REAL;
REAL_IN44 :REAL;
REAL_IN45 :REAL;
REAL_IN46 :REAL;
REAL_IN47 :REAL;
REAL_IN48 :REAL;
REAL_IN49 :REAL;
REAL_IN50 :REAL;
BOOL_RemoteSet:BOOL;
BOOL_IN01 :BOOL;
BOOL_IN02 :BOOL;
BOOL_IN03 :BOOL;
BOOL_IN04 :BOOL;
BOOL_IN05 :BOOL;
BOOL_IN06 :BOOL;
BOOL_IN07 :BOOL;
BOOL_IN08 :BOOL;
BOOL_IN09 :BOOL;
BOOL_IN10 :BOOL;
BOOL_IN11 :BOOL;
BOOL_IN12 :BOOL;
BOOL_IN13 :BOOL;
BOOL_IN14 :BOOL;
BOOL_IN15 :BOOL;
BOOL_IN16 :BOOL;
BOOL_IN17 :BOOL;
BOOL_IN18 :BOOL;
BOOL_IN19 :BOOL;
BOOL_IN20 :BOOL;
BOOL_IN21 :BOOL;
BOOL_IN22 :BOOL;
BOOL_IN23 :BOOL;
BOOL_IN24 :BOOL;
BOOL_IN25 :BOOL;
BOOL_IN26 :BOOL;
BOOL_IN27 :BOOL;
BOOL_IN28 :BOOL;
BOOL_IN29 :BOOL;
BOOL_IN30 :BOOL;
BOOL_IN31 :BOOL;
BOOL_IN32 :BOOL;
BOOL_IN33 :BOOL;
BOOL_IN34 :BOOL;
BOOL_IN35 :BOOL;
BOOL_IN36 :BOOL;
BOOL_IN37 :BOOL;
BOOL_IN38 :BOOL;
BOOL_IN39 :BOOL;
BOOL_IN40 :BOOL;
BOOL_IN41 :BOOL;
BOOL_IN42 :BOOL;
BOOL_IN43 :BOOL;
BOOL_IN44 :BOOL;
BOOL_IN45 :BOOL;
BOOL_IN46 :BOOL;
BOOL_IN47 :BOOL;
BOOL_IN48 :BOOL;
BOOL_IN49 :BOOL;
BOOL_IN50 :BOOL;
INT_RemoteSet:INT;
INT_IN01 :INT;
INT_IN02 :INT;
INT_IN03 :INT;
INT_IN04 :INT;
INT_IN05 :INT;
INT_IN06 :INT;
INT_IN07 :INT;
INT_IN08 :INT;
INT_IN09 :INT;
INT_IN10 :INT;
INT_IN11 :INT;
INT_IN12 :INT;
INT_IN13 :INT;
INT_IN14 :INT;
INT_IN15 :INT;
INT_IN16 :INT;
INT_IN17 :INT;
INT_IN18 :INT;
INT_IN19 :INT;
INT_IN20 :INT;
INT_IN21 :INT;
INT_IN22 :INT;
INT_IN23 :INT;
INT_IN24 :INT;
INT_IN25 :INT;
INT_IN26 :INT;
INT_IN27 :INT;
INT_IN28 :INT;
INT_IN29 :INT;
INT_IN30 :INT;
INT_IN31 :INT;
INT_IN32 :INT;
INT_IN33 :INT;
INT_IN34 :INT;
INT_IN35 :INT;
INT_IN36 :INT;
INT_IN37 :INT;
INT_IN38 :INT;
INT_IN39 :INT;
INT_IN40 :INT;
INT_IN41 :INT;
INT_IN42 :INT;
INT_IN43 :INT;
INT_IN44 :INT;
INT_IN45 :INT;
INT_IN46 :INT;
INT_IN47 :INT;
INT_IN48 :INT;
INT_IN49 :INT;
INT_IN50 :INT;
END_VAR
VAR_OUTPUT
REAL_OUT01 :REAL;
REAL_OUT02 :REAL;
REAL_OUT03 :REAL;
REAL_OUT04 :REAL;
REAL_OUT05 :REAL;
REAL_OUT06 :REAL;
REAL_OUT07 :REAL;
REAL_OUT08 :REAL;
REAL_OUT09 :REAL;
REAL_OUT10 :REAL;
REAL_OUT11 :REAL;
REAL_OUT12 :REAL;
REAL_OUT13 :REAL;
REAL_OUT14 :REAL;
REAL_OUT15 :REAL;
REAL_OUT16 :REAL;
REAL_OUT17 :REAL;
REAL_OUT18 :REAL;
REAL_OUT19 :REAL;
REAL_OUT20 :REAL;
REAL_OUT21 :REAL;
REAL_OUT22 :REAL;
REAL_OUT23 :REAL;
REAL_OUT24 :REAL;
REAL_OUT25 :REAL;
REAL_OUT26 :REAL;
REAL_OUT27 :REAL;
REAL_OUT28 :REAL;
REAL_OUT29 :REAL;
REAL_OUT30 :REAL;
REAL_OUT31 :REAL;
REAL_OUT32 :REAL;
REAL_OUT33 :REAL;
REAL_OUT34 :REAL;
REAL_OUT35 :REAL;
REAL_OUT36 :REAL;
REAL_OUT37 :REAL;
REAL_OUT38 :REAL;
REAL_OUT39 :REAL;
REAL_OUT40 :REAL;
REAL_OUT41 :REAL;
REAL_OUT42 :REAL;
REAL_OUT43 :REAL;
REAL_OUT44 :REAL;
REAL_OUT45 :REAL;
REAL_OUT46 :REAL;
REAL_OUT47 :REAL;
REAL_OUT48 :REAL;
REAL_OUT49 :REAL;
REAL_OUT50 :REAL;
BOOL_OUT01 :BOOL;
BOOL_OUT02 :BOOL;
BOOL_OUT03 :BOOL;
BOOL_OUT04 :BOOL;
BOOL_OUT05 :BOOL;
BOOL_OUT06 :BOOL;
BOOL_OUT07 :BOOL;
BOOL_OUT08 :BOOL;
BOOL_OUT09 :BOOL;
BOOL_OUT10 :BOOL;
BOOL_OUT11 :BOOL;
BOOL_OUT12 :BOOL;
BOOL_OUT13 :BOOL;
BOOL_OUT14 :BOOL;
BOOL_OUT15 :BOOL;
BOOL_OUT16 :BOOL;
BOOL_OUT17 :BOOL;
BOOL_OUT18 :BOOL;
BOOL_OUT19 :BOOL;
BOOL_OUT20 :BOOL;
BOOL_OUT21 :BOOL;
BOOL_OUT22 :BOOL;
BOOL_OUT23 :BOOL;
BOOL_OUT24 :BOOL;
BOOL_OUT25 :BOOL;
BOOL_OUT26 :BOOL;
BOOL_OUT27 :BOOL;
BOOL_OUT28 :BOOL;
BOOL_OUT29 :BOOL;
BOOL_OUT30 :BOOL;
BOOL_OUT31 :BOOL;
BOOL_OUT32 :BOOL;
BOOL_OUT33 :BOOL;
BOOL_OUT34 :BOOL;
BOOL_OUT35 :BOOL;
BOOL_OUT36 :BOOL;
BOOL_OUT37 :BOOL;
BOOL_OUT38 :BOOL;
BOOL_OUT39 :BOOL;
BOOL_OUT40 :BOOL;
BOOL_OUT41 :BOOL;
BOOL_OUT42 :BOOL;
BOOL_OUT43 :BOOL;
BOOL_OUT44 :BOOL;
BOOL_OUT45 :BOOL;
BOOL_OUT46 :BOOL;
BOOL_OUT47 :BOOL;
BOOL_OUT48 :BOOL;
BOOL_OUT49 :BOOL;
BOOL_OUT50 :BOOL;
INT_OUT01 :INT;
INT_OUT02 :INT;
INT_OUT03 :INT;
INT_OUT04 :INT;
INT_OUT05 :INT;
INT_OUT06 :INT;
INT_OUT07 :INT;
INT_OUT08 :INT;
INT_OUT09 :INT;
INT_OUT10 :INT;
INT_OUT11 :INT;
INT_OUT12 :INT;
INT_OUT13 :INT;
INT_OUT14 :INT;
INT_OUT15 :INT;
INT_OUT16 :INT;
INT_OUT17 :INT;
INT_OUT18 :INT;
INT_OUT19 :INT;
INT_OUT20 :INT;
INT_OUT21 :INT;
INT_OUT22 :INT;
INT_OUT23 :INT;
INT_OUT24 :INT;
INT_OUT25 :INT;
INT_OUT26 :INT;
INT_OUT27 :INT;
INT_OUT28 :INT;
INT_OUT29 :INT;
INT_OUT30 :INT;
INT_OUT31 :INT;
INT_OUT32 :INT;
INT_OUT33 :INT;
INT_OUT34 :INT;
INT_OUT35 :INT;
INT_OUT36 :INT;
INT_OUT37 :INT;
INT_OUT38 :INT;
INT_OUT39 :INT;
INT_OUT40 :INT;
INT_OUT41 :INT;
INT_OUT42 :INT;
INT_OUT43 :INT;
INT_OUT44 :INT;
INT_OUT45 :INT;
INT_OUT46 :INT;
INT_OUT47 :INT;
INT_OUT48 :INT;
INT_OUT49 :INT;
INT_OUT50 :INT;
END_VAR
VAR
REAL_RemoteSetP :REAL;
BOOL_RemoteSetP :BOOL;
INT_RemoteSetP :INT;
END_VAR
(*
时 间:20191008
版 本:1.1
作 者:姚立
名 称:远程平台赋值程序
说 明:用于远程平台赋值,又不锁定本地变量输入
备 注:
依赖块:无
*)
(**********一个REAL型总变量对20个变量赋值,20个变量也可单独赋值*************)
if REAL_RemoteSet<>REAL_RemoteSetP then
REAL_OUT01:=REAL_RemoteSet;
REAL_OUT02:=REAL_RemoteSet;
REAL_OUT03:=REAL_RemoteSet;
REAL_OUT04:=REAL_RemoteSet;
REAL_OUT05:=REAL_RemoteSet;
REAL_OUT06:=REAL_RemoteSet;
REAL_OUT07:=REAL_RemoteSet;
REAL_OUT08:=REAL_RemoteSet;
REAL_OUT09:=REAL_RemoteSet;
REAL_OUT10:=REAL_RemoteSet;
REAL_OUT11:=REAL_RemoteSet;
REAL_OUT12:=REAL_RemoteSet;
REAL_OUT13:=REAL_RemoteSet;
REAL_OUT14:=REAL_RemoteSet;
REAL_OUT15:=REAL_RemoteSet;
REAL_OUT16:=REAL_RemoteSet;
REAL_OUT17:=REAL_RemoteSet;
REAL_OUT18:=REAL_RemoteSet;
REAL_OUT19:=REAL_RemoteSet;
REAL_OUT20:=REAL_RemoteSet;
REAL_RemoteSetP:=REAL_RemoteSet;
elsif REAL_RemoteSet=REAL_RemoteSetP then
REAL_OUT01:=REAL_IN01;
REAL_OUT02:=REAL_IN02;
REAL_OUT03:=REAL_IN03;
REAL_OUT04:=REAL_IN04;
REAL_OUT05:=REAL_IN05;
REAL_OUT06:=REAL_IN06;
REAL_OUT07:=REAL_IN07;
REAL_OUT08:=REAL_IN08;
REAL_OUT09:=REAL_IN09;
REAL_OUT10:=REAL_IN10;
REAL_OUT11:=REAL_IN11;
REAL_OUT12:=REAL_IN12;
REAL_OUT13:=REAL_IN13;
REAL_OUT14:=REAL_IN14;
REAL_OUT15:=REAL_IN15;
REAL_OUT16:=REAL_IN16;
REAL_OUT17:=REAL_IN17;
REAL_OUT18:=REAL_IN18;
REAL_OUT19:=REAL_IN19;
REAL_OUT20:=REAL_IN20;
end_if;
(**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************)
if BOOL_RemoteSet<>BOOL_RemoteSetP then
BOOL_OUT01:=BOOL_RemoteSet;
BOOL_OUT02:=BOOL_RemoteSet;
BOOL_OUT03:=BOOL_RemoteSet;
BOOL_OUT04:=BOOL_RemoteSet;
BOOL_OUT05:=BOOL_RemoteSet;
BOOL_OUT06:=BOOL_RemoteSet;
BOOL_OUT07:=BOOL_RemoteSet;
BOOL_OUT08:=BOOL_RemoteSet;
BOOL_OUT09:=BOOL_RemoteSet;
BOOL_OUT10:=BOOL_RemoteSet;
BOOL_OUT11:=BOOL_RemoteSet;
BOOL_OUT12:=BOOL_RemoteSet;
BOOL_OUT13:=BOOL_RemoteSet;
BOOL_OUT14:=BOOL_RemoteSet;
BOOL_OUT15:=BOOL_RemoteSet;
BOOL_OUT16:=BOOL_RemoteSet;
BOOL_OUT17:=BOOL_RemoteSet;
BOOL_OUT18:=BOOL_RemoteSet;
BOOL_OUT19:=BOOL_RemoteSet;
BOOL_OUT20:=BOOL_RemoteSet;
BOOL_RemoteSetP:=BOOL_RemoteSet;
elsif BOOL_RemoteSet=BOOL_RemoteSetP then
BOOL_OUT01:=BOOL_IN01;
BOOL_OUT02:=BOOL_IN02;
BOOL_OUT03:=BOOL_IN03;
BOOL_OUT04:=BOOL_IN04;
BOOL_OUT05:=BOOL_IN05;
BOOL_OUT06:=BOOL_IN06;
BOOL_OUT07:=BOOL_IN07;
BOOL_OUT08:=BOOL_IN08;
BOOL_OUT09:=BOOL_IN09;
BOOL_OUT10:=BOOL_IN10;
BOOL_OUT11:=BOOL_IN11;
BOOL_OUT12:=BOOL_IN12;
BOOL_OUT13:=BOOL_IN13;
BOOL_OUT14:=BOOL_IN14;
BOOL_OUT15:=BOOL_IN15;
BOOL_OUT16:=BOOL_IN16;
BOOL_OUT17:=BOOL_IN17;
BOOL_OUT18:=BOOL_IN18;
BOOL_OUT19:=BOOL_IN19;
BOOL_OUT20:=BOOL_IN20;
end_if;
(**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************)
if INT_RemoteSet<>INT_RemoteSetP then
INT_OUT01:=INT_RemoteSet;
INT_OUT02:=INT_RemoteSet;
INT_OUT03:=INT_RemoteSet;
INT_OUT04:=INT_RemoteSet;
INT_OUT05:=INT_RemoteSet;
INT_OUT06:=INT_RemoteSet;
INT_OUT07:=INT_RemoteSet;
INT_OUT08:=INT_RemoteSet;
INT_OUT09:=INT_RemoteSet;
INT_OUT10:=INT_RemoteSet;
INT_OUT11:=INT_RemoteSet;
INT_OUT12:=INT_RemoteSet;
INT_OUT13:=INT_RemoteSet;
INT_OUT14:=INT_RemoteSet;
INT_OUT15:=INT_RemoteSet;
INT_OUT16:=INT_RemoteSet;
INT_OUT17:=INT_RemoteSet;
INT_OUT18:=INT_RemoteSet;
INT_OUT19:=INT_RemoteSet;
INT_OUT20:=INT_RemoteSet;
INT_RemoteSetP:=INT_RemoteSet;
elsif INT_RemoteSet=INT_RemoteSetP then
INT_OUT01:=INT_IN01;
INT_OUT02:=INT_IN02;
INT_OUT03:=INT_IN03;
INT_OUT04:=INT_IN04;
INT_OUT05:=INT_IN05;
INT_OUT06:=INT_IN06;
INT_OUT07:=INT_IN07;
INT_OUT08:=INT_IN08;
INT_OUT09:=INT_IN09;
INT_OUT10:=INT_IN10;
INT_OUT11:=INT_IN11;
INT_OUT12:=INT_IN12;
INT_OUT13:=INT_IN13;
INT_OUT14:=INT_IN14;
INT_OUT15:=INT_IN15;
INT_OUT16:=INT_IN16;
INT_OUT17:=INT_IN17;
INT_OUT18:=INT_IN18;
INT_OUT19:=INT_IN19;
INT_OUT20:=INT_IN20;
end_if;
END_FUNCTION_BLOCK

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save