这是一个很简单的单机应用系统,采用S7-1200系列PLC进行控制,应用场景见下图

黄色部分为此单机系统控制范围,缓存斗之前由整个工厂控制系统负责(S7-1500),单机控制系统通过Profinet智能设备方式与工厂控制系统进行通信也可以独立运行(需要设计单击控制触摸屏程序)。
简单介绍下工作步骤
1
:工厂控制系统负责往缓存斗里放料,缓存斗下有个卸料闸门,打开闸门往移动料斗里放料。
2:移动料斗所在的称量位置可能装有称重单元,重量达到设定重量后,移动料斗,开始启动,往目标位置移动(目标位置与启动命令来自于工厂控制系统PLC)。
3:到达目标位置后,移动料斗停止运行,同时打开放料闸门,当移动料斗下料位感应不到有物料后,开始关闸门。
4:闸门关到位后,移动料斗开始返回称量位置。
5:在不同的工厂称量位置可以是1...N中任意位置。
好简单的控制要求啊,就是一台电机和一台闸门的控制吗。了解控制要求规划好程序架构后开始程序设计吧。
首先,设计好基本程序架构
整个控制系统程序结构如下:

1:移动料斗控制主程序(SSW_MS_Control_Fct),在OB1中调用;

2: 初始化程序 SSW_MS_PowerOn_Fct,在OB100中调用;
2.1 初始化程序 SSW_MS_PowerOn_Fct
其中调用小车控制程序,SSW_MS_Control_Fct,in参数"firstScan" 设置位1,进行一些数据的初始化;

2.2 SSW_MS_PowerOn_Fct 在OB100中调用

3:其它一些错误处理程序,当然少不了OB1。
程序架构定好了,开始每个软件模块编写吧,最重要的当然是移动料斗控制主程序了。考虑到之前客户供应商的控制程序出现过,某些信号失效的移动料斗一直往一个方向移动直到“撞墙”了电机还在工作的情况,所以,除了在程序上考虑保护外,在硬件上,我们在移动导轨起点终点位置安装了行程开关,当移动料斗接触到形成开关后,直接断开系统主电源,强制保护。
程序设计思路很简单
前面介绍过控制步骤了,这里只写一点移动料斗定位的程序思路。
移动料斗 根据目标位置 判断运动方向,同时开始检测定位计数开关,每次经过一个位置时,计数加1或者减1,实际位置和目标位置只相差一个位置时,系统减速。
当实际位置等于目标位置时停止,开始放料。
放料完成,关闸门,开始返回,同时系统开始计数,当实际位置和称量位置相等,移动料斗停止运行,一个工作循环结束。
按照上面的程序进行调试后,出现了很多异常情况,不得不对自己的程序进行改造了。
下面就调试遇到的主要问题,来说明完善过程吧
1:移动料斗定位出错
情况1:移动料斗在往目标位置运动或者返回称量位置时 ,计数用的接近开关,可能超出了定位铁块,见下图;

早期版本程序,电机刚启动的时候就监视计数,所以这种情况下,会导致定位出错。
解决方案:增加定位计数延时时间。
加个定时器,每次移动料斗启动后,延时一定时间开始监控计数(时间可调啊)。改完,下载,效果还是挺好的,定位出错的情况大大减少了。
情况2:移动料斗在移动过程中,驱动变频突然跳闸,同时,定位开关离定位铁块很近的情况
虽然定位出错的情况大大减少了,但是,在使用过程中还是会出现定位出错情况,经过观察,分析下程序推测可能原因就是,自己在程序里面加了启动延时,但是这延时条件不合适。
解决方案:再次修改,更改延时启动条件,仅在称量位置启动和目标位置返回时,启动计数延时;
情况3:某个位置的定位铁块安装位置不合适,有时定位开关经过时感应不到;
解决方案:增加定位计数信号超时时间。小车在移动过程中,从一个位置到另外一个位置的时间是固定的,因此,设定一个定位开关检测监控时间(时间可调)当超出这个时间后,没有检测到定位信号,系统故障,停止驱动电机,同时发出报警。
最极端的就是定位开关坏了,这种情况在客户前供应商的系统中出现过,偏偏起点和终点的保护开关,采用的是 漫反射广电开关,同时那个漫反射开关也失效了,导致了,移动料斗在不断地“撞墙“.
情况4:移动料斗在经过一个位置时,料斗可能会抖动。或者感应铁块安装位置不合适,导致定位开关感应到多个定位信号(主要发生2根导轨连接处)
解决方案:增加定位计数信号屏蔽时间。移动小车在经过一个位置后,不可能短时间内,就到达下一个位置,因此每次检测到一个位置后(DI的信号滤波在CPU硬件设置里面设置为10ms),在设定时间内多次检测到信号,系统不计数。
2:料斗返回时,残料过多
多次发现,移动料斗返回称量位置时,残料过多的情况。经过观察发现,当放料闸门在放料时,由于传感器精度以及传感器选型原因,明明料斗里面还有很多料,但是,料位传感器提示料斗已空。
解决方案:设定最小放料时间(时间可调),在最小放料时间完成后,同时,料位传感器提示料斗已空,料斗才开始关闸门返回称量位置。
经过了多次“修正”,程序总算稳定运行了!期间还对定时器的应用进行更改过以适配客户一些低固件版本的PLC。
最后,为了方便程序版本管理,将相关标准程序做成模板"Type"。

总结:
相对与经典STEP7,Portal STEP7 SCL编程界面更加友好,参数的声明默认为表格形式,还可以根据喜好,恢复成经典STEP7下的代码形式进行声明;而且在Portal平台下作为标准编程语言,不需要单独安装SCL语言包;得益于Portal平台的"智能提示"功能 使用起来也更加方便;
同时在新编程思想下,该控制程序内部大量使用了IEC定时器,减少了使用全局T定时器,程序内部仅使用静态变量与参数提高了程序的通用性,减少了与外部程序的耦合,并且以“Type”程序模板的形式进行程序管理;
是否采用优化块访问方式,根据自己需要进行选择,建议选择优化块的访问方式;
使用Region/End_Region 进行程序分段,便于阅读;
移动料斗控制主程序类容有点长,部分程序截图如下,全部代码与UDT以附件形式上传



SSW_MS_Control_Fct_.zip
以上附件中包含UDT与FB块的源程序。