
1. 项目背景与核心需求拆解1.1 为什么“智能跑步机”值得用PLC来做很多人第一次听到“基于PLC的智能跑步机控制系统”这个题目第一反应是跑步机不就是个电机加个调速板吗用单片机几十块钱就能搞定为什么非要上PLC这个问题我在做毕设选题的时候也被导师问过后来真正把系统跑起来才明白PLC方案的核心价值不在“能不能转”而在“能不能稳、能不能扩、能不能扛造”。跑步机本质上是一个典型的运动控制系统它要控制交流电机或直流无刷电机的转速要实时采集速度传感器霍尔或光电编码器的脉冲要处理急停、安全锁、过流保护这些安全逻辑还要跟触摸屏做人机交互。如果只是做一个实验室里跑五分钟的demo单片机确实够用。但工业场景下的跑步机——比如健身房商用机型、康复中心的医用跑台、甚至一些特殊训练设备——对可靠性和电磁兼容性的要求完全不是一个量级。PLC的扫描周期稳定、I/O隔离做得好、抗干扰能力强而且梯形图逻辑对电气背景的学生来说比寄存器操作友好得多。这个毕业设计题目的真正价值是让你完整走一遍“需求分析→硬件选型→I/O分配→梯形图编程→上位机监控→联调测试”的工业控制流程。它不是一个玩具项目而是一个缩小版的运动控制工程。你做完之后对Modbus通信、PID调速、安全回路设计这些概念会有实打实的体感这些经验在面试自动化相关岗位时是能讲出细节的。1.2 这个系统到底要解决什么问题把需求拆开来看一个能拿得出手的智能跑步机控制系统至少要覆盖以下几层第一层是驱动控制。跑步机电机需要平滑调速从0.5km/h的慢走到12km/h以上的快跑调速范围宽而且加减速要柔和不能一按启动就猛冲。这就涉及到PLC输出模拟量给变频器或者用PWM方式驱动直流电机再配合PID闭环把实际速度稳在设定值附近。第二层是安全逻辑。急停按钮按下必须立刻切断电机动力安全锁那个磁吸夹子脱落也要立即停机还有过流、过压、欠压保护。这些逻辑在PLC里用硬件互锁加软件判断双重实现比纯软件方案可靠得多。第三层是人机交互。用户要设定速度、坡度、运动模式比如间歇跑、爬坡跑要看到当前速度、时间、距离、卡路里。这部分通常用触摸屏HMI通过Modbus RTU或Modbus TCP跟PLC通信。第四层是数据监控。如果做“智能”一点可以把运行数据上传到上位机SCADA或者做个简单的数据记录方便后续分析。这也是热词里“scada如何与plc连接”被频繁搜索的原因——很多同学卡在通信配置这一步。第五层是扩展性。好的设计要预留接口比如以后加心率检测、加自动坡度调节、加远程控制不能把系统做死。1.3 适合谁来参考这份设计这份内容最适合三类人一是正在做电气自动化、机电一体化、计算机相关专业毕业设计的同学尤其是选题偏工业控制的二是刚入行做PLC编程的初级工程师想找一个完整案例练手三是对运动控制感兴趣、想了解PLC在实际设备中怎么落地的爱好者。需要的基础知识包括基本的电气常识知道继电器、接触器、变频器是干嘛的、PLC编程入门梯形图能看懂能写简单逻辑、以及一点点串口通信概念。如果这些都不熟也没关系我会在关键地方补基础说明但完全零基础的话建议先花两天看看PLC编程入门基础知识。2. 系统整体方案设计与选型思路2.1 控制器选型为什么我最终选了西门子S7-200 SMART市面上常见的PLC品牌有西门子、三菱、汇川、台达、欧姆龙等。这个项目我最终用的是西门子S7-200 SMART系列型号CPU SR30。选它的理由很实际性价比SR30自带18路数字量输入、12路数字量输出继电器输出型可以直接驱动小功率接触器省去中间继电器。对于跑步机这种I/O点数需求大约10个输入、8个输出、2路模拟量来说刚好够用不用额外扩展模块。模拟量集成SR30本体不带模拟量输出但我加了一块SB AQ01信号板提供一路0-10V模拟量输出用来控制变频器频率。这样比用PWM滤波转模拟量稳定得多。编程软件友好STEP 7-Micro/WIN SMART对新手很友好梯形图编辑、状态监控、交叉引用都做得很直观。而且网上资料多遇到问题容易搜到答案。通信能力本体自带RS485口支持Modbus RTU主站/从站跟触摸屏通信不需要额外模块。三菱FX系列也是常见选择尤其是FX3U指令丰富、仿真软件成熟。但三菱的模拟量模块价格偏高而且GX Works2的界面我个人觉得不如西门子顺手。汇川PLC这两年用的人多了Codesys平台扩展性强但毕设场景下资料相对少一些遇到坑不好爬。注意如果学校实验室只有三菱PLC那就用三菱不要为了选型而选型。核心是理解控制逻辑品牌是次要的。2.2 驱动方案变频器三相异步电机 vs 直流电机跑步机驱动有两种主流方案方案A三相异步电机变频器。这是商用跑步机最常见的配置。变频器接收PLC的模拟量信号0-10V或4-20mA来调节输出频率从而控制电机转速。优点是电机皮实耐用、扭矩大、维护成本低缺点是低速时扭矩会下降需要矢量控制型变频器才能做到低速高扭矩。方案B直流无刷电机驱动器。家用跑步机多用这种。驱动器接收PWM或模拟量信号调速。优点是低速扭矩好、噪音小、体积小缺点是电机碳刷有刷方案需要维护无刷驱动器成本较高。我选的是方案A变频器用西门子V20电机用0.75kW三相异步电机。原因很简单实验室现成的设备而且V20支持模拟量输入调速跟S7-200 SMART的AQ01信号板直接对接接线简单。V20的参数设置也不复杂主要改几个关键参数就能跑起来。变频器关键参数设置如下参数号含义设定值说明P0010调试参数1快速调试模式P0100电机类型050Hz地区功率单位kWP0304电机额定电压380V按电机铭牌P0305电机额定电流按铭牌比如1.9AP0307电机额定功率0.75kW按电机铭牌P0310电机额定频率50Hz按电机铭牌P0311电机额定转速1400rpm按电机铭牌P1000频率设定源2模拟量输入P1080最小频率0HzP1082最大频率50HzP1120加速时间3s根据跑步机惯性调整P1121减速时间3s太短会过压报警实操心得P1120和P1121这两个参数特别关键。加速时间太短电机会堵转、变频器报过流减速时间太短电机会进入再生制动状态变频器直流母线电压升高报过压。我一开始设1秒结果每次停机都报F0002过压故障后来改成3秒就稳了。如果负载惯性大甚至要设到5秒以上。2.3 速度检测光电编码器还是霍尔传感器要闭环控制速度必须知道电机实际转了多少。常见方案增量式光电编码器精度高通常几百到几千线输出A/B两相脉冲。PLC用高速计数器采集。缺点是价格相对高安装对中要求高。霍尔传感器便宜通常每转几个脉冲精度低但够用。跑步机测速不需要太高精度±0.1km/h完全够。接近开关测速齿盘工业上常用皮实耐用但低速时脉冲间隔大响应慢。我用的是欧姆龙E6B2-CWZ6C增量式编码器360线A/B/Z三相输出。A相接PLC的I0.0配置为高速计数器HSC0的模式9A/B相正交计数。这样不仅能测速还能判断方向。360线意味着电机转一圈产生360个脉冲经过减速比换算就能得到跑带线速度。速度换算过程编码器装在电机轴上电机轴通过多楔带驱动前滚筒前滚筒直径80mm减速比假设为1:3电机转3圈滚筒转1圈。那么滚筒转一圈编码器产生360×31080个脉冲。滚筒周长π×80mm≈251.3mm。所以每个脉冲对应跑带位移251.3/1080≈0.2327mm。如果PLC在1秒内计到N个脉冲跑带速度N×0.2327mm/s。换算成km/h就是N×0.2327×3.6/1000≈N×0.000838km/h。这个计算过程在论文里要写清楚答辩时老师很可能会问“你的速度是怎么算出来的”。2.4 人机交互触摸屏选型与通信HMI我选的是威纶通TK6071iP7寸电阻屏支持Modbus RTU。通过RS485跟PLC的Port0连接PLC做Modbus主站触摸屏做从站。为什么PLC做主站因为PLC要主动读取触摸屏上设定的速度值、模式选择等参数同时把当前速度、时间、距离写回触摸屏显示。通信参数设置波特率9600数据位8停止位1无校验。PLC侧用Modbus RTU主站指令库MBUS_CTRL和MBUS_MSG触摸屏侧在EB Pro软件里添加PLC设备选择Modbus RTU站号设为1。地址映射要提前规划好比如触摸屏地址PLC地址含义数据类型4x0001VW100设定速度整数单位0.1km/h4x0002VW102当前速度整数单位0.1km/h4x0003VW104运行时间整数单位秒4x0004VW106距离整数单位米4x0005VW108卡路里整数单位卡0x0001M0.0启动按钮位0x0002M0.1停止按钮位0x0003M0.2急停状态位注意Modbus地址和PLC的V存储区地址不是一一对应的需要在PLC程序里做映射。比如MBUS_MSG指令的Addr参数填40001对应的是Modbus保持寄存器地址PLC侧要自己写程序把这个值读到VW100里。很多同学在这里搞混导致触摸屏显示的数据不对。3. 硬件接线与I/O分配实操3.1 I/O点表规划做PLC项目第一步永远是列I/O点表这步做扎实了后面编程就是顺水推舟。我的点表如下数字量输入DI地址功能说明I0.0编码器A相高速计数器HSC0I0.1编码器B相高速计数器HSC0I0.2启动按钮常开按下为1I0.3停止按钮常开按下为1I0.4急停按钮常闭正常为1按下为0I0.5安全锁开关常闭磁吸夹在位为1I0.6变频器故障信号常开故障时闭合I0.7上限位开关常闭用于坡度上限保护I1.0下限位开关常闭用于坡度下限保护I1.1模式选择1手动/自动I1.2模式选择2间歇/爬坡数字量输出DO地址功能说明Q0.0主接触器线圈控制电机动力通断Q0.1变频器运行使能接变频器DI1Q0.2变频器正转接变频器DI2Q0.3变频器反转接变频器DI3跑步机一般不用Q0.4坡度电机正转继电器输出Q0.5坡度电机反转继电器输出Q0.6报警指示灯红色LEDQ0.7运行指示灯绿色LED模拟量输出AO地址功能说明AQW0变频器频率给定0-10V对应0-50Hz3.2 电气接线关键细节主回路部分三相电源经过断路器→接触器→变频器→电机。接触器由Q0.0控制急停按钮串在接触器线圈回路里这样即使PLC程序跑飞按下急停也能物理切断电机动力。这是安全设计的基本原则软件保护加硬件保护双重冗余。控制回路部分PLC的24V DC电源单独用开关电源供电不要跟变频器共用。变频器工作时会产生高频干扰共用电源可能导致PLC误动作。编码器信号线用屏蔽双绞线屏蔽层单端接地接PLC侧另一端悬空避免形成地环路。模拟量输出接线SB AQ01信号板的0-10V输出接到变频器的AI1端子变频器的GND接到信号板的0V。注意极性不要接反接反了变频器收不到信号。如果变频器需要4-20mA信号可以在AQ01输出端并联一个500Ω电阻把0-10V转换成4-20mA。踩过的坑我第一次接线时把编码器的A/B相接反了结果高速计数器计数方向跟实际转向相反速度显示是负数。后来把I0.0和I0.1对调就好了。所以调试时先手动转一下电机看HSC计数值是增加还是减少确认方向正确再继续。3.3 高速计数器配置S7-200 SMART的HSC0支持多种模式我用的模式9是A/B相正交计数器1倍频。配置步骤在STEP 7-Micro/WIN SMART里打开“系统块”选择“高速计数器”选项卡。使能HSC0模式选9计数方向设为“向上计数”。初始值设为0预设值设为0不用中断的话预设值无所谓。在程序里用HSC0指令启动计数器用MOVD指令读取HC0的当前值。测速程序逻辑用一个100ms的定时中断SMB34100在中断程序里读取HC0当前值减去上一次的值得到100ms内的脉冲数然后清零HC0或者记录差值再根据前面推导的换算公式算出速度存入VW102。这里有个细节HC0是32位计数器读取要用MOVD HC0, VD200这样的双字传送。如果直接用MOVW读低16位计数器超过65535就会出错。跑步机速度不高100ms内脉冲数不会超过这个值但养成用双字的习惯没坏处。4. 梯形图程序核心逻辑拆解4.1 主程序结构我的程序分成了几个子程序初始化、安全逻辑、速度控制、坡度控制、HMI通信、报警处理。主程序里按顺序调用每个扫描周期执行一遍。这种模块化写法比把所有逻辑堆在主程序里清晰得多调试时也容易定位问题。初始化子程序负责上电时清零变量、复位输出、启动定时中断。安全逻辑子程序处理急停、安全锁、变频器故障、限位开关这些保护条件任何一个触发都会立即切断Q0.0和Q0.1并置位报警标志。速度控制子程序做PID运算输出模拟量给变频器。HMI通信子程序用MBUS_MSG指令读写触摸屏数据。4.2 安全逻辑必须做到“失效安全”安全逻辑的设计原则是“失效安全”Fail-Safe意思是任何元件故障时系统都趋向于安全状态停机而不是危险状态继续运行。具体实现急停按钮用常闭触点接I0.4正常时I0.41按下时I0.40。程序里用常开触点判断I0.4如果I0.40就立即停机。这样即使按钮线断了I0.4也会变成0系统停机不会因为断线而失去保护。安全锁开关同理用常闭触点。磁吸夹在位时开关闭合I0.51夹子脱落时开关断开I0.50程序检测到就停机。变频器故障信号用常开触点故障时闭合I0.61程序检测到就停机并报警。所有安全条件用串联逻辑只要有一个不满足Q0.0和Q0.1就断开。梯形图里大概是这样Network 1: 安全链 I0.4 I0.5 I0.6 M10.0 --| |----| |----|/|----( )----M10.0是“安全允许”标志只有急停未按、安全锁在位、变频器无故障时M10.0才为1。后面所有启动逻辑都要串上M10.0。实操心得安全逻辑一定要在程序最前面而且要用独立的网络写不要跟其他逻辑混在一起。答辩时老师看到你把安全逻辑单独拎出来会觉得你工程思维到位。另外急停按钮建议用带自锁的蘑菇头按钮按下后旋转复位防止误碰后自动恢复。4.3 PID速度闭环参数整定过程速度闭环用PID指令实现。S7-200 SMART有自带的PID指令块PID0_INIT等但用起来稍显繁琐。我后来自己写了一个简化版的位置式PID在定时中断里每100ms执行一次效果也不错。PID的输入是设定速度VW100和实际速度VW102的差值输出是0-27648的整数对应0-10V模拟量。比例系数Kp、积分时间Ti、微分时间Td三个参数需要整定。我的整定过程先把Ti和Td设为很大相当于关闭积分和微分只留Kp。Kp从0.5开始逐渐增大到系统开始振荡然后取振荡临界值的60%作为最终Kp。我最终Kp1.2。然后加积分Ti从大到小调。Ti太大响应慢太小会超调。我最终Ti2秒。微分基本不用因为速度信号有编码器噪声微分会把噪声放大。Td设为0。整定后的效果设定速度从3km/h跳到6km/h实际速度大约1.5秒后稳定到6km/h超调量约5%稳态误差小于0.1km/h。对于跑步机来说这个性能足够了。注意PID输出要限幅防止积分饱和。比如输出限制在0-27648之间当输出达到限幅值时停止积分累加。这个在程序里用一个比较指令就能实现。4.4 坡度控制与模式切换坡度控制用一个24V直流减速电机带动丝杆正转坡度上升反转坡度下降。Q0.4和Q0.5分别控制正反转继电器。上下限位开关I0.7和I1.0串在继电器回路里做硬件保护同时程序里也做软件判断。模式切换用I1.1和I1.2两个开关组合出四种模式手动、自动、间歇、爬坡。手动模式下速度由用户直接设定自动模式下按预设程序运行比如先慢走3分钟再快跑5分钟再慢走3分钟间歇模式是快慢交替爬坡模式是速度不变但坡度周期性变化。模式切换的程序用比较指令判断I1.1和I1.2的状态然后置位不同的模式标志位。每个模式对应一段独立的逻辑用跳转指令JMP跳过不相关的代码减少扫描时间。5. 上位机监控与数据记录5.1 SCADA连接PLC的实操步骤热词里“scada如何与plc连接”被搜了很多次说明这是很多人的痛点。我用的是组态王6.55做上位机监控连接S7-200 SMART通过以太网。步骤PLC侧设置IP地址比如192.168.2.1子网掩码255.255.255.0。电脑侧设置同网段IP比如192.168.2.100。组态王里新建工程选择“西门子S7-200 SMART TCP”驱动。设备地址填PLC的IP和机架槽号S7-200 SMART固定为2,0。定义变量时寄存器地址按西门子格式填比如VW100填“VW100”M0.0填“M0.0”。连接成功后组态王就能读写PLC的V区和M区了。我做了几个画面主监控画面显示当前速度、时间、距离、卡路里参数设置画面可以修改PID参数和模式参数报警画面记录历史报警。踩过的坑组态王连接S7-200 SMART时PLC的“允许PUT/GET通信”选项要勾上否则连不上。这个选项在STEP 7-Micro/WIN SMART的“系统块→通信”里。我一开始没勾折腾了半天以为网线有问题。5.2 数据记录与导出组态王自带历史曲线和报表功能可以把速度、时间等数据记录到数据库里。我设置的是每5秒记录一次保存到Access数据库。做毕设答辩时把历史曲线调出来展示能直观看到速度跟随设定值的变化过程比单纯说“PID效果很好”有说服力得多。如果不想用组态王也可以用Python写个简单的Modbus客户端通过Modbus TCP读PLC数据用matplotlib画实时曲线。这样论文里还能加个“基于Python的数据采集”章节显得工作量更饱满。Python代码大概长这样from pymodbus.client import ModbusTcpClient import time import matplotlib.pyplot as plt client ModbusTcpClient(192.168.2.1, port502) client.connect() speeds [] times [] start time.time() while time.time() - start 60: rr client.read_holding_registers(100, 1, unit1) speed rr.registers[0] / 10.0 speeds.append(speed) times.append(time.time() - start) time.sleep(0.5) client.close() plt.plot(times, speeds) plt.xlabel(Time (s)) plt.ylabel(Speed (km/h)) plt.show()这段代码每0.5秒读一次VW100Modbus地址40001持续60秒然后画曲线。注意pymodbus的版本不同API可能有差异我用的是3.x版本。6. 常见问题与排查技巧实录6.1 变频器不启动或启动就报故障这是调试阶段最常见的问题。排查顺序现象可能原因排查方法变频器无显示电源未接通检查断路器、接触器是否吸合显示但电机不转使能信号未给检查Q0.1是否输出变频器DI1是否亮启动报F0002过压减速时间太短增大P1121启动报F0001过流加速时间太短或负载卡死增大P1120手动盘车检查机械速度上不去模拟量信号不对用万用表测AI1电压0-10V对应0-50Hz速度波动大PID参数不合适减小Kp或增大Ti我遇到过一次变频器报F0005过热查了半天发现是变频器散热风扇被灰尘堵了。清理后恢复正常。所以实验室设备也要注意维护别以为是新设备就不会坏。6.2 高速计数器计数不准编码器计数不准通常有几个原因一是信号干扰编码器线没屏蔽或屏蔽层没接地二是PLC输入滤波时间设得太长高速脉冲被滤掉了三是A/B相接反导致方向错误。S7-200 SMART的DI点默认滤波时间是6.4ms对于高速脉冲来说太长了。需要在系统块里把I0.0和I0.1的滤波时间改成0.2ms或更小。这个设置很多人不知道导致编码器脉冲丢了一大半速度显示只有实际值的一半。独家技巧如果编码器线比较长超过2米建议在PLC输入端加一个RC滤波100Ω电阻串1000pF电容能有效抑制高频干扰。但电阻不能太大否则会衰减信号幅度。6.3 触摸屏通信时断时续Modbus RTU通信不稳定的原因通常是波特率不匹配、站号冲突、终端电阻未接、线缆质量差。排查步骤先确认PLC和触摸屏的波特率、数据位、停止位、校验方式完全一致再确认站号唯一PLC主站站号通常为0触摸屏从站站号为1RS485总线两端各接一个120Ω终端电阻线缆用双绞屏蔽线A接A、B接B不要交叉。如果还是不稳定可以降低波特率试试。9600不行就降到4800虽然慢但稳。毕设场景下数据量不大4800完全够用。6.4 程序下载后PLC不运行有时候程序下载进去了但PLC的RUN指示灯不亮输出也没反应。常见原因一是PLC处于STOP模式需要手动拨到RUN或者用软件启动二是程序里有致命错误比如除零、数组越界PLC会自动进入STOP三是系统块配置错误比如高速计数器模式跟实际接线不匹配。排查方法在STEP 7-Micro/WIN SMART里点“PLC→信息”查看错误代码。如果是致命错误错误代码会显示具体原因。常见错误代码0003是“非法指令”通常是程序里用了不支持的指令0004是“非法地址”通常是访问了不存在的存储区。7. 论文写作与答辩准备建议7.1 论文结构怎么搭计算机毕业设计的论文通常要求包含绪论、需求分析、系统设计、系统实现、系统测试、总结与展望。这个题目虽然偏电气但套进计算机毕设框架也完全可行。绪论部分讲跑步机市场现状和PLC在运动控制中的应用需求分析部分列功能需求和性能指标系统设计部分画框图、选型、I/O分配系统实现部分贴梯形图截图和关键代码系统测试部分放实测数据表格和曲线图总结部分写遇到的问题和解决方法。注意论文里的图不要直接截图软件界面最好用Visio或draw.io重画一遍显得专业。梯形图可以截图但要保证清晰关键网络用红框标出来。7.2 答辩时老师最可能问的问题根据我和同学的经验答辩老师常问的问题包括你的PID参数是怎么整定的为什么选这个值如果编码器坏了系统会怎么样有没有做故障检测急停按钮按下后PLC程序里是怎么处理的硬件上呢为什么选PLC不选单片机PLC的优势在哪里你的系统最大能支持多快的速度受什么限制Modbus通信的地址是怎么映射的如果触摸屏显示不对怎么排查这些问题在论文里都要有明确答案答辩时才能对答如流。特别是PID整定和故障检测几乎是必问的。7.3 源码和文档整理毕设交付通常包括PLC程序文件.smart或.mwp、触摸屏工程文件.mtp、上位机工程组态王工程或Python脚本、电路图CAD或EPLAN、论文文档。整理时注意程序文件要加注释变量名要有意义不要用VW100、M0.0这种默认名改成“SetSpeed”、“EmergencyStop”这种一看就懂的。电路图要标注线号和端子号方便别人照着接线。论文里的代码片段要跟实际程序一致不要贴了代码但程序里找不到。最后分享一个小技巧答辩前把整个系统录一段视频从启动、调速、急停、报警到停机完整走一遍。答辩时如果设备临时出问题可以直接放视频不至于冷场。这个视频也可以作为论文附件增加工作量证明。这个项目做下来最大的收获不是学会了某个指令而是理解了工业控制“安全第一、稳定压倒一切”的思维方式。跑步机看起来简单但要把安全逻辑、调速性能、人机交互都做好需要反复调试和优化。我在实际调试中改了三版程序才达到比较满意的效果第一版安全逻辑有漏洞第二版PID振荡第三版才稳定下来。如果你也在做类似的项目建议先把安全逻辑写扎实再调PID最后做通信这个顺序能少走很多弯路。