PLC程序块:Star-Triangle启动控制实现

需积分: 9 0 下载量 10 浏览量 更新于2024-08-10 收藏 253KB PDF 举报
"Star_Triangle_Start.pdf 是一个关于PLC中的星三角启动控制功能块的文档,主要用于电机启动的节能控制策略。此功能块在西门子的Totally Integrated Automation Portal平台下开发,适用于CPU1513-1PN。FB1100是功能块的编号,使用SCL编程语言编写。" 星三角启动(Star-Triangle Start)是一种常用于三相异步电动机降压启动的方法,它可以减少启动电流对电网的影响。在星形(Y)接法启动时,电机端电压降低至线电压的约1/√3,启动电流相应减小;待电机转速接近额定值后,切换到三角形(Δ)接法,电机在全电压下运行。 该功能块"Star_Triangle_Start"包含了多个输入和输出变量,它们定义了控制逻辑: 1. 输入变量: - Start:启动信号,布尔型,当设置为true时,启动星三角启动过程。 - Stop:停止信号,布尔型,用于停止或中断启动过程。 - Fault:故障信号,布尔型,表示系统中出现的任何错误或异常。 - DelayTime:延迟时间,时间类型,设置电机在星形模式下运行的时间。 2. 输出变量: - QMain:主运行状态,布尔型,指示电机是否处于正常运行状态。 - QStar:星形模式,布尔型,指示电机是否在星形接法下运行。 - QTriangle:三角形模式,布尔型,指示电机是否已切换到三角形接法运行。 - Error:错误状态,布尔型,表示启动过程中是否发生错误。 3. 内部变量: - Ton_1 和 Ton_2:定时器,用于跟踪星形和三角形启动阶段的时间。 - PT 和 ET:定时器的预设时间和实际时间,用于控制启动过程的时间间隔。 此功能块还提供了对HMI/OPC UA的访问权限,允许操作员通过人机界面监控和控制启动过程。所有输入和输出变量都可根据需要配置为从HMI或OPC UA读取和写入,以便实现远程监控和控制。 在实际应用中,通过编程FB1100,PLC将根据Start信号启动星形模式,延时指定的DelayTime后切换到三角形模式,同时监控Stop和Fault信号,以确保安全、顺利的电机启动过程。如果在启动过程中出现错误,Error信号会被激活,提示用户检查并解决故障。

def SegMentLWelder(mask_k, mask_box, img_show, contours_info, box, k_class): imgL = cv2.copyTo(mask_k, mask_box) contours_mask_k, _ = cv2.findContours( imgL, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) (x, y), radius = cv2.minEnclosingCircle(contours_mask_k[0]) center = [int(x), int(y)] area, trg1 = cv2.minEnclosingTriangle(contours_mask_k[0]) triange_P1 = trg1[0][0] triange_P2 = trg1[1][0] triange_P3 = trg1[2][0] areaL = len(np.where(imgL == 255)[0]) triangle_cnt1 = np.array([triange_P1, center, triange_P2]) mask_triange = np.zeros_like(imgL) mask_triange = cv2.drawContours( mask_triange, [triangle_cnt1.astype(int)], 0, 255, -1) img_triange1 = cv2.copyTo(imgL, mask_triange) triangle_cnt2 = np.array([triange_P2, center, triange_P3]) mask_triange = np.zeros_like(imgL) mask_triange = cv2.drawContours( mask_triange, [triangle_cnt2.astype(int)], 0, 255, -1) img_triange2 = cv2.copyTo(imgL, mask_triange) area1 = len(np.where(img_triange1 == 255)[0]) if area1 < 0.25*areaL or area1 > 0.75*areaL: triangle_cnt1 = np.array([triange_P1, center, triange_P3]) mask_triange = np.zeros_like(imgL) mask_triange = cv2.drawContours( mask_triange, [triangle_cnt1.astype(int)], 0, 255, -1) img_triange1 = cv2.copyTo(imgL, mask_triange) else: area2 = len(np.where(img_triange2 == 255)[0]) if area2 < 0.25*areaL or area2 > 0.75*areaL: triangle_cnt2 = np.array([triange_P1, center, triange_P3]) mask_triange = np.zeros_like(imgL) mask_triange = cv2.drawContours( mask_triange, [triangle_cnt2.astype(int)], 0, 255, -1) img_triange2 = cv2.copyTo(imgL, mask_triange) FindContourSinge(k_class, img_triange1, contours_info, img_show, times=1) FindContourSinge(k_class, img_triange2, contours_info, img_show, times=1)

2023-06-12 上传