SCL实例-传送带控制
1、控制传送带的示例控制传送带下图显示了以电气方式激活的传送带。在传送带的开始端有两个按钮:S1 用于启动,S2 用于停止。在传送带的末端也有两个按钮:S3 用于启动,S4 用于停止。从任何一端都可启动或停止传送带。
实施下表列出了所用变量的定义:操作数声明数据类型说明StartPushbutton_Left (S1)InputBOOL位于传送带左侧的启动按钮StopPushbutton_Left (S2)InputBOOL位于传送带左侧的停止按钮StartPushbutton_Right (S3)InputBOOL位于传送带右侧的启动按钮StopPushbutton_Right (S4)InputBOOL位于传送带右侧的停止按钮MOTOR_ONOutputBOOL启动传送带电机MOTOR_OFFOutputBOOL停止传送带电机以下 STL 程序说明了如何实现此任务:SCLIF 'StartPushbutton_Left_S1' OR 'StartPushbutton_Right_S3' THEN'MOTOR_ON' := 1;'MOTOR_OFF' := 0;END_IF;IF 'StopPushbutton_Left_S2' OR 'StopPushbutton_Right_S4' THEN'MOTOR_ON' := 0;'MOTOR_OFF' := 1;END_IF;按下启动按钮“StartPushbutton_Left_S1”或“StartPushbutton_Right_S3”时,将启动传送带电机。按下停止按钮“StopPushbutton_Left_S2”或“StopPushbutton_Right_S4”时,将停止传送带电机。2、检测传送带传送方向的示例检测传送带的传送方向检测到的传送带传送方向用右箭头或左箭头指示。如果传送的其它物料正在从右边接近 PEB1 或从左边接近 PEB2,显示的箭头最初会关闭,直至两个光电屏蔽均通过后,才能重新检测到传送方向并显示相应的箭头。任务解决方案需要双沿存储器位来检测两个光电屏蔽上从“0”到“1”的信号变化。
实施下表列出了所用变量的定义:名称声明数据类型说明光电屏蔽 PEB1InputBOOL光电屏蔽 1光电屏蔽 PEB2InputBOOL光电屏蔽 2RIGHTOutputBOOL表示向右传送LEFTOutputBOOL表示向左传送辅助标记 PEB1InputBOOL沿位存储器 1辅助标记 PEB2InputBOOL沿位存储器 2以下 STL 程序说明了如何实现此示例:SCL// 向左传送的程序代码IF 'Photolelectric barrier PEB1' = 1 AND 'Auxiliary flag PEB2' = 0 THEN'Auxiliary flag PEB1' := 1; // 为 PEB1 设置辅助标记'LEFT' := 0; // 关闭向左箭头'RIGHT' := 0; // 关闭向右左箭头END_IF;IF 'Auxiliary flag PEB1' = 1 AND 'Photoelectric barrier PEB2' = 1 THEN // 传送带向左传送'LEFT' = 1;'RIGHT' := 0;END_IF;IF 'LINKS' = 1 AND 'Photoelectric barrier PEB2' = 0 THEN // 复位 PEB1 的辅助标记'Auxiliary flag PEB1' = 0END_IF;SCL// 向右传送的程序代码IF 'Photolelectric barrier PEB2' = 1 AND 'Auxiliary flag PEB1' = 0 THEN'Auxiliary flag PEB2' := 1; // 为 PEB2 设置辅助标记'LEFT' := 0; // 关闭向左箭头'RIGHT' := 0; // 关闭向右左箭头END_IF;IF 'Auxiliary flag PEB2' = 1 AND 'Photoelectric barrier PEB1' = 1 THEN // 传送带向右传送'LEFT' = 0;'RIGHT' := 1;END_IF;IF 'RIGHT' = 1 AND 'Photoelectric barrier PEB1' = 0 THEN // 复位 PEB2 的辅助标记'Auxiliary flag PEB2' := 0;END_IF;如果光电屏蔽“PEB1”的信号状态为“1”同时光电屏蔽“PEB2”的信号状态为“0”,则传送带上的包裹向左移动。如果光电屏蔽“PEB2”的信号状态为“1”同时光电屏蔽“PEB1”的信号状态为“0”,则传送带上的包裹向右移动。//当两个光电屏蔽的信号状态均为“0”时,则向左或向右传送的指示灯将熄灭。3、检测存储区的填充量示例检测存储区的填充量下图显示的系统中包含两条传送带和一个临时存储区,临时存储区位于两条传送带之间。传送带 1 将包裹传送到该存储区。传送带 1 末端靠近存储区的光电屏蔽,负责检测传送到存储区的包裹数量。传送带 2 将包裹从临时存储区域传输到装载台,包裹将在此装载到卡车上。存储区出口处的光电屏蔽,负责检测离开存储区传入装载台的包裹数量。五个指示灯用于指示临时存储区的容量。
实施下表列出了所用变量的定义:名称声明数据类型说明PEB1InputBOOL光电屏蔽 1PEB2InputBOOL光电屏蔽 2RESETInputBOOL复位计数器LOADInputBOOL将当前计数器值调整为 PV 参数的值。MAX STORAGE AREA FILL AMOUNTInputINT存储区中最大可能的包裹数PACKAGECOUNTOutputINT存储区中的包裹数(当前计数值)STOCK_PACKAGESOutputBOOL当前计数值大于或等于变量“MAX STORAGE AREA FILL AMOUNT”的值时置位。STOR_EMPTYOutputBOOL指示灯:存储区为空STOR_NOT_EMPTYOutputBOOL指示灯:存储区非空STOR_50%_FULLOutputBOOL指示灯:存储区已用 50 %STOR_90%_FULLOutputBOOL指示灯:存储区已用 90 %STOR_FULLOutputBOOL指示灯:存储区已满VOLUME_50InputINT比较值:50 个包裹VOLUME_90InputINT比较值:90 个包裹VOLUME_100InputINT比较值:100 个包裹以下 STL 程序说明了如何实现此示例:当一个包裹传送到存储区时,“PEB1”处的信号状态从“0”变为“1”(信号上升沿)。“PEB1”在信号上升沿时,将启用“加计数”计数器,同时“PACKAGECOUNT”的当前计数值递增 1。当一个包裹从存储区传送到装载台,“PEB2”处的信号状态从“0”变为“1”(信号上升沿)。“PEB2”在信号上升沿时,将启用“减计数”计数器,同时“PACKAGECOUNT”的当前计数值递减 1。只要存储区中没有包裹(“PACKAGECOUNT”=“0”),则“STOR_EMPTY”变量的信号状态置位为“1”同时点亮“存储区为空”指示灯。“RESET”变量的信号状态置位为“1”时,会将当前计数值复位为“0”。如果“LOAD”变量的信号状态设置为“1”,则会将当前计数值设置为“MAX STORAGE AREA FILL AMOUNT”变量的值。如果当前计数值大于或等于“MAX STORAGE AREA FILL AMOUNT”变量的值,则“STOCK_PACKAGES”变量的信号状态为“1”。SCL'VOLUME_50' := 5; // 为比较值预先赋值 50 个包裹(对于测试仅使用 5 个包裹)'VOLUME_90' := 9; // 为比较值预先赋值 90 个包裹(对于测试仅使用 9 个包裹)'VOLUME_100' := 10; // 为比较值预先赋值 100 个包裹(对于测试仅使用 10 个包裹)'MAX STORAGE AREA FILL AMOUNT' := 10; // 为存储区中的最大数量预先赋值 100 个包裹(对于测试仅使用 10 个包裹)'IEC_Counter_0_DB'.CTUD(CU := 'PEB1',CD := 'PEB2',R := 'RESET',LD := 'LOAD',PV := 'MAX STORAGE AREA FILL AMOUNT',QU => 'STOCK_PACKAGES',QD => 'STOR_EMPTY',CV => 'PACKAGECOUNT');只要存储区中有包裹,“存储区非空”指示灯就会点亮。SCL'STOR_NOT_EMPTY' := NOT 'STOR_EMPTY'如果存储区中的包裹数低于 50%,“存储区已用 50 %”、“存储区已用 90 %”和“存储区已满”报警指示灯就会熄灭。SCLIF 'PACKAGECOUNT' < 'VOLUME_50' THEN'STOR_50%_FULL' := 0;'STOR_90%_FULL' := 0;'STOR_FULL' := 0;END_IF;如果存储区中的包裹数大于或等于 50 %,则“存储区已用 50 %”指示灯将点亮。SCLIF 'PACKAGECOUNT' >= 'VOLUME_50' AND 'PACKAGECOUNT <= 'VOLUME_90' THEN'STOR_50%_FULL' := 1;'STOR_90%_FULL' := 0;'STOR_FULL' := 0;END_IF;如果存储区中的包裹数大于或等于 90 %,则“存储区已用 90 %”指示灯将点亮。“存储区已用 50 %”的指示灯仍然点亮。SCLIF 'PACKAGECOUNT' >= 'VOLUME_90' AND 'PACKAGECOUNT < 'VOLUME_100' THEN'STOR_50%_FULL' := 1;'STOR_90%_FULL' := 1;'STOR_FULL' := 0;END_IF;如果存储区中的包裹数达到 100 %,则“存储区已满”消息指示灯将点亮。“存储区已用 50 %”和“存储区已用 90 %”的指示灯仍然点亮。SCLIF 'PACKAGECOUNT' >= 'VOLUME_100' THEN'STOR_50%_FULL' := 1;'STOR_90%_FULL' := 1;'STOR_FULL' := 1;END_IF;End