ORGANIZATION_BLOCK MAIN:OB1 TITLE=主程序 // // 变频器 // 制造商:英威腾 // 型号:GD200A-018G/022P-4 // Modbus地址: // 2000H(8192D)/408193 变频器运行控制 // ----1 正转运行 // ----2 反转运行 // ----3 正转点动 // ----4 反转点动 // ----5 减速停机 // ----8 点动停止 // // 2100H(8448D)/408449 变频器运行状态 // ----1 正转运行中 // ----2 反转运行中 // ----3 变频器停机中 // ----4 故障中 // // 2001H(8193D)/408194 通讯设定频率 // -10000----10000(反转最大频率----正转最大频率) // // 3000H(12288D)/412289 运行频率 // 3004H(12292D)/412293 运行电流 // 5000H(20480D)/420481 变频器故障 BEGIN Network 1 // 首次扫描复位通讯令牌和通讯失败标志 LD SM0.1 R M2.1, 1 R M22.0, 7 R M26.0, 7 R M27.4, 1 MOVW +5, VW400 Network 2 LD SM0.0 CALL SBR1 Network 3 // MBUS_CTRL初始化成功后发放令牌 // // 此网络必须在MBUS_CTRL指令之前,否则通讯令牌发放不成功 // 因为 启动Modbus(M2.0) 在首次扫描即被置位,无法产生上升沿 // 下载新的程序后,令牌丢失,重新上电后再次发放或者在线监控写入一次 通讯令牌(M2.1) 为ON LD M2.0 EU S M2.1, 1 Network 4 // 启用Modbus // MBUS_CTRL // Mode: 1--将 CPU 端口分配给 Modbus 协议并启用 // Parity: 0--无校验 // Port: 0--设置物理通信端口(0 = CPU 集成的 RS-485) // Timeout:超时 LD SM0.0 = L60.0 LD SM0.0 = L63.7 LD L60.0 CALL SBR6, L63.7, 19200, 0, 0, +1000, M2.0, VB500 Network 5 // 读变频器数据 LD SM0.0 CALL SBR2 Network 6 // 升降/旋转 转换 LD M10.3 = M27.3 NOT = M27.2 Network 7 // 油缸上升 // 上升到高压后时停止 // 20201125 设备报警新增油泵电机过载 LD M27.3 LPS A M10.1 AN M10.2 AN Q0.0 AN Q0.1 AN I1.2 AN M0.5 EU S Q0.0, 1 S Q0.3, 1 R M27.4, 1 LPP A Q0.0 A I0.3 EU R Q0.0, 1 R Q0.3, 1 Network 8 // 油缸下降 // 20201125 设备报警新增油泵电机过载 LD M27.3 LPS A M10.2 AN M10.1 AN Q0.0 AN Q0.1 AN I1.2 AN M0.6 EU S Q0.1, 1 S Q0.3, 1 LPP A Q0.1 A I0.5 EU S M27.4, 1 R Q0.1, 1 R Q0.3, 1 Network 9 // 油缸和电机复位 // 20201125 新增油泵电机过载 LD M27.2 EU LD M0.3 EU OLD LD M0.5 EU OLD LD M0.6 EU OLD LD I1.2 EU OLD R Q0.0, 1 R Q0.1, 1 R Q0.3, 1 Network 10 // 可升降时,允许手动反转 // 20190622 增加设备没有报警时才能反转手动 // 20201125 设备报警新增油泵电机过载 // 20201125 设备报警新增抱闸电机过载 LD SM0.0 LPS A M27.3 A M10.6 AB= MB0, 0 EU S M23.5, 1 LPP A M10.5 EU R M23.5, 1 Network 11 // 等待令牌,开始反转点动(VW400=4) LD M23.5 A M2.1 EU MOVW +4, VW400 S M23.4, 1 S Q0.2, 1 R M23.5, 1 R M2.1, 1 Network 12 // 反转点动 // 2000H(8192D)/408193 变频器运行控制 LD M23.4 = L60.0 LD M23.4 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408193, +1, &VB400, M25.4, VB544 Network 13 // 释放令牌 LD M25.4 EU LPS AB<> VB544, 0 S M26.4, 1 LRD AB= VB544, 0 R M26.4, 1 LRD S M2.1, 1 LPP R M23.4, 1 Network 14 // 启动运行 // 20201125 设备报警新增油泵电机过载 // 20201125 设备报警新增抱闸电机过载 LD M27.2 AN M23.0 AW= VW400, +5 AB= MB0, 0 A M10.4 A M27.4 EU S M23.0, 1 S Q0.2, 1 Network 15 // 停止运行 // 20190622 触摸屏和设备报警各自独立产生紧急停止脉冲,防止门没关好等设备报警时,触摸屏停止无法产生上升沿 // 增加急停按钮被按下独立产生紧急停止脉冲,防止门没关好设备报警时,急停按钮被按下无法产生上升沿 // 20201125 设备报警新增油泵电机过载 // 20201125 设备报警新增抱闸电机过载 LD M10.5 EU LDB<> MB0, 0 EU OLD LD M0.3 EU OLD LD M27.3 EU OLD S M27.5, 1 Network 16 // 旋转运行和停止 LD SM0.0 CALL SBR3 Network 17 // 保压 // 加入油缸已闭合标志,防止上电后触摸屏运行升降旋钮在可旋转状态,导致油缸动作 // 20200301 油缸下增加0.5s延时,解决油缸和 // 20201125 设备报警新增油泵电机过载 LDW= VW400, +1 OW= VW400, +3 A M27.2 A M27.4 AN I1.2 AN M0.6 LPS AN I0.5 TON T110, +5 LRD A T110 EU S Q0.1, 1 S Q0.3, 1 LRD A I0.5 TON T120, +5 LRD A T120 EU R Q0.1, 1 R Q0.3, 1 LPP ED R Q0.1, 1 R Q0.3, 1 Network 18 // 触摸屏时间设定调整 // 定时分的最大值为54,54*60=3240<3276.7 // 定时器的最大定时时间为3276.7s // 如果需要更长的时间,需要级联多个定时器或者使用SM0.5配合计数器实现 LD SM0.0 LPS A M11.4 AW< VW1000, +54 EU INCW VW1000 LPP A M11.5 AW> VW1000, +1 EU DECW VW1000 Network 19 // 调整转速设定值 // 1rpm约2.592Hz;约5.18% LD SM0.0 LPS A M11.0 AW< VW1010, +20 EU INCW VW1010 MOVW VW1010, VW404 *I +260, VW404 LPP A M11.1 AW> VW1010, +0 EU DECW VW1010 MOVW VW1010, VW404 *I +260, VW404 Network 20 // 运行中速度调整 // 锁定状态 LD M11.0 O M11.1 EU S M11.2, 1 Network 21 // 运行中速度调整 // 等待令牌 LD M11.2 A M2.1 EU S M11.3, 1 R M11.2, 1 R M2.1, 1 Network 22 // 变频器设置速度 // 2001H(8193D)/408194 通讯设定频率 LD M11.3 = L60.0 LD M11.3 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408194, +1, &VB404, M25.0, VB540 Network 23 // 释放令牌 LD M25.0 EU LPS AB<> VB540, 0 S M26.0, 1 LRD AB= VB540, 0 R M26.0, 1 LRD S M2.1, 1 LPP R M11.3, 1 Network 24 // 运行灯 LDW= VW400, +1 OW= VW400, +3 OW= VW400, +4 = Q0.4 Network 25 // 计算实时转速、频率、电流和剩余时间 LD SM0.0 CALL SBR4 END_ORGANIZATION_BLOCK SUBROUTINE_BLOCK Alarm:SBR1 TITLE=报警 BEGIN Network 1 // 正面门报警 // 20190621 门关好后,自动取消报警,不再需要按触摸屏复位消音按钮确认 LD SM0.0 LPS AN I0.0 TON T150, +10 A T150 S M0.0, 1 LPP A I0.0 R M0.0, 1 Network 2 // 侧面门报警 LD SM0.0 LPS AN I0.1 TON T151, +10 A T151 S M0.1, 1 LPP A I0.1 R M0.1, 1 Network 3 // 抱闸电机报警 LDN SM0.0 LPS A I1.1 TON T152, +10 A T152 S M0.2, 1 LPP AN I1.1 R M0.2, 1 Network 4 // 油泵电机报警 LDN SM0.0 LPS A I1.2 TON T152, +10 A T152 S M0.7, 1 LPP AN I1.2 R M0.7, 1 Network 5 // 急停按钮 LDN I1.0 = M0.3 Network 6 // 变频器报警 LD SM0.0 LPS A M27.1 TON T153, +1 A T153 S M0.4, 1 LPP AN M27.1 A M10.0 R M0.4, 1 Network 7 // 油缸上升超时 LD SM0.0 LPS A Q0.0 TON T154, +300 A T154 S M0.5, 1 R Q0.0, 1 LPP A M10.0 R M0.5, 1 Network 8 // 油缸下降超时 LD SM0.0 LPS A Q0.1 TON T154, +300 A T154 S M0.6, 1 R Q0.1, 1 LPP A M10.0 R M0.6, 1 Network 9 // 报警指示灯 // 20190621 故障时,报警灯闪烁改为常亮; // 停机时,操作人员习惯把门打开,造成三色报警灯一直闪烁,加速触点损坏; LDB<> MB0, 0 OB<> MB1, 0 LPS = Q0.6 LD M10.0 O M27.0 ALD = M27.0 LPP AN M27.0 = Q0.7 Network 10 LDN Q0.4 = Q0.5 Network 11 // 清除通讯报警 LD M10.0 EU MOVB 0, MB22 MOVB 0, MB26 MOVB 0, MB1 END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK Modbus_Read:SBR2 TITLE=变频器读取 // 获取令牌后不释放,全部读取完成后再释放令牌; // Modbus读取: // 1.等待通讯令牌; // 2.获取通讯令牌后,立即复位通讯令牌; // 3.完成所有通讯,在此期间,通讯令牌不释放; // 4.完成所有通讯后,释放通讯令牌; // 存储地址 // VW402 变频器运行状态 // VW406 变频器运行频率 // VW408 变频器运行电流 // VW410 变频器故障 BEGIN Network 1 // 每1秒读取一次变频器数据 LD SM0.0 LPS AN T170 TON T170, +10 LPP A T170 A M2.1 S M20.2, 1 R M2.1, 1 Network 2 // Modbus消息 // MBUS_MSG // Slave: Modbus 从站设备的地址 // RW: 0(读取)和 1(写入) // Addr: 起始 Modbus 地址 // Count: 读取或写入的数据元素数 // DataPtr: 间接地址指针 // // 读取变频器运行状态(VW402) // 2100H(8448D)/408449 变频器运行状态 LD M20.2 = L60.0 LD M20.2 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 0, 408449, +1, &VB402, M21.2, VB503 Network 3 // 变频器故障判断 LD M21.2 EU LPS AB<> VB503, 0 S M22.2, 1 LRD AB= VB503, 0 LPS R M22.2, 1 AW= VW402, +4 S M27.1, 1 LPP AW<> VW402, +4 R M27.1, 1 LPP S M20.0, 1 R M20.2, 1 Network 4 // 读取变频器运行频率(VW406) // 3000H(12288D)/412289 运行频率 // 3016H(12310D)/412311 变频器型号 LD M20.0 = L60.0 LD M20.0 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 0, 412289, +1, &VB406, M21.0, VB501 Network 5 LD M21.0 EU LPS AB<> VB501, 0 S M22.0, 1 LRD AB= VB501, 0 R M22.0, 1 LRD S M20.1, 1 LPP R M20.0, 1 Network 6 // 读取变频器运行电流(VW408) // 运行电流 3004H(12292) 412293 LD M20.1 = L60.0 LD M20.1 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 0, 412293, +1, &VB408, M21.1, VB502 Network 7 LD M21.1 EU LPS AB<> VB502, 0 S M22.1, 1 LRD AB= VB502, 0 R M22.1, 1 LRD S M20.3, 1 LPP R M20.1, 1 Network 8 // 读取变频器故障(VW410) // 变频器故障 5000H(20480) 420481 LD M20.3 = L60.0 LD M20.3 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 0, 420481, +1, &VB410, M21.3, VB504 Network 9 // 读取完成后,释放令牌 LD M21.3 EU LPS AB<> VB504, 0 S M22.3, 1 LRD AB= VB504, 0 R M22.3, 1 LRD S M2.1, 1 LPP R M20.3, 1 Network 10 // Modbus读取检查 LDB<> MB23, 0 LPS EU S M1.1, 1 LPP ED R M1.1, 1 END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK RunStop:SBR3 TITLE=变频器写入 // Modbus写入: // 1.锁定当前状态; // 2.等待通讯令牌; // 3.获取通讯令牌后,立即复位通讯令牌; // 4.完成通讯; // 5.复位当前状态; // 6.释放通讯令牌; // // 运行控制(VW400) // 1--正转运行 // 3--正转点动 // 4--反转点动 // 5--减速停机 // 频率设定(VW404) // 设定转速*518(每转约2.09Hz) // BEGIN Network 1 // 等待令牌 LD M23.0 A M2.1 EU S M23.1, 1 R M23.0, 1 R M2.1, 1 Network 2 // 设定变频器频率(VW404) // 2001H(8193D)/408194 通讯设定频率 LD M23.1 = L60.0 LD M23.1 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408194, +1, &VB404, M25.1, VB541 Network 3 // 传送速度完成后,不释放令牌,启动正转运行(VW400=1) LD M25.1 EU LPS AB<> VB541, 0 S M26.1, 1 LRD AB= VB541, 0 R M26.1, 1 LRD MOVW +1, VW400 LRD S M23.2, 1 LPP R M23.1, 1 Network 4 // 正转运行 // 2000H(8192D)/408193 变频器运行控制 LD M23.2 = L60.0 LD M23.2 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408193, +1, &VB400, M25.2, VB542 Network 5 // 释放令牌 LD M25.2 EU LPS AB<> VB542, 0 S M26.2, 1 LRD AB= VB542, 0 R M26.2, 1 LRD S M2.1, 1 LPP R M23.2, 1 Network 6 // 正转运行时,开始计时 LDW= VW400, +1 LPS MOVW VW1000, VW1200 AENO *I +60, VW1200 AENO MOVW +10, VW1008 *I VW1200, VW1008 LPP TON T160, VW1008 Network 7 // 触摸屏剩余时间分、秒显示 // 20190621 增加定时器计时时间判断,防止触摸屏时间显示出现负数的问题; // 运行时,修改定时时间,并且设定的定时时间少于已经运行的时间时,触摸屏剩余时间显示负数; LDW= VW400, +1 LPS AW> VW1008, T160 LPS MOVW VW1008, VW1200 AENO -I T160, VW1200 AENO MOVW VW1200, VW1004 /I +600, VW1004 LRD MOVW VW1004, VW1202 AENO *I +600, VW1202 AENO MOVW VW1200, VW1006 -I VW1202, VW1006 LPP /I +10, VW1006 LPP AW<= VW1008, T160 MOVW +0, VW1004 MOVW +0, VW1006 Network 8 // 计时时间到,开始正转点动(VW400=3) LD M25.2 AW= VW400, +1 A T160 A M2.1 EU MOVW +3, VW400 MOVW +0, VW1200 MOVW +0, VW1202 S M23.3, 1 R M2.1, 1 R T160, 1 Network 9 // 正转点动 // 2000H(8192D)/408193 变频器运行控制 LD M23.3 = L60.0 LD M23.3 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408193, +1, &VB400, M25.3, VB543 Network 10 // 释放令牌 LD M25.3 EU LPS AB<> VB543, 0 S M26.3, 1 LRD AB= VB543, 0 R M26.3, 1 LRD S M2.1, 1 LPP R M23.3, 1 Network 11 // 正常运行停止、紧急停止(包括反转手动停止) LD M25.3 AW= VW400, +3 AW<= VW406, +500 A I0.7 O M27.5 EU S M24.0, 1 Network 12 // 正转点动延时 LD M24.0 TON T140, +1 Network 13 // 等待令牌,开始减速停机(VW400=5) LD T140 A M2.1 EU MOVW +5, VW400 S M24.1, 1 R M27.5, 1 R M2.1, 1 R M24.0, 1 Network 14 // 变频器停止 // 2000H(8192D)/408193 变频器运行控制 LD M24.1 = L60.0 LD M24.1 EU = L63.7 LD L60.0 CALL SBR8, L63.7, 3, 1, 408193, +1, &VB400, M25.5, VB545 Network 15 // 释放令牌 LD M25.5 EU LPS AB<> VB545, 0 S M26.5, 1 LRD AB= VB545, 0 R M26.5, 1 LRD R T160, 1 LRD S M2.1, 1 LRD S M24.2, 1 LPP R M24.1, 1 Network 16 // 抱闸制动 LD M24.2 AW<= VW406, +250 EU R Q0.2, 1 R M24.2, 1 Network 17 // 变频器写入检查 LDB<> MB27, 0 LPS EU S M1.0, 1 LPP ED R M1.0, 1 END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK Calculate:SBR4 TITLE=计算速度、频率和电流 BEGIN Network 1 // 计算速度 LDW= VW402, +1 OW= VW402, +2 AN T180 TON T180, +30000 Network 2 // 到达原点后,保存上次到达原点的时间 LDN I0.7 EU MOVW VW600, VW604 ITD VW604, VD614 DTR VD614, VD624 Network 3 // 保存本次到达原点的时间 LDN I0.7 EU MOVW T180, VW600 ITD VW600, VD610 DTR VD610, VD620 Network 4 // 计算实时速度 // 1转/时间=1/(0.1s*VD628)=600/VD628 (单位:转/分钟) LDN I0.7 EU AR> VD620, VD624 MOVR VD620, VD628 -R VD624, VD628 MOVR 600.0, VD638 /R VD628, VD638 Network 5 LDW= VW406, +0 EU MOVR 0.0, VD638 Network 6 // 计算触摸屏显示频率 // 通讯获取的值是实际的100倍 LD SM0.0 ITD VW406, VD706 DTR VD706, VD716 MOVR VD716, VD726 /R 100.0, VD726 Network 7 // 计算触摸屏显示电流 // 通讯获取的值是实际的10倍 LD SM0.0 ITD VW408, VD808 DTR VD808, VD818 MOVR VD818, VD828 /R 10.0, VD828 END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK MBUS_CTRL:SBR6 TITLE=This code is property of Siemens Industry, Inc. VAR_INPUT Mode:BOOL; Baud:DWORD; Parity:BYTE; Port:BYTE; Timeout:INT; END_VAR VAR_OUTPUT Done:BOOL; Error:BYTE; END_VAR VAR AC0save:DWORD; AC1save:DWORD; AC2save:DWORD; AC3save:DWORD; END_VAR BEGIN Network 1 // 此 POU 针对编辑和查看设置了密码保护. END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK MBUSM1:SBR7 TITLE=This code is property of Siemens Industry, Inc. VAR_OUTPUT crc:WORD; END_VAR VAR count:INT; ptr:DWORD; END_VAR BEGIN Network 1 // 此 POU 针对编辑和查看设置了密码保护. END_SUBROUTINE_BLOCK SUBROUTINE_BLOCK MBUS_MSG:SBR8 TITLE=This code is property of Siemens Industry, Inc. VAR_INPUT First:BOOL; Slave:BYTE; RW:BYTE; Addr:DWORD; Count:INT; DataPtr:DWORD; END_VAR VAR_OUTPUT Done:BOOL; Error:BYTE; END_VAR VAR AC0save:DWORD; AC1save:DWORD; AC2save:DWORD; END_VAR BEGIN Network 1 // 此 POU 针对编辑和查看设置了密码保护. END_SUBROUTINE_BLOCK INTERRUPT_BLOCK MBUSM2:INT1 TITLE=This code is property of Siemens Industry, Inc. BEGIN Network 1 // 此 POU 针对编辑和查看设置了密码保护. END_INTERRUPT_BLOCK