
No.1276 三菱FX基于组态王6.55的音乐彩灯模拟源程序工程搞这个音乐彩灯小项目的时候核心就是让PLC控节奏、组态王搞界面放音乐俩家伙联动起来就有那味儿了。先从PLC程序说起用的是FX3U毕竟是最常用的机型串口通讯也够方便。PLC节奏控制用定时器搭节拍器我直接用定时器模拟音乐节拍不同定时时间对应不同的灯亮灭组合相当于给音乐做“可视化伴奏”。上代码// 启停控制 M0是组态王传来的启停信号 LD M0 OUT T0 D0 // D0存节拍时长组态王可实时改这里初始设K2002秒 LD T0 MOV K#00FF D10 // Y0-Y7全亮对应高潮段 OUT T1 D1 // D1设K1501.5秒 LD T1 MOV K#0055 D10 // 隔一盏亮一盏Y0、2、4、6亮 OUT T2 D2 // D2设K1001秒 LD T2 MOV K#00AA D10 // 另一组隔盏亮Y1、3、5、7亮 LD T2 RST T0 // 循环触发定时器 // 把灯组输出到Y寄存器 MOV D10 K4Y0这段代码看着简单门道全在定时器和MOV的数值里D0/D1/D2是组态王可调节的节拍参数不用改PLC程序就能适配慢歌快歌比如慢歌把D0设成K3003秒快歌改成K100就行K#00FF对应二进制11111111就是8盏灯全亮K#0055是01010101K#00AA是10101010两种交替的流水灯效果模拟音乐的强弱拍最后用MOV D10 K4Y0把寄存器D10的8位直接映射到Y0-Y7比一个个置位Y寄存器省事儿多了。组态王6.55界面音乐联动组态王这边主要干三件事做彩灯界面、连PLC、控音乐播放。1. 先搞定通讯这是基础打开组态王工程浏览器新建IO设备选「三菱-FX系列-编程口-串口」参数和PLC匹配COM1、9600波特率、7位数据位、1位停止位、偶校验。别嫌麻烦参数错一个都连不上我当初就因为把奇偶校验设成无折腾了10分钟才搞定。2. 变量定义把PLC寄存器映射过来新建变量组启停信号M0IO离散读写对应PLC的M0节拍速度D0/D1/D2IO整数读写对应D0/D1/D2彩灯组Y0-Y7可以单个建离散变量也直接整个IO整数变量彩灯状态对应K4Y0后续画面动画更方便。3. 画面动画让彩灯动起来新建画面拖8个圆形当彩灯给每个圆加「填充颜色」动画连接关联对应的Y变量比如Y01时填充红色Y00时深灰色想搞闪烁效果就加「闪烁」动画条件设成Y变量为1闪烁周期自己调。加个滑块控件关联节拍速度D0范围0-500拖动就能实时改PLC的定时器时长不用停程序改参数调试超方便。4. 音乐播放脚本让灯和歌同步要让彩灯和音乐踩上同一个点得用组态王的脚本触发播放。在画面的「数据改变命令语言」里绑定启停信号M0if (\本站点\启停信号M0 1) { // 异步播放音乐路径用双反斜杠转义 PlaySound(D:\\Music\\千与千寻.mp3, NULL, SND_ASYNC | SND_FILENAME); } else { // 停止播放 PlaySound(NULL, NULL, 0); }这里得说下PlaySound的参数SND_ASYNC是异步播放不会卡死组态王界面SND_FILENAME表示传入的是文件名路径停止播放时传NULL就行不用找什么停止函数直接空值覆盖。调试小技巧让节拍精准踩点一开始灯的节奏和音乐对不上很正常不用急先开组态王的「变量监控」窗口看Y变量的变化时间和音乐的鼓点对比拖动滑块改D0/D1/D2的数值比如鼓点快就把D0改小定时时间短慢就改大如果想搞复杂的灯效比如流水灯PLC里可以加ROL或ROR循环移位指令比如ROR D10 K1每触发一次就把灯组右移一位效果比固定组合更灵动。整个工程其实没什么复杂的逻辑就是把PLC的时序控制和组态王的人机交互结合起来通讯调通了剩下的就是调参数、改灯效折腾几次就能出个挺像样的效果放工位上当个氛围灯都合适No.1276 三菱FX基于组态王6.55的音乐彩灯模拟源程序工程