ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

西门子S7-1500 PLC在物流分拣线中的KepServer通信配置实战

西门子S7-1500 PLC在物流分拣线中的KepServer通信配置实战 前阵子刚结束一个物流分拣线的升级项目整套系统用的就是西门子S7-1500PLC做主控。说实话干这行十几年从S7-300、S7-1200一路用过来1500在物流分拣这种节拍快、IO点多、通信要求高的场景里确实能感觉到明显差异。这篇就把这次项目里从硬件组态、程序架构到上位机通信的完整实操过程捋一遍重点是KepServer 4.5连1500PLC的配置这个环节我踩了不止一个坑写出来给大家省点时间。做物流分拣线的人应该都有体会这类项目表面上是PLC控制实际上考验的是通信调度能力和对现场节拍的把控。货物间距控制不好扫码识别率上不去分拣口捅堵轻则影响效率重则整套系统瘫掉。S7-1500在处理这些问题的能力上比之前的CPU确实强了不少运行速度、通信实时性和诊断功能的提升都实实在在反映在现场数据上。不管你是刚入行的电气工程师还是已经在做自动化集成的老手这篇内容都适用。新手能照着把组态和程序框架搭起来老手可以重点看KepServer通信和故障排查这两块。1. 项目整体设计与硬件选型思路1.1 分拣线工艺流程先交代一下项目背景。这是一套中型快递分拣线设计处理能力是每小时5000件主要包含上料段、5个供包台、一条主输送带、条码识别龙门架、滑靴式分拣机、40个格口以及后端集包区。工艺流程大概是这样人工或者自动供包台上件货物进入主输送带经过条码扫描器读取面单信息PLC把条码数据与数据库里的分拣方案匹配得到目的格口号然后根据主线的实时位置计算滑靴动作时序在对应的格口把货物拨入滑道。整个过程中货物之间的距离控制、扫描触发精度、滑靴动作点位计算全靠PLC周期扫描和中断处理来完成。这里面最关键的是时间预算。主输送带运行速度按1.5m/s来计算货物间距最小400mm那么两件货之间经过同一点的时间间隔大约是267ms。也就是说PLC从扫描器拿到一个条码结果到调度滑靴动作所有逻辑必须在几百毫秒内完成否则就会错漏分。S7-1500的位运算指令执行时间是纳秒级而且通信口和IO处理都是硬件级并行架构这种节拍下性能没什么压力但换到S7-300就要考虑扫描周期冲突的风险。1.2 为什么选S7-1500而不是S7-1200或300很多人在选型时会纠结1200还是1500我的原则很简单看数字量和通信规模。S7-1200做60个点的小设备没问题但一到这种上百个IO点、多台变频器走PROFINET、还要接上位机数据采集的项目1500的优势就很明显了。具体说几个对比维度通信性能1500集成PROFINET IRT等时同步实时通信支持分拣线的滑靴驱动要求高速同步响应这个功能不是摆设。1200只支持RT实时通信抖动会大一些。程序容量与寻址1500的工作内存从150KB到10MB可选我们的程序加注释大概占了800KB左右这还不是全部。S7-300如果要跑到这个量级得加存储卡而且老CPU的寻址方式限制也多。诊断能力1500的模块级诊断、通道级诊断是标准功能CPU故障时能直接看到是哪个通道短路、哪个从站丢掉了。这对现场排查的帮助是巨大的。开放性1500直接支持OPC UA服务器功能虽然这次项目用的是KepServer做OPC DA但1500自带OPC UA就意味着以后MES接入有冗余方案。选型阶段测过CPU型号最终用1516-3PN/DP理由是它带第三个PN口可以独立做上位机通信不影响现场总线负荷。1.3 网络拓扑与硬件清单现场网络拓扑按照功能分离的原则设计分两个网段PROFINET设备网主PLC、供包台的分布式IO ET200SP、分拣机变频器G120、条码扫描器、光电传感器接入模块全部走这个网。IP段是192.168.10.x。上位机通信网独立网段192.168.20.xPLC的PN口2接到交换机与KepServer所在的工控机连接。这样上位机的大量轮询不会影响到PROFINET设备通信的实时性。这个做的原因很简单曾经试过单网段上位机OPC通信量一大就有传感器信号偶发延迟。分开网段以后问题直接消失。这个经验建议大家直接学。硬件清单大致如下设备型号数量用途PLC6ES7516-3PN/DP1主控制器分布式IOET200SP IM155-6PN5套供包台IO扩展变频器SINAMICS G1208台皮带/主驱/分拣机驱动条码扫描器基恩士SR-20002套主扫码点与复扫点上位机Dell工控机1KepServer 监控HMI交换机赫斯曼RS203台两网段冗余2. TIA Portal组态与程序架构2.1 硬件组态注意事项编程软件用的是TIA Portal V17组态时有些细节容易忽略这里列一下我这次真实踩过的点CPU固件版本要和TIA版本匹配1516-3PN/DP原厂固件是V2.5TIA V17可以兼容到V2.6但组态时最好保持两者一致。我曾经遇到过组态显示的固件版本和CPU实际不一致导致下载时提示需要更新固件如果现场没有存储卡就麻烦了。ET200SP的从站地址不要在TIA里自动分配手动指定固定IP比如IO1是192.168.10.21IO2是192.168.10.22。固定IP的好处是更换模块后配置不会乱维护人员也好记。设备名称与IP地址分离PROFINET设备是靠设备名称识别而不是IP。更换变频器或IO模块时必须重新分配设备名称否则CPU会报从站故障。用TIA的在线访问功能一键分配即可不要手动改GSD文件。2.2 程序块划分与OB组织块规划程序结构我建议按功能划分FC块而不是把所有逻辑写在OB1里。OB1只做调用组织真正的功能块独立封装。这次项目的程序块清单程序块功能OB1主循环按周期调用各FCOB10时间中断每60秒记录产量与OEE数据OB82诊断中断处理模块故障事件OB121编程错误处理防止CPU停机OB122IO访问错误处理FC_Power_Control所有皮带电机启停逻辑FC_BCR_Read条码扫描数据接收与解析FC_Sort_Task分拣任务分配与路径计算FC_Chute_Counter格口计数与超量报警FC_KepServer_Data上位机通信数据映射OB10这个时间中断很值得说。产量统计和OEE计算如果放在OB1里做会因为扫描周期的波动导致数据不准。放在OB10里每60秒执行一次数据稳定得多。而且OB10可以做LED亮灯的时序控制比如故障灯闪烁用时间中断来驱动比延时定时器可靠。OB82诊断中断默认是开启的很多人忽略它。通过OB82的报警信息可以把模块故障、通道短路这些信息传给上位机显示省去现场查CPU诊断缓冲区的窗口时间。做法是在OB82里读LADDR模块地址和IOState模块状态再写入一个DB故障表KepServer直接读这个DB。2.3 数据块结构与变量规划数据块设计是整个程序架构的核心。我习惯把数据分成三类物理IO映射DB所有输入输出信号统一映射到这个DB程序其他地方不允许直接访问IO地址。这样改线时只改这一个DB和硬件组态即可程序逻辑基本不动。工艺参数DB存放速度设定、距离阈值、分拣点位偏移量、光电延时时间等可调参数。触摸屏或上位机的参数设置页面直接读写这个DB。通信交互DB专门供KepServer/上位机读取的数据区包含产量、设备状态、报警和当前分拣任务列表。通信交互DB的设计有个关键点上位机要读的数据尽量集中放在连续的DB地址里不要东一个西一个。KepServer按地址范围批量读取时效率更高而且不容易读错。我这次把所有上位机需要的数据集中到了一个DB100从DB100.DBD0开始连续排列KepServer配置只要扫一个Device Group就行。3. 核心工艺控制逻辑实现3.1 供包台控制与货物间距调节供包台的任务是把货物按顺序送上主输送带最关键的是控制货物间距。间距太小扫描器和分拣点都没有足够的响应时间间距太大产能上不去。这次的控制策略分两种模式定长模式供包台皮带按设定长度比如1.2米送一段停一下再送下一段保证每件货之间间隔基本均匀。这种方式适合尺寸比较统一的纸箱包裹。用编码器反馈实际皮带位移量PLC高速计数模块采集。每走0.5mm计算一次累计值到位即停。光电触发模式主线上游检测光电和供包台出口光电配合。当上游光电确认前一货物已经完全通过并离开安全间距后供包台才允许启动送下一件。这种方式适合尺寸差异大的包裹。逻辑不复杂但时间参数需要根据主线速度动态修正。两种模式都调试过。定长模式简单稳定但遇到超长或超短的物流件会浪费产能。光电触发模式效率高但供包台频繁启停对电机和变频器的冲击大。最终方案是混合使用标准件走定长异形大件走光电触发。供包台控制的PID调节也有讲究皮带速度闭环用PID控制。速度设定值来自主线的跟踪信号比例增益初始值给30积分时间给5秒微分关闭。这个参数在调试时还算稳定但如果皮带负载变化大建议把积分时间拉长到8到10秒防止速度过冲。3.2 条码扫描与数据解析条码扫描器的接线要考虑触发方式和数据输出的时序。我们用扫描器的外触发模式主线有两个定位光电间隔500mm。当货物刚遮挡第一个光电时扫描器开始连续扫描第二个光电作为数据锁定时刻。这样能保证读码时刻货物位置固定数据一致性高。扫描器通过PROFINET与PLC通信而不是串口。每条码结果是一个字符串包含条码号、读取状态、扫描时间戳。FC_BCR_Read里主要做三件事判断读取状态标志位如果Quality为Good则解析条码内容条码号存入当前货物信息队列与主线的编码器位置关联如果Quality为Bad走复扫逻辑在复扫点再次读取若仍然失败则将该货物自动转入人工处理口。这里有个细节扫描器的数据格式是ACSII码西门子的字符串格式是首字节为最大长度第二字节为当前长度然后是数据内容。KepServer读取时如果类型定义不对会把长度字节当成数据内容读到数据就错位了。这个后面KepServer部分会专门说。3.3 分拣任务分配与点位计算滑靴式分拣机的动作原理是主线上每个货物对应一个推头当货物到达目标格口位置时推头向侧边推出。分拣任务的本质是把条码识别到的目标格口号转换成格口位置对应的编码器计数值然后实时比较货物当前位置和这个计数值相等则触发分拣动作。位置跟踪用编码器分辨率1024脉冲/转装在主动轮上。货物从扫码点运动到各格口的距离存储在DB块的距离表中。比如格口5距离扫码点为35米那么编码器累计值达到理论值时PLC就发出分拣指令。计算公式编码器理论值 距离 / π × 驱动轮直径 × 1024如果驱动轮直径是400mm距离35米那么编码器值大约为35×1000/3.1416×400×1024 ≈ 28512脉冲。这个计算在组态时用数据块初始化调试时根据实际分拣位置微调偏移量。这个系统的难点在于避免相邻货物分拣动作互相影响。假设两个货物目标格口一个是3号一个是4号如果距离过近滑靴动作可能互相干扰。我的解决办法是在分拣任务队列中增加互锁检查只有当上一个货物已经完成分拣动作后才允许下一个执行相邻格口的分拣。这个逻辑用上升沿加延时实现比复杂的队列算法更稳妥实测效果也不错。3.4 格口计数与满满报警每个格口装两个计数器一个感应光电检测货物进入格口一个超声波传感器检测货物堆积高度。PLC里为每个格口分配3个数据总计数、当班计数、超量标志。格口满报警逻辑不是简单的计数到上限而是结合时间和光电状态。当格口光电在设定时间内比如5秒一直被遮挡且计数不再增加才判断为堵塞。这样可以有效防止货物短暂卡滞造成误报警。每次报警触发后上位机也通过KepServer读取到对应格口号大屏上会弹出红色提示。这里想强调一下格口计数器的准确性直接影响报表数据而报表数据是物流项目验收的重要指标。所以计数逻辑要加防抖处理光电输入需要滤波通常用0.2秒的导通延时防止货物间隙反光产生误触发。这个参数在西门子软件里可以通过模块的输入延时配置来实现不占PLC扫描周期。4. KepServer 4.5连接西门子1500PLC完整配置4.1 KepServer版本选择与安装注意KepServer是上位机OPC通信的核心工具做数据采集的人应该都用过。版本方面我用的是Kepware KEPServerEX 4.5这个版本对西门子S7-1500的支持已经比较完善。安装时的注意点尽量安装在专用的工控机上不要和组态软件装在一起虽然也能用但驱动冲突的概率会增加。安装完成后要确认KepServer服务已经启动在Windows服务的KS Service状态要显示正在运行。最关键的一点是本机防火墙要放行KepServer相关的端口否则上位机OPC客户端连不上。S7-1500通信一般用TCP端口102这个端口放行加上KepServer自身用到的端口把防火墙的防火墙状态临时关掉来测连接确认通了再开启并加例外规则。4.2 PLC侧必须配置的两个位置很多人连不上S7-1500问题往往出在PLC侧的防护设置上。S7-1500和S7-1200一样默认是不允许外部OPC通过以太网访问DB块的必须在TIA里把访问权限打开。在CPU组态里打开防护与安全选项卡找到连接机制勾选允许来自远程对象的PUT/GET通信访问。这是第一步。第二步是与KepServer连接的用户名密码。S7-1500从固件V2.0开始默认启用了访问保护KepServer连接时需要填写一个有权访问的PLC用户名和密码。通常在CPU属性的防护与设置里配置用户新建一个KepServer_User权限组选择完全访问。如果不做这一步KepServer的设备状态会显示运行正常但Tag读取的Quality会一直为Bad让人误以为是通信没通。这个问题让我排查了两个多小时。另外不要用Administrator账号连PLC安全策略既不允许也不推荐。4.3 KepServer通道、设备与标记配置KepServer里配置逻辑分三层Channel通道、Device设备、Tag标记。Channel层指的是通信驱动类型。对于S7-1500驱动选择Siemens S7 Plus或者Siemens TCP/IP Ethernet都可以。S7 Plus是新一代驱动更适合S7-1500读写DB块时可以用符号名TCP/IP驱动则是传统的S7驱动需要手动指定DB号和偏移地址。设备层要填PLC的IP地址、机架号和槽号。S7-1500默认设备连接类型可以选择Slot 0或者Rack 0 Slot 1ARM架构的1500一般用Slot 0。这里有个细节S7-1500走S7协议时本地TSAP传输服务访问点和远程TSAP要匹配KepServer通常会自动协商但如果连接失败手动设置TSAP 0x0100可以解决问题。Tag层是核心也是最容易出错的地方。定义Tag时地址表达方式如下访问DB100.DBD12的REAL类型DB100,REAL,12注意逗号分隔。访问DB100.DBW16的INT类型DB100,INT,16。访问DB100.DBX20.0的BOOL类型DB100,BOOL,20.0。访问DB100.DBB24的BYTE类型DB100,BYTE,24。这里有个重要的坑西门子的DB块偏移量默认是从0开始。但TIA中DB某个变量的偏移地址是相对该DB块首地址的绝对字节偏移。KepServer的地址也是按字节偏移来写的。两者看起来一致但有一个例外情况当DB块的优化块访问被启用时DB变量不是按物理偏移排列的KepServer无法按偏移地址访问。必须在DB块属性里把优化的块访问改为标准或者与S7-300/400兼容访问。这个坑非常大我做过三个项目前两个都栽在这里。TIA V13以上版本新建的DB块默认都是优化访问KepServer读取时能看到连接状态正常但Tag值为空或者直接报地址不存在。解决方式是在DB块属性→属性→仅存储在装载内存中下方取消勾选优化的块访问。取消后需要重新编译下载否则不生效。String地址的访问模式下如果DB里有一个字符串变量KepServer的字符串地址表示方式是DB100,STRING,30其中30是这个字符串在DB里的起始字节偏移。读取到的字符串包含长度字节需要做解析处理。最好在PLC侧用一个循环把STRING转换成BYTE数组KepServer再按BYTE数组读取这样简单直接。Device Group的扫描周期设置要根据数据的实时性需求来定。我习惯把产量数据和状态数据放在同一个组扫描周期设为500ms把报警类数据单独一组扫描周期设为100ms。不要所有数据都放在一个组里用100ms扫描因为Tag越多单次通信量越大反而造成延迟。4.4 KepServer实测配置案例直接给一个可靠的配置方案供大家抄作业通道设置Channel NameLogistic_1500DriverSiemens S7 PlusNetwork Adapter本机工控机连PLC的网卡IP192.168.20.80设备设置Device NameMainPLCPLC IP192.168.20.1CPU TypeS7-1500Slot 0Connection Timeout3000ms勾选Auto-demotion当连续3次通信失败自动降级恢复后自动升级Tag组配置标记名地址数据类型说明Total_CountDB100,INT,0Word总产量计数Line_SpeedDB100,REAL,2Float主线实际速度Alarm_CodeDB100,INT,6Word当前报警代码Chute1_CountDB100,INT,8Word1号格口计数PLC_RunStateDB100,BOOL,12.3Boolean运行状态位实测下来这个配置的通信稳定性和时效性都很好KepServer OPC DA的Quality一直为Good延迟控制在100ms以内。4.5 OPC客户端连接测试KepServer装好后要用OPC客户端测试读取。很多人以为KepServer里显示Good就是通了其实那是KepServer到PLC的通信上位机软件到KepServer之间的OPC通信还需要验证。我习惯用KepServer自带的Quick Client来测试打开后可以看到所有已定义的Tag和对应的Value、Quality、Timestamp三项。如果Value能实时变化Quality为Good说明KepServer到PLC通道完全正常。这时候上位机软件再用OPC DA标准接口连接即可。值得注意的是KepServer连1500后Quick Client里新增或删除Tag不需要停止KepServer服务直接刷新就会生效。这一点比老版本要友好调试点位时效率高很多。5. 常见故障与排查方法5.1 PROFINET从站掉站问题项目调试中掉站问题主要出在三个位置ET200SP从站、G120变频器、扫描器。最常见的原因是IP地址冲突或设备名称丢失。排查逻辑按顺序来先看交换机指示灯判断物理链路再ping设备IP确认在线然后用TIA的可访问设备功能扫描最后看CPU诊断缓冲区的具体报错代码。如果从站频繁掉站但物理链路没问题多半是网络中的广播报文过多导致。解决方法是在主PLC和变频器之间增加一个带IGMP Snooping功能的交换机或者把PROFINET设备隔离到单独的交换机端口。IO设备的看门狗时间默认是100ms也可以适当加长到150ms但不要太长否则设备故障时反应会迟钝。5.2 CPU停机与编程错误处理S7-1500的稳定性好但编程时还是可能遇到CPU进入STOP的情况。最常见的元凶是访问了不存在的DB号或数组越界。OB121编程错误OB可以捕获这类错误但前提是程序中没有禁用相关OB。故障排查先在TIA的在线诊断中查看诊断缓冲区。诊断缓冲区里能看到每个错误的详细事件、时间戳和触发位置。有一次分拣线突然停机查诊断缓冲发现是某个DB编号不存在仔细检查发现是复制粘贴时改了DB号但程序里没有修改成功。这个就是最典型的编程低级错误。STOP模式复位方法在线状态下在TIA中执行暖启动即可。如果无法在线通过CPU面板上的模式开关拨到MRES进行内存复位。注意MRES会清楚所有用户程序和组态除非没有其他办法否则不要用。5.3 分拣精确度异常分拣精确度出问题时首先怀疑编码器。编码器连接线如果受到动力电缆干扰会出现脉冲丢失现象导致位置累计值漂移。处理办法是编码器信号线必须使用屏蔽双绞线且屏蔽层单端接地不能与动力电缆绑扎在一起走线槽。编码器本身也可能产生累计误差。虽然理论计算值是对的但机械打滑会导致实际位置偏移。所以我在程序中加入了自动校准功能在主线启动和停止时用第一个格口的定位光电信号校准编码器零点。每隔一段时间编码器脉冲数值会自动与物理位置对应消除累计误差。5.4 KepServer通信常见报错KepServer连接1500常见报错有下面几类这里统计了一个速查表报错现象可能原因解决办法Tag值一直为0或为空Quality BadPLC侧PUT/GET未开启用户名权限不够DB优化访问未关闭开启PUT/GET新建高权限用户取消DB优化访问并重新编译下载Quality Good但值长时间不更新扫描周期设置过长TAG地址类型与实际数据类型不匹配缩短扫描周期核对PLC数据类型连接时提示Access denied用户名密码错误PLC用户权限不足在TIA中检查用户配置重新输入凭据与PLC通信时断时续防火墙拦截网络不稳定交换机端口问题检查防火墙观察通讯丢包率换交换机端口测试读取STRING时数据乱码没有按BYTE数组解析字符串在PLC中把STRING转成BYTE数组KepServer按BYTE读取5.5 几条实用避坑经验调试完这个项目积累了几条特别想说的经验第一KepServer和TIA的通信测试不要用无线网络哪怕信号满格也不要。无线网络存在天然的掉包和时延问题通信故障排查时会浪费大量时间。尽量用有线网络5类以上网线工业环境使用屏蔽线。第二每次修改DB结构后必须重新编译下载CPU并且要停掉KepServer再重新连接。否则KepServer缓存中还是旧的数据结构Tag地址信息会对不上出现读错值的现象。第三KepServer的日志功能要打开。本地日志可以记录所有通信故障的时间和原因排查间歇性故障时非常有利。默认日志可能只记录严重故障要把日志级别调到Debug级别虽然日志文件会大一点但排查问题值得。第四分拣线的边缘测试不要怕烦。把货物间隔调到最小速度提到最高长时间跑3小时以上再去看统计报表。很多偶发的分拣误差短时间测试看不出来但长时间跑一定会暴露。我们最后交付前做了72小时满载测试总共发现了4个偶发问题全部解决后才验收。写在最后的一点心得整套系统稳定运行到现在最大的体会就是西门子1500PLC的优势不在单个指令多快而在于整个系统的通信和诊断能力让现场调试效率明显提升。以前S7-300项目排查一个PROFINET故障可能要在触摸屏和控制柜之间来回折腾很久现在TIA在线诊断一看就能定位加上KepServer的数据可视化问题发现和处理的速度完全是另一个量级。如果大家手头正在做类似的物流分拣项目我的建议是前期一定要把网络拓扑和DB地址规划做扎实。硬件装好后可以再改但几千个Tag的地址一旦确定后期再调整会牵扯到PLC程序、KepServer、上位机界面三处改起来非常痛苦。KepServer连1500这个环节只要记住三条PLC侧开权限、DB取消优化访问、地址格式按DB号,类型,偏移来写基本就不会出大问题。项目交付时最重要的还是数据准确性和持续稳定性这两点做到了剩下的都好说。
返回列表