简介一份面向工业自动化工程师、设备调试人员及机电专业学生的技术资料内容为PLC与博世力士乐350拧紧系统基于EIPEthernet/IP协议的信号控制流程图。文档聚焦螺丝枪拧紧场景从逻辑控制出发依次阐述监控状态信号配置、EDS文件生成、手动程序导出、步骤修改日期时间语言选择、程序下载、发送控制指令以及报警消除等完整流程能够帮助读者建立PLC与拧紧系统之间通信的整体框架。资源包为doc格式共1个文件大小1.34MB内容精炼便于直接查阅或打印用于现场对照。目前已有672人学习下载受到相关技术人员的关注。通过这份流程图读者可以快速理解PLC如何通过EIP协议远程监控与操控博世力士乐350拧紧系统特别是在处理螺丝枪状态读取、程序下装、报警复位等实际环节时可大幅减少调试摸索时间适合作为项目调试、设备维护及课程设计的实用参考资料。1. PLC和博世力士乐350拧紧系统信号控制EIP流程图先看懂这条链路再动手产线设备一多最怕的不是拧紧枪本身出问题而是PLC和拧紧控制器各说各话。博世力士乐350拧紧系统通过EtherNet/IPEIP和PLC交换信号看似只是几条报文实际涉及输入输出数据映射、状态握手、时序匹配和流程图设计。很多工程师第一次接手时把EIP当成普通网口直连结果调试时不是数据对不上就是拧紧结果半天不回来。这篇文章把PLC和博世力士乐350拧紧系统之间的EIP信号控制链路讲透从数据模型、PLC程序实现到信号流程图绘制再到最常见的排查点一条龙说清楚。适合正在做汽车零部件装配线、电动工具拧紧工位集成或者维护现有350系统的电气和自动化工程师。搞明白这套信号交互逻辑你就不用在现场对着I/O表反复猜了。2. 350拧紧系统的EIP信号模型先搞清楚数据从哪来、到哪去2.1 以太网/IP通信的本质Scanner和Adapter的角色分配博世力士乐350拧紧控制器在EtherNet/IP网络里扮演的是Adapter适配器角色也就是从站。PLC这边需要组态成Scanner扫描器也就是主站。这个角色分配是固定的不是你想改就能改。默认情况下350控制器会周期性地把自己的状态、拧紧结果、测量值等数据推送到PLC的输入区同时从PLC的输出区读取控制指令。这里有一个容易误解的地方EtherNet/IP不是简单的TCP/IP报文收发它走的是CIP协议。PLC扫描器按照设定的RPIRequested Packet Interval请求包间隔周期性地和Adapter交换数据。RPI设得越小数据刷新越快但网络负载也越高。350系统默认常见的RPI在10ms到50ms之间具体要看项目的节拍要求和网络里挂了多少设备。对于新手来说你要做的第一件事不是写程序而是在博世力士乐的配置软件里把350控制器的IP地址、网络名称、输入输出字节长度确认好。这些参数会和PLC侧的组态一一对应任何一个不匹配EIP连接就建立不起来。2.2 输入区信号和输出区信号哪些是状态哪些是命令350拧紧系统的EIP信号通常分成两大块PLC的输入区从350读取和PLC的输出区写入350。输入区核心信号包括系统就绪、正在拧紧、拧紧完成、拧紧结果OK/NG、当前拧紧程序号、扭矩实际值、角度实际值、错误代码等。输出区核心信号包括启动拧紧、停止拧紧、程序选择、复位故障、启用/禁用等。这里要特别强调一点不同项目、不同版本的350固件输入输出数据的排列顺序可能不一样。这不是博世力士乐故意为难人而是因为拧紧系统的功能选项不同数据块长度会跟着变。比如有的项目需要读曲线数据数据块会多出几十个字节。所以不要拿上一个项目的映射表直接套到新项目上一定以当前控制器的EDS文件和实际配置导出为准。数据块里的基本单元是DINT32位有符号整数但有些信号是BOOL位。比如“拧紧完成”可能占用一个DINT里的某一位也可能独占一个DINT。这个排列规则只能通过EDS文件或配置软件的变量列表确认。我见过有人把DINT当成BOOL去判断结果信号永远为假查了半天发现是位偏移搞错了。PLC输入区350 - PLC典型布局示例 偏移地址0: DINT 系统状态字bit0就绪, bit1运行中, bit2故障 偏移地址4: DINT 拧紧结果0无结果, 1OK, 2NG 偏移地址8: DINT 当前程序号 偏移地址12: DINT 扭矩实际值单位0.01 Nm 偏移地址16: DINT 角度实际值单位0.1°这段示例对应的数据块长度是20个字节。实际项目里你打开配置软件的IO映射视图看到的变量名和排列可能比这个复杂但思路一样先按字节偏移定位再按数据类型解析。建议在PLC侧建立一个专属数据块把350的输入区原样映进去之后程序里只用符号名访问不要直接用地址否则后期维护看程序的人会疯掉。2.3 EDS文件与装配让PLC认识这台350EDS文件Electronic Data Sheet是EtherNet/IP设备的“身份证”。博世力士乐350拧紧系统随产品附带EDS文件里面定义了设备类型、输入输出数据长度、参数对象等。你要做的第一步就是把EDS文件导入到PLC编程软件的设备目录里。导入后在硬件组态里添加一个EtherNet/IP扫描器模块然后关联EDS文件对应的设备类型。装配完成后需要注意连接类型的设置。通常选择“Exclusive Owner”连接类型这代表PLC独占控制这个350设备。“Input Only”或“Listen Only”连接通常用于监控或冗余场景不适合作为主控制链路。连接类型选错时PLC能扫描到设备但数据不刷新或者时好时坏。另一个关键参数是RPI。如果整个网络里有多个拧紧站每个站的RPI不要设得太激进。比如10个350站全部使用10ms的RPIPLC的CPU扫描周期和网络带宽都会吃紧。我一般会先按5ms到10ms设单个站等所有站都上线后观察CPU扫描时间和网络统计再决定要不要放宽。这个调整不影响程序逻辑只影响数据刷新周期现场调试时可以灵活处理。3. PLC侧EIP信号控制实现从组态到握手的完整代码思路3.1 在PLC中组态EIP扫描器并绑定350设备以常见的PLC编程环境为例在设备组态界面添加EtherNet/IP扫描器后打开扫描器属性。在“连接”选项卡里新建一条连接选择350控制器的EDS条目。设置“目标IP地址”为350控制器的实际IP比如192.168.1.10“输入长度”和“输出长度”按照EDS文件里的定义填写——但这里注意不同软件版本里输入输出的方向定义可能相反。组态完成后下载程序让PLC和350建立连接。此时观察扫描器模块的状态灯或诊断信息如果连接正常你会看到输入数据开始周期性变化。一个最常见的判断方法让350控制器的显示屏切换到“网络状态”页面或者直接在PLC里监控一个已知会变化的输入值比如系统的当前程序号。如果这个值和350面板上显示的一致说明链路已经通了一半。EtherNet/IP扫描器组态参数示意 设备类型: 350拧紧控制器 (EDS导入) IP地址: 192.168.1.10 连接类型: Exclusive Owner 输入长度: 32 字节 (根据EDS实际值填写) 输出长度: 16 字节 (根据EDS实际值填写) RPI: 20 ms这段组态信息的核心是输入输出长度必须与350侧的配置完全一致。长度不匹配时PLC会报连接超时或设备故障。调试中最常见的翻车现场就是IP地址填错——检查一遍网线插的是不是对应控制器再检查PLC的IP和350的IP是否在同一网段。不要上来就怀疑程序逻辑先确认物理连接和底层通信。3.2 定义350信号映射数据块与符号表在PLC程序中建议单独建立一个全局数据块用于映射350的信号。这样做的目的是隔离通信层和应用层以后换设备型号或调整数据排列时只改映射块不用动工艺逻辑。数据块里的每一个变量都对应350输入区的一个偏移位置注释里写明对应350侧的标志名称。FUNCTION_BLOCK FB_350_MAPPING VAR_INPUT bEnable : BOOL; // 总使能由主程序控制 END_VAR VAR_OUTPUT diSysState : DINT; // 350系统状态字来自输入区偏移0 diTightenResult : DINT; // 拧紧结果来自输入区偏移4 diProgNumber : DINT; // 当前程序号来自输入区偏移8 diTorque : DINT; // 扭矩实际值来自输入区偏移12 diAngle : DINT; // 角度实际值来自输入区偏移16 END_VAR VAR InputBuffer : ARRAY[0..63] OF BYTE; // 输入区缓冲区 END_VAR这个映射块做的事情很单纯把通信驱动写入的原始字节数组按偏移地址拷贝到对应的符号变量。使用字节数组做缓冲区的好处是即使350侧的数据排列发生变化你也只需要调整拷贝语句的偏移量和数据类型而不需要改动上层工艺程序。数据块的拷贝推荐使用内存复制指令或循环赋值。注意DINT在PLC里是4字节对齐偏移地址必须按4的倍数增加。如果350侧的数据排列里有BOOL位内嵌在DINT中你要在拷贝后使用位提取指令——比如某一位表示“拧紧完成”就使用DINT的第某位进行判断而不要单独映射一个字节出来。3.3 启动握手从“就绪”到“启动指令”的状态机设计350拧紧系统的启动不是简单给一个“启动”信号就完事。标准做法是在PLC里设计一个握手状态机防止误触发和半途断信号。状态机的核心状态包括空闲、等待就绪、启动拧紧、等待完成、读取结果、复位。每个状态之间都有明确的跳转条件。CASE StateMachine OF 0: // 空闲 IF diSysState.0 THEN // 350就绪 StateMachine : 1; END_IF; 1: // 等待就绪 IF bStartRequest AND diSysState.0 THEN bIssueStart : TRUE; // 发出启动指令 StateMachine : 2; END_IF; 2: // 启动拧紧 IF diSysState.1 THEN // 350反馈“运行中” bIssueStart : FALSE; // 撤销启动指令 StateMachine : 3; END_IF; // 超时保护 IF timerStart.Q THEN bIssueStart : FALSE; StateMachine : 0; END_IF; 3: // 等待完成 IF diTightenResult 0 THEN // 拧紧结果非空拧紧已结束 StateMachine : 4; END_IF; 4: // 读取结果并复位 IF diTightenResult 1 THEN bOK_Flag : TRUE; // 结果为OK ELSE bNG_Flag : TRUE; // 结果为NG END_IF; StateMachine : 5; 5: // 复位等待 IF bResetAck THEN StateMachine : 0; END_IF; END_CASE这个状态机有几个关键点第一启动指令是“脉冲型”而不是“电平型”。电平一直给着350可能重复触发启动第二350反馈“运行中”后要立即撤销启动指令这个顺序不能反第三必须加超时保护。如果启动指令发出后几秒内350没有反馈运行中要主动撤销指令并报警否则设备会卡死在等待状态。在参数设置上启动指令的脉冲宽度建议设在100ms到300ms之间太短可能被350的扫描周期漏掉太长又容易引起重复触发。超时时间可以设3到5秒根据现场节拍调整。这些经验值来自实际项目调试不是理论推导——每台350的固件版本和现场负载不同最终值要在试运行阶段微调。3.4 结果接收拧紧OK/NG的判断与锁存拧紧结果的接收比很多人想象的要复杂。350给的“拧紧完成”信号只是告诉你“拧完了”结果OK还是NG要看另一个变量。而且这个变量可能只是瞬间有效如果你不在第一时间读取并锁存等到下一个循环就来不及了。因此PLC程序里必须做结果锁存把一次拧紧的结果保存下来供后续工位逻辑使用。IF bNewResult AND (diTightenResult 1) THEN stResult.iOK_Count : stResult.iOK_Count 1; // 记录OK次数 stResult.bLastOK : TRUE; ELSIF bNewResult AND (diTightenResult 2) THEN stResult.iNG_Count : stResult.iNG_Count 1; // 记录NG次数 stResult.bLastOK : FALSE; END_IF;这里的bNewResult是指从350输入区读取的一个“结果有效”标志位通常伴随拧紧完成一起变化。在映射块里你要确认这个标志位是单一DINT里的某一位并且在350侧有明确的含义——是做“有新结果”的上升沿指示还是“结果更新完成”的应答位。不同厂家的习惯不同博世力士乐350一般是拧紧结束后自动把结果写到数据区并置位一个完成位PLC读到后可以发复位命令清掉。实际调试中最容易踩的坑是这个“结果有效”位什么时候清零。如果在PLC侧只是简单读取而从不写复位信号下一次拧紧开始前350不会清除旧结果。但反过来如果你在拧紧过程中就发了复位信号可能把正在拧紧的数据也清掉了。稳妥的做法是把复位信号放在下一次启动握手成功、350开始运行之后再发而不是在结果读取后立即发。3.5 复位与错误处理让系统从故障里自己走出来350拧紧控制器发生故障时会通过输入区的错误代码给出具体的故障原因。PLC侧的故障处理逻辑应该包括识别错误代码、记录到报警历史、触发复位指令、等待故障清除。这里的关键是不是所有故障都能通过软件复位恢复。比如硬件急停、电机过热这类故障350自己会锁住必须现场手动处理。IF diSysState.2 THEN // 故障位为真 // 记录错误代码到报警列表 stAlarm.iErrorCode : diErrorCode; // 若允许自动复位且不是硬件急停类故障 IF bAutoResetEnabled AND (diErrorCode 101) THEN bResetCmd : TRUE; // 输出区复位指令 // 复位脉冲宽度 200ms tonReset(IN : bResetCmd, PT : T#200MS); IF tonReset.Q THEN bResetCmd : FALSE; END_IF; END_IF; END_IF;复位指令同样是脉冲型宽度建议200ms左右。某些型号的350要求复位信号保持一定时间太短则控制器没反应过来。另外复位指令不能一直保持必须在故障清除后撤销否则控制器可能进入“复位一直被触发”的怪异状态。故障码的具体含义要从350操作手册里查不要凭经验猜。不同错误代码对应的处理方式差别很大。我的习惯是做一个故障码文本表PLC读取后直接映射到中文描述显示在HMI上省得每次都要翻手册。这个表需要覆盖常见故障码同时保留未知故障码的显示入口便于日后扩展。4. 绘制EIP信号控制流程图把状态机变成能交给维护人员的图纸4.1 流程图的分层方法系统级、工位级、信号级拿到一个项目先不要急着画PLC程序的状态机而是要从设备整体出发。第一层是系统级流程图画出整条生产线里哪些设备通过EIP和PLC通信其中350拧紧系统处于什么位置第二层是工位级流程图画出某一个拧紧工位的完整动作序列从工件到位、定位夹紧、PLC发启动指令、350执行拧紧、返回结果、到放行第三层才是信号级流程图精确到输入输出的每一位。三层图的核心区别在于读者不同。系统级给项目负责人看工位级给工艺和机械工程师看信号级给自己和电气维护人员看。我见过很多项目只画了工位级流程结果现场接线的人对着图纸不知道哪个信号对应哪根线效率很低。信号级流程图是这篇文章的重点。它要表达四件事信号的来源、信号的去向、信号的时序关系、信号的跳转条件。不是画几条箭头那么简单需要把每个信号变化的前后逻辑关系表达清楚。建议使用带判定菱形的竖版流程并在每个箭头旁边标注触发条件。4.2 信号时序图启动、运行、完成、复位四段式在信号级流程图中最核心的是时序图。一次完整的拧紧过程可以分成四段每段有自己的信号特征。第一段是“启动握手”PLC置位启动指令350检测到后反馈运行中PLC撤销启动指令。第二段是“拧紧执行”350按照当前程序执行拧紧PLC只监控状态不发送任何控制指令。第三段是“结果上报”350完成拧紧把结果写入数据区并置位完成位。第四段是“复位确认”PLC读取结果发复位指令350清除结果位并回到就绪状态。时序图示例绘制重点 PLC_启动 ____|‾‾‾‾|____________ 350_运行中 ____________|‾‾‾‾|____ 350_结果位 ________________|‾‾‾|_ PLC_复位 ___________________|‾‾‾绘制时序图的时候有两条铁律第一横轴是时间纵轴是信号信号的电平用高低表示不要用文字描述代替波形第二必须在图上标出关键的时间参数比如启动脉冲宽度、350响应时间、结果保持时间。这些参数如果你不标维护人员只能靠猜。4.3 状态跳转图与异常分支画上那根“超时”的线除了正常的四段式时序状态跳转图里还必须把异常分支画出来。最常见的异常包括启动后350无响应、拧紧中途停止、结果超时未返回、复位后故障未清除。每个异常分支都要有对应的处理动作和报警输出。画异常分支时有一个原则宁可多画一条指向“等待人工介入”的路径也不要让状态机在异常中循环。有些工程师喜欢在异常时自动重试比如启动超时就重新发启动指令这在某些简单设备上可行但在拧紧系统上很危险——万一是机械卡阻导致350没启动自动重试可能让工件报废甚至损坏拧紧轴。状态跳转逻辑异常分支 正常路径 空闲 - 启动 - 运行 - 结果 - 复位 - 空闲 异常1: 启动超时(3s未收到运行中) - 报警 - 等待人工复位 异常2: 拧紧中途350故障 - 记录错误码 - 报警 - 等待人工复位 异常3: 结果位已置位但数据非法 - 按NG处理 - 报警 - 等待人工复位这里把“结果数据非法”单独列出来因为实际项目中经常出现完成位已经置位但扭矩值是0或者明显超出量程。这种情况不能当成OK也不能当成NG应当按“结果不确定”处理让操作工确认。如果当OK放行扭矩不足的工件就流到了下一工位当NG处理虽然保守但如果误判会产生大量返工。最稳妥的做法是加一个“待确认”状态和声光报警。4.4 流程图工具与交付物一份图纸在现场能做什么流程图的最终交付建议使用矢量格式方便维护人员在电脑上缩放查看同时输出一份PDF版本挂在现场触摸屏旁边。画图工具用常见的电气设计软件即可关键是图层和线型要规范。比如用实线表示正常信号流用虚线表示异常分支用粗线表示主流程用细线表示辅助信号整套图纸的颜色体系要一致。图纸上的文字要简洁。每个信号用PLC里的符号名加注释比如“diTightenResult拧紧结果(0无/1OK/2NG)”。不要只写符号名不写注释也不要只写中文不写符号名因为调试程序时你需要用符号名去监控而现场维护人员只认中文。两边都对得上这张图才有实际使用价值。交付的图纸不仅包括流程图本身还应当包含一张信号清单表。表格里有信号方向、PLC地址、350侧名称、数据类型、初始值、备注六列。这张表是连接电气图纸、PLC程序和350配置文件三者的桥梁。做好这张表后期设备出问题时排查时间能缩短一大半。5. EIP信号控制避坑指南现场调试的5个血泪教训5.1 连接建立了但数据不变先查RPI和连接类型现象PLC诊断显示EIP连接已建立设备也在扫描器列表里可是PLC读到的输入数据一直是0或不变。原因最可能是连接类型选错了。选了“Input Only”或“Listen Only”时PLC只能收不能发350自然不会执行启动指令。另一种可能是RPI值过大比如设成了100ms数据刷新慢到你监控时感觉不到变化。还有可能是IP地址冲突导致数据混串。解决打开扫描器连接属性确认连接类型为“Exclusive Owner”RPI设为20ms以内。然后在PLC里强制写入一个输出数据比如把程序号改成另一个值观察350面板是否同步变化。如果变了说明输出通路正常如果没变检查350侧的IO配置是否启用了EIP接口。5.2 启动指令发出后350没反应脉冲宽度与扫描周期的赛跑现象PLC状态机已经进入“启动”状态启动脉冲也输出了但350就是不动作。用监控表看350的“运行中”反馈始终为假。原因350的EIP输入映射需要经过内部处理周期。如果启动脉冲宽度小于350的扫描周期控制器还没检测到这个脉冲信号已经被撤销了。另一个原因是PLC程序里把启动信号写在了某个条件分支内当条件不满足时输出被复位导致350实际收到的只是一瞬间的抖动。解决把启动脉冲宽度从100ms改到500ms短时间内不会造成重复触发。同时在PLC程序里做一个状态位确认脉冲确实写到了输出区。如果是多台350同时控制还要检查PLC的周期扫描时间确保在扫描时间内编程逻辑能完整执行一轮。5.3 拧紧完成后结果是旧数据缺少“结果有效”标志判断现象有时候读取的拧紧结果和实际不一致或者明明这次是NG读到的却是上次OK的数值。原因350的结果数据区在完成了一次拧紧后不会自动清零。如果你的PLC程序只判断“结果值等于1”而忽略“结果有效”标志位那么当350还没更新结果但旧值仍为1时PLC会误判当次拧紧OK。解决先判断“结果有效”标志位的上升沿再读取结果值。上升沿用PLC的边沿检测指令如R_TRIG实现不要用电平判断。在程序里加一个“结果已读取”的应答信号让350知道PLC已经取走了数据这样可以避免误判和重复计数。5.4 复位后状态机卡死没有等待故障清除确认现象按下复位按钮后HMI上EPS故障已经消失但PLC状态机仍然停留在“等待复位”状态无法回到空闲。原因350的故障清除不是即时的。复位指令发出后控制器需要几百毫秒来处理和恢复内部状态重新置位“就绪”位。如果PLC在复位脉冲结束后立即检查“就绪”位就可能看到还为假于是认为复位没有生效继续等待。解决在复位完成后设置一个1到2秒的延时再检查就绪位。同时增加一个“复位失败”的判定条件比如复位指令发出3秒后就绪位仍为假就要输出报警而不是无限等待。这个延时参数要写在程序里现场调试时按350实际恢复时间微调。5.5 断电重启后350数据区乱套PLC和350的上电时序不一致现象设备断电再上电后有时350通信正常拧紧程序也不算错但PLC里的扭矩值和角度值明显不对或者直接显示一个异常大的数字。原因PLC和350的上电时间不同。PLC启动快先建立了EIP连接但350还在初始化过程中内部数据块尚未完全准备好。此时PLC扫描到的数据是350刚上电的默认值或中间状态如果PLC此时没有做初始化清零旧数据就会一直保留并被当作有效数据处理。解决在PLC侧EIP连接建立的第一个扫描周期不要使用输入数据。加一个“首次通信有效”的检测逻辑比如连续10个扫描周期数据都稳定后再开启工艺逻辑。更稳妥的做法是在PLC程序里增加一个上电初始化状态等待350的“系统就绪”位为真后再进入自动运行模式。这样无论上电顺序怎么变都不会读到无效数据。6. 进阶验证技巧用一台PLC和一台350仿真器验证信号逻辑调试现场设备的时间永远不够用但有一种做法能把大部分信号逻辑问题在上线前解决把PLC程序和350的仿真器离线跑一遍。博世力士乐350的配置软件通常支持仿真模式可以模拟控制器的输入输出数据区让你在没有物理设备的情况下验证PLC侧的握手逻辑和数据处理代码。这样做最大的好处是不需要等设备到场就能写程序和画流程图而且仿真环境里你可以随意制造异常场景——比如故意让仿真器不响应启动指令测试PLC的超时保护是否有效。不过要注意仿真器不能完全替代实物验证因为仿真的时序是理想化的真实350的响应延迟、通信抖动都要在现场用示波器或PLC诊断功能重新校一遍。验证时建议关注三个指标启动指令发出到350反馈运行中的延迟、拧紧结束到PLC读到结果位的延迟、复位指令发出到350就绪位重新置位的延迟。这三个时间参数是后续优化节拍和排查通信瓶颈的基础。把它们记录在流程图上比写在笔记本里有价值得多。对于已经上线的设备另一个实用技巧是抓取EIP报文。在交换机的镜像端口接一台笔记本用Wireshark同时抓PLC和350的通信报文重点看两个方向的数据变化是否符合流程图的预期。这个方法在排查“PLC发了指令但350没执行”和“350上报了结果但PLC没收到”这两类问题时特别有效——指令有没有发出、数据有没有到达抓包一看便知不用再靠猜。结合仿真验证和报文抓取一个拧紧工位的EIP信号逻辑调试时间通常能从一天压缩到半天。我在现场的习惯是先把流程图画清楚再在仿真器上跑通所有正常和异常分支最后才让设备通电联调。这样做的实际效果是真正在现场遇到问题时大部分已经是机械或电气硬件层面的问题而不是程序逻辑问题排查范围一下子小了很多。这套方法不是只适用于博世力士乐350同样结构的EIP拧紧系统只要把数据映射表和信号定义换掉验证思路完全复用。希望帮到你。本文还有配套的精品资源点击获取