三菱FX3U,用ST语言与梯形图,混合编写的16仓位的配方程序,程序大小约12984步,可以配1到16种不同的产品,16种配方可以根据自己的需求随意设置配方数量与产品数量,可以用条形码设置配方数据与生产数量,也可以使用触摸屏手动设置,共使用了两台秤同时工作,一台秤配8个仓位的配料,使用FX3U485ADP走ADPRW专用指令MODBUS协议读取电子秤重量,4个通道Fx3u4DA模拟量输出函数块(FB函数块用ST语言编写可重复调用)调用程序(同时也写得有FX3U4DAADP模拟量输出的ST语言编写的程序作为备用),控制16个变频器进行加料快加,慢加,减速,暂停记录功能。 同时记录生产数据,配料误差数据,可以用触摸屏FTP服务器下载到电脑里打印!还有完善的报警系统,故意诊断便于维修,本程序全部使用中文变量(标签附加EXCEL)表格是学习参考的优良资料!程序中其他还包涵通道1自由通信,程序使用了ST程序语言,结构化梯形图,数组功能,结构体,FB功能块调用,条形码Code128解码程序,触摸屏使用了一机多屏功能,主屏MT8101IE作为主屏,远程从屏是MT6071IP做位远程监控!自己编写花费了很长时间,网上基本要不到这类资料!
最近完成了一个超有意思的三菱FX3U项目,跟大家分享一下。这个项目是关于16仓位的配方程序,它结合了ST语言与梯形图混合编写,程序大小约12984步,可别小看这步数,背后可是满满当当的功能。
配方设置的灵活性
这个程序能适配1到16种不同产品,16种配方能按需求随意设置配方数量与产品数量。实现方式呢,一部分靠条形码设置配方数据与生产数量,另一部分可以通过触摸屏手动设置。就拿条形码设置来说,这里面用了条形码Code128解码程序。虽然代码比较长,下面简单示意一下核心思路:
// 假设这里有一个字符串变量存储读取到的条形码数据 VAR barcodeData : STRING[50]; END_VAR // 解码函数(这里是示意,实际更复杂) FUNCTION Code128Decode : BOOL VAR_INPUT data : STRING[50]; END_VAR VAR i : INT; BEGIN // 遍历字符串,按Code128规则解码 FOR i := 1 TO LEN(data) DO // 解码逻辑,比如字符转数字等 // 这里省略具体复杂计算 END_FOR RETURN TRUE; END_FUNCTION这段代码核心就是在Code128Decode函数里,遍历条形码数据字符串,按照Code128的编码规则进行解码,把条形码里携带的配方数据和生产数量等信息提取出来。
双秤协同与数据读取
项目中共使用两台秤同时工作,一台秤负责8个仓位的配料。通过FX3U485ADP走ADPRW专用指令MODBUS协议读取电子秤重量。这部分代码用梯形图和ST语言结合,下面是ST语言读取重量的简化代码:
// 定义相关变量 VAR modbusAddr : INT := 1; // 电子秤地址 weightReg : INT; END_VAR // 使用ADPRW指令读取重量(简化示意) ADPRW( S1 := &modbusAddr, S2 := 0, // 寄存器起始地址等参数 D := @weightReg, N := 1 // 读取寄存器数量 );这段代码里,ADPRW函数通过设置电子秤地址modbusAddr,指定寄存器起始地址等参数,把电子秤的重量数据读取到weightReg变量里,方便后续程序使用。
模拟量输出与变频器控制
项目中使用了4个通道Fx3u4DA模拟量输出函数块(FB函数块用ST语言编写可重复调用)。这里先看看FB函数块的代码结构:
FUNCTION_BLOCK Fx3u4DAOutput VAR_INPUT channel : INT; outputValue : REAL; END_VAR VAR // 内部变量 actualValue : INT; BEGIN // 这里将实数输出值转换为适合模拟量模块的整数值 actualValue := REAL_TO_INT(outputValue * 1000); // 假设转换关系 // 调用模拟量输出指令 // 实际指令会根据具体模块手册编写 // 这里省略具体指令代码 END_FUNCTION_BLOCK在主程序里调用这个FB函数块就很简单了,比如:
// 实例化FB函数块 VAR daOutput1 : Fx3u4DAOutput; END_VAR // 调用函数块,控制通道1输出 daOutput1( channel := 1, outputValue := 50.0 );通过这样的方式,就能灵活控制16个变频器进行加料快加、慢加、减速、暂停记录等功能。
数据记录与下载
程序会记录生产数据和配料误差数据,而且可以通过触摸屏FTP服务器下载到电脑里打印。这个功能实现起来也很有趣,在触摸屏这边设置FTP服务器参数,然后PLC这边把数据整理好准备传输。虽然具体代码涉及到FTP协议相关指令,比较复杂,但思路就是把数据按一定格式整理好,通过网络传输到指定电脑。
报警与故障诊断
还有完善的报警系统和故障诊断功能,便于维修。通过在程序里设置各种状态标志位,当出现异常情况,比如重量超出范围、变频器故障等,就触发报警。比如:
// 假设重量超出范围报警 VAR weightLimit : REAL := 100.0; currentWeight : REAL; alarmFlag : BOOL := FALSE; BEGIN currentWeight := GetWeight(); // 获取当前重量函数 IF currentWeight > weightLimit THEN alarmFlag := TRUE; END_IF END当alarmFlag为TRUE时,就可以在触摸屏或者其他显示设备上显示报警信息,方便维修人员快速定位问题。
三菱FX3U,用ST语言与梯形图,混合编写的16仓位的配方程序,程序大小约12984步,可以配1到16种不同的产品,16种配方可以根据自己的需求随意设置配方数量与产品数量,可以用条形码设置配方数据与生产数量,也可以使用触摸屏手动设置,共使用了两台秤同时工作,一台秤配8个仓位的配料,使用FX3U485ADP走ADPRW专用指令MODBUS协议读取电子秤重量,4个通道Fx3u4DA模拟量输出函数块(FB函数块用ST语言编写可重复调用)调用程序(同时也写得有FX3U4DAADP模拟量输出的ST语言编写的程序作为备用),控制16个变频器进行加料快加,慢加,减速,暂停记录功能。 同时记录生产数据,配料误差数据,可以用触摸屏FTP服务器下载到电脑里打印!还有完善的报警系统,故意诊断便于维修,本程序全部使用中文变量(标签附加EXCEL)表格是学习参考的优良资料!程序中其他还包涵通道1自由通信,程序使用了ST程序语言,结构化梯形图,数组功能,结构体,FB功能块调用,条形码Code128解码程序,触摸屏使用了一机多屏功能,主屏MT8101IE作为主屏,远程从屏是MT6071IP做位远程监控!自己编写花费了很长时间,网上基本要不到这类资料!
这个程序还使用了中文变量(标签附加EXCEL表格),对于学习参考来说是非常好的资料。程序中还包含通道1自由通信,运用了结构化梯形图、数组功能、结构体等多种编程技巧,触摸屏使用了一机多屏功能,主屏MT8101IE,远程从屏MT6071IP做远程监控。自己编写这个程序花费了很长时间,网上这类资料也比较少,希望我的分享能给大家带来一些启发。