zqszk123
集百家之所长,融百家之所思,扬百家之所名!
级别: 论坛先锋
精华主题: 1 篇
发帖数量: 246 个
工控威望: 1067 点
下载积分: 585 分
在线时间: 123(小时)
注册时间: 2018-06-19
最后登录: 2023-04-03
查看zqszk123的 主题 / 回贴
楼主  发表于: 2018-08-20 10:16
三菱的,结构化编程,看编程思维,不用详细看动作 !
欢迎一起讨论!(感觉还好的话送点积分给我,我要改名字!
[ 此帖被18706185276在2018-08-20 16:33重新编辑 ]
附件: 程序.zip (3544 K) 下载次数:11890
网站提示: 请不要用迅雷下载附件,容易出错
本帖最近评分记录:
  • 下载积分:+5(renjiawonder) 结构编程
  • 下载积分:+1(aaa2073) 感谢分享!
  • 下载积分:+1(一水知寒) 好贴好贴!
  • 下载积分:+1(工控老杜) 好贴好贴!
  • 下载积分:+1(zhao82159217)
  • 下载积分:+1(zhuo610616) 真诚感谢!
  • 下载积分:+1(上官文博) 真诚感谢!
    nos001
    级别: 探索解密
    精华主题: 0
    发帖数量: 54 个
    工控威望: 110 点
    下载积分: 814 分
    在线时间: 42(小时)
    注册时间: 2018-03-31
    最后登录: 2022-10-06
    查看nos001的 主题 / 回贴
    1楼  发表于: 2019-07-19 21:40
    结构化,程序大,有条理,值得借鉴。
    就是定义在一页的全局变量太多,感觉应该分页。
    其实不知道硬件,不知道用途,还是挺难看懂。
    还是更喜欢st编程,自定义定时器感觉比gx works 内建的好用。
    复制代码
    1. (******************************************************************************
    2. * 从自动包装切换到手动操作
    3. * 如果前面进行过“自动包装”,切换到“手动操作”时进行一次初始化
    4. *****************************************************************************)
    5. IF HmiKey_ManualOP THEN
    6.     
    7.     IF( bMode_Manual = FALSE ) THEN
    8.         
    9.         bMode_Manual := TRUE;
    10.         bMode_Auto   := FALSE;
    11.         HmiKey_AutoPack := FALSE;
    12.         HmiKey_FillPack := FALSE;
    13.         HmiKey_EmptyBagTest := FALSE;
    14.         HmiKey_FillBagOne := FALSE;
    15.         
    16.         ZRST( TRUE, Y001, Y004 );
    17.         ZRST( TRUE, Y006, Y007 );
    18.         ZRST( TRUE, Y010, Y011 );
    19.         ZRST( TRUE, Y013, Y017 );        
    20.         ZRST( TRUE, Y020, Y027 );
    21.         
    22.         Tcnt_10[ IDX_DOWN_FILL_DLY ].reset := TRUE;    
    23.         Tcnt_10[ IDX_DOWN_FILL ].reset := TRUE;    
    24.         Tcnt_10[ IDX_PULL_FILM_DLY ].reset := TRUE;    
    25.         Tcnt_10[ IDX_VERT_SEAL_DLY ].reset := TRUE;    
    26.         Tcnt_10[ IDX_VERT_SEAL ].reset := TRUE;
    27.             
    28.         Tcnt_10[ IDX_KNURL_DLY ].reset := TRUE;    
    29.         Tcnt_10[ IDX_KNURL ].reset := TRUE;    
    30.         Tcnt_10[ IDX_VACUUM_BOX_CLOSE_DLY ].reset := TRUE;    
    31.         Tcnt_10[ IDX_BAG_FOLD_DLY ].reset := TRUE;    
    32.         Tcnt_10[ IDX_BAG_FOLD ].reset := TRUE;
    33.                                     
    34.         Tcnt_10[ IDX_BAG_CUT_DLY ].reset := TRUE;                    
    35.         Tcnt_10[ IDX_BAG_CUT ].reset := TRUE;                        
    36.         Tcnt_10[ IDX_VACUUMIZE ].reset := TRUE;                    
    37.         Tcnt_10[ IDX_HEAT_SEAL ].reset := TRUE;                
    38.         Tcnt_10[ IDX_SEAL_KEEP ].reset := TRUE;                    
    39.         Tcnt_10[ IDX_SEAL_COOL ].reset := TRUE;            
    40.             
    41.     END_IF;
    42.     
    43. ELSE
    44.     RST( TRUE, bMode_Manual );
    45.     
    46. END_IF;
    47. (******************************************************************************
    48. * 从手动操作切换到自动包装
    49. * 如果前面进行过“手动操作”,切换到“自动包装”时进行一次初始化
    50. *****************************************************************************)
    51. IF HmiKey_AutoPack THEN
    52.     
    53.     IF( bMode_Auto = FALSE ) THEN      (* 初始化 *)
    54.         
    55.         bMode_Auto   := TRUE;
    56.         bMode_Manual := FALSE;    
    57.         HmiKey_ManualOP := FALSE;
    58.         HmiKey_Knurling := FALSE;
    59.         
    60.         ZRST( TRUE, Y001, Y004 );
    61.         ZRST( TRUE, Y006, Y007 );
    62.         ZRST( TRUE, Y010, Y011 );
    63.         ZRST( TRUE, Y013, Y017 );        
    64.         ZRST( TRUE, Y020, Y027 );    
    65.             
    66.         Tcnt_10[ IDX_DOWN_FILL_DLY ].reset := TRUE;    
    67.         Tcnt_10[ IDX_DOWN_FILL ].reset := TRUE;    
    68.         Tcnt_10[ IDX_PULL_FILM_DLY ].reset := TRUE;    
    69.         Tcnt_10[ IDX_VERT_SEAL_DLY ].reset := TRUE;    
    70.         Tcnt_10[ IDX_VERT_SEAL ].reset := TRUE;
    71.             
    72.         Tcnt_10[ IDX_KNURL_DLY ].reset := TRUE;    
    73.         Tcnt_10[ IDX_KNURL ].reset := TRUE;    
    74.         Tcnt_10[ IDX_VACUUM_BOX_CLOSE_DLY ].reset := TRUE;    
    75.         Tcnt_10[ IDX_BAG_FOLD_DLY ].reset := TRUE;    
    76.         Tcnt_10[ IDX_BAG_FOLD ].reset := TRUE;
    77.                                     
    78.         Tcnt_10[ IDX_BAG_CUT_DLY ].reset := TRUE;                    
    79.         Tcnt_10[ IDX_BAG_CUT ].reset := TRUE;                        
    80.         Tcnt_10[ IDX_VACUUMIZE ].reset := TRUE;                    
    81.         Tcnt_10[ IDX_HEAT_SEAL ].reset := TRUE;                
    82.         Tcnt_10[ IDX_SEAL_KEEP ].reset := TRUE;                    
    83.         Tcnt_10[ IDX_SEAL_COOL ].reset := TRUE;
    84.         
    85.     END_IF;
    86.     
    87. ELSE
    88.     bMode_Auto := FALSE;               (* 如果切换到“手动操作”,这条语句必然被执行 *)
    89.     
    90. END_IF;
    91. (******************************************************************************
    92. * brief  按键扫描与互锁
    93. * note  
    94. *****************************************************************************)
    95. HmiKey_Scan_InterLock();    
    96. (******************************************************************************
    97. * brief  自动包装(填充包装)按键事件处理
    98. * note
    99. *****************************************************************************)
    100. (* 按键生效,下降沿 *)
    101. IF( LDP( TRUE, KeyID_FillPack ) AND ( bY0_out_watch = FALSE ) ) THEN            
    102.      PackingFlow := FLOW_STANDBY;          
    103. END_IF;
    104. (* 按键生效,下降沿 *)    
    105. IF( LDF( TRUE, KeyID_FillPack ) ) THEN            
    106.      PackingFlow := FLOW_END;                          
    107. END_IF;
    108. (******************************************************************************
    109. * brief  空袋调试 按键事件处理
    110. * note
    111. *****************************************************************************)
    112. (* 按键生效,上升沿 *)
    113. IF( LDP( TRUE, KeyID_EmptyBagTest ) AND ( bY0_out_watch = FALSE ) ) THEN            
    114.      PackingFlow := FLOW_STANDBY;          
    115. END_IF;
    116. (* 按键生效,下降沿 *)    
    117. IF( LDF( TRUE, KeyID_EmptyBagTest ) ) THEN            
    118.      PackingFlow := FLOW_END;                          
    119. END_IF;
    120. (******************************************************************************
    121. * brief 制袋一个 按键事件处理
    122. * note
    123. *****************************************************************************)
    124.         
    125. (* 按键生效,下降沿 *)
    126. IF( LDP( TRUE, KeyID_FillBagOne ) AND ( bY0_out_watch = FALSE ) ) THEN            
    127.      PackingFlow := FLOW_STANDBY;          
    128. END_IF;
    129. (* 按键生效,下降沿 *)    
    130. IF( LDF( TRUE, KeyID_FillBagOne ) ) THEN            
    131.      PackingFlow := FLOW_END;                          
    132. END_IF;
    133. (******************************************************************************
    134. * 拉膜皮带
    135. *
    136. * 伺服电机通过传动杆驱动拉膜皮带,拉膜气缸控制拉膜皮带:
    137. * 抱紧下料筒的包装膜
    138. * 松开下料筒的包装膜
    139. *****************************************************************************)
    140. IF( bMode_Auto )  THEN
    141.     
    142.      IF( HmiKey_BeltFlimPull ) THEN
    143.                   
    144.          SET( TRUE, Y_BeltPullFilm_cylinder );        
    145.      ELSE        
    146.          RST( TRUE, Y_BeltPullFilm_cylinder );        
    147.      END_IF;
    148.     
    149. END_IF;
    150. (******************************************************************************
    151. * 真空泵
    152. *
    153. *****************************************************************************)
    154. IF( bMode_Auto ) THEN
    155.     
    156.     IF( HmiKey_VacuumPump ) THEN
    157.         
    158.         SET( TRUE, Y_VacuumPump_SSR );        
    159.     ELSE        
    160.         RST( TRUE,Y_VacuumPump_SSR );        
    161.     END_IF;
    162.     
    163. END_IF;  
    164. (******************************************************************************
    165. * 跑遍纠正
    166. *
    167. * HmiPB_MoveLeft     HMI“自动包装”界面“跑偏纠正”左移按钮
    168. * HmiPB_MoveRight    HMI“自动包装”界面“跑偏纠正”右移按钮
    169. * Limit_Left         左移限位开关
    170. * Limit_Right        右移限位开关
    171. *****************************************************************************)
    172. IF( HmiKey_MoveLeft AND ( NOT ix_PackFilm_Limit_L ) ) THEN
    173.     
    174.     SET( TRUE, Y_MoveLeft_SSR );    
    175. ELSE    
    176.     RST( TRUE, Y_MoveLeft_SSR );    
    177. END_IF;
    178. IF( HmiKey_MoveRight  AND ( NOT ix_PackFilm_Limit_R ) )THEN
    179.     
    180.     SET( TRUE, Y_MoveRight_SSR );    
    181. ELSE    
    182.     RST( TRUE, Y_MoveRight_SSR );    
    183. END_IF;
    [ 此帖被nos001在2019-07-19 21:47重新编辑 ]