西门子智能制造挑战赛中的六部十层电梯程序开发:以太网通信下的PLC S7-1200控制器逻辑设...
6部10层电梯程序,采用以太网通信。 2019年西门子智能制造挑战赛, 6部10层电梯程序,包含各个功能模块。 采用博途软件V14 sp1编程, 采用以太网通信,控制器选用PLC S7-1200。 主要涉及逻辑控制、梯形图语言、置位复位。

当时搞那个电梯项目的时候,我电脑屏幕上密密麻麻的梯形图看得人头皮发麻。六部十层电梯的联动控制,光是想清楚楼层请求的优先级就够喝一壶的。记得最魔幻的一次调试,五号梯在七楼和八楼之间反复横跳,活像卡BUG的游戏角色。

先说说核心的楼层请求处理模块。这玩意儿得用MOV指令把十个楼层的按钮状态打包成WORD类型,操作起来像在玩二进制积木。下面这段代码专门处理上升请求的置位逻辑:
M10.0 DB1.DBX0.0
|----] [----------------------(S)-----|
M10.1 DB1.DBX0.1
|----] [----------------------(S)-----|
...(省略8个楼层)
每个M10.x对应物理按钮的输入信号,一旦按下就直接置位对应的DB块位地址。这时候电梯调度算法就开始疯狂运转,得算清楚哪部电梯响应最快。我们用了个骚操作——把当前电梯位置和请求楼层的绝对差值存在临时寄存器里,然后RS触发器决定响应顺序。

6部10层电梯程序,采用以太网通信。 2019年西门子智能制造挑战赛, 6部10层电梯程序,包含各个功能模块。 采用博途软件V14 sp1编程, 采用以太网通信,控制器选用PLC S7-1200。 主要涉及逻辑控制、梯形图语言、置位复位。

通信这块坑最深,六部电梯的S7-1200通过以太网玩接龙。在博途里配置TSEND_C模块时,凌晨三点的咖啡都压不住想砸键盘的冲动。关键参数设置得像这样:
TSEND_C_1(
REQ := "Send_Trigger", // 发送触发信号
CONT := TRUE, // 持续连接
DATA := P#DB2.DBX0.0 BYTE 10, // 10字节数据块
LEN := 10, // 数据长度
DONE => "Send_Done", // 发送完成标志
BUSY => "Send_Busy") // 忙状态检测
最刺激的是电梯联动测试阶段。当三号梯卡在五楼时,我们突然发现急停复位的上升沿检测没做消抖处理。改完程序后的深夜,六部电梯的楼层指示灯在测试台上交替闪烁,恍惚间有种在指挥钢铁交响乐的错觉。
现在想起来,那些用RESET线圈清除楼层标志的深夜,调试时偶然发现用XOR指令能优化状态切换的惊喜,才是这个项目最上头的部分。毕竟能把一堆铁箱子调教得跟贪吃蛇一样听话,这种成就感可比通关游戏带劲多了。
更多推荐
所有评论(0)