
写给人看的IFix 5.8与AB PLC通过RSLinx建立点表通信的完整记录搞工控的人应该都有这种经历项目现场急着要数据上位机软件和PLC却怎么都通不上手忙脚乱排查半天最后发现是某个勾选没勾上或者版本位数不对。最近我刚好在做一个项目把IFix 5.8和AB的PLC通过RSLinx连起来做点表通信过程中踩了不少坑也把整个流程理顺了。这篇东西就当作一份踩坑记录加操作手册给后面要碰这套组合的朋友做个参考。先说清楚这套组合是什么。IFix是GE的一套SCADA/HMI软件工业现场用它做上位机监控很常见。AB是罗克韦尔自动化他们的PLC比如ControlLogix、CompactLogix在大型项目里占有率非常高。RSLinx是罗克韦尔官方出的通信中间件负责把上位机软件和AB的PLC连接起来。这三者配合说白了就是IFix负责画面和逻辑RSLinx负责管道PLC负责底层控制。管道不通画面上的数据就全是空的。这套东西适合谁看呢如果你是刚接触IFix和AB通信的工程师或者项目里正好要用IFix 5.8连ControlLogix那这篇文章应该能帮你少走不少弯路。已经熟练的老手也可以看看里面有些细节也许你平时没注意到。1. 整体方案选型为什么绕不开RSLinxIFix要和AB的PLC通信官方支持的方式有好几种比如直接通过OPC、用IFix自带的AB驱动或者通过RSLinx做中转。我最终选择RSLinx不是没有原因的。1.1 三种通信方式的取舍先摆一下我知道的几种方案。第一种是IFix自带的AB以太网驱动直接在驱动配置里填PLC的IP地址就能用看起来最简单。但问题在于IFix自带的AB驱动对PLC型号和固件版本支持有限老版本驱动遇到新版固件的ControlLogix经常出现连得上却读不到数据的情况。第二种是直接用OPC服务器把RSLinx Classic作为OPC ServerIFix作为OPC Client去读。这种方式通用性强但IFix对OPC的组态和点表映射比较繁琐而且OPC通信出问题的时候故障点比较难定位。第三种就是RSLinx作为中间层通过OPC或者DDE接口把数据递给IFix。我最终选的就是这个方案。选RSLinx还有一个现实原因项目里不止IFix一个上位机要读PLC数据还有其他系统也在用RSLinx。共用一套通信中间件维护起来方便也避免多个软件同时抢占PLC通信资源。注意如果你用的是RSLinx Classic要确认版本是 2.6 以上否则对ControlLogix 新版固件的支持会有问题。我在项目里用的是2.7版本整体还是比较稳的。1.2 RSLinx在整套系统里的位置画个简单的数据流向图PLCControlLogix通过以太网线连到交换机RSLinx Classic在工程师站上通过以太网驱动(AB_ETHIP-1)扫描到PLC建立起通信通道。IFix通过OPC客户端功能去访问RSLinx提供的OPC服务器OPC服务器再把PLC里的Tag值映射给IFix。这里有个容易混淆的地方RSLinx里面有通道和驱动两个概念。通道是RSLinx和物理设备之间的通信链路配置驱动是具体的通信协议实现。比如你想走以太网就要建一个类型为EtherNet/IP的驱动然后在这个驱动下面配置PLC的IP地址和槽号。如果你搞混了这两个概念组态的时候会非常迷茫。2. RSLinx侧组态实操建立通道和驱动这部分是整套方案的地基。RSLinx配置不对后面IFix连得再辛苦也是白搭。2.1 安装与版本选择RSLinx Classic安装包一般可以从罗克韦尔官网或者随软件光盘获取。装的时候有几个点需要注意第一安装路径不要带中文和空格否则某些版本的驱动加载会出问题。第二安装时最好把杀毒软件退掉尤其是360这种喜欢拦驱动的软件容易导致通信驱动安装不完整。第三如果你需要OPC功能在安装时一定要勾选OPC Server组件默认安装有时不会装全。我遇到过的情况是RSLinx装好了但是IFix那边始终找不到OPC服务器最后发现是RSLinx安装时没勾选OPC那一项。这个坑非常隐蔽因为RSLinx自己用起来一切正常就是OPC服务没注册到系统里。2.2 创建以太网驱动打开RSLinx Classic的主界面在左侧树形菜单的RSWho窗口里正常情况下能看到本机的通信驱动。如果你第一次打开里面是空的需要手动添加。右键点击RSWho窗口的空白处选择Configure Drivers在弹出的对话框里选择驱动类型。这里选EtherNet/IP Driver然后给它起个名字比如AB_ETHIP-1。确定之后RSLinx会自动扫描局域网里的AB设备。如果你发现扫描不到PLC先在命令行里ping一下PLC的IP地址确认网络通不通。如果网络通却扫描不到检查一下PLC的以太网模块IP和你的电脑是否在同一个网段并且PLC的固件版本是否被RSLinx支持。还有一个常见问题是PLC的以太网模块上配置了允许通过IP访问的选项有些老固件默认是关的。经验之谈RSLinx扫描不到设备时先别急着换驱动类型90%的情况是网络或者固件问题。用Wireshark抓包看UDP 2222端口的EtherNet/IP报文如果PLC没有回应那问题大概率出在PLC侧。2.3 针对ControlLogix的槽号配置如果你的PLC是ControlLogix机架式的比如1756-L72配1756-ENBT模块那有一个关键点RSLinx扫描到设备后它显示的是整个机架你要展开找到CPU所在的位置确认槽号是否正确。这个槽号是硬件上CPU模块插在机架里的位置不能搞错。在RSLinx里展开以太网驱动你会看到类似1756-ENBT/A开头的设备再往下可以看到CPU模块比如1756-L72/B LOGIX5572。右键点击这个CPU选择Configure或者Module Configuration可以确认机架尺寸和槽号信息。大多数情况下只要PLC程序是正常运行的RSLinx默认配置就能直接通信不需要额外改动。需要提醒的是CompactLogix和ControlLogix的槽号规则略有不同。CompactLogix比如1769-L32E内置了以太网口CPU本身就有网络接口所以它的槽号固定是0。ControlLogix则要看CPU模块实际插到哪个槽通常是1或2但也有人插到0槽的现场确认一下最稳妥。3. IFix 5.8侧配置OPC客户端连接RSLinx这边通道建立好了下一步就是让IFix能读到RSLinx里的数据。IFix 5.8支持OPC客户端功能所以我们要在IFix里配置一个OPC客户端驱动。3.1 在IFix里安装并启用OPC客户端驱动IFix的驱动管理在系统配置SCU里。打开SCU找到I/O Driver配置选择OPC Client驱动。如果你在驱动列表里找不到OPC Client那说明IFix安装时没装这个组件需要重新运行安装程序把这个驱动补装上。启用OPC Client驱动后需要指定RSLinx的OPC服务器。RSLinx安装完成后系统里会注册一个名为RSLinx OPC Server的COM组件。在IFix的OPC Client配置窗口里点击Add OPC Server选择这个RSLinx OPC Server。这里有个版本匹配的问题IFix 5.8是32位还是64位对应的RSLinx OPC Server也有位数要求。实际项目中IFix 5.8默认是32位应用RSLinx Classic也建议用32位版本否则COM组件位数不对OPC客户端会找不到服务器。重要提示IFix里的OPC Client驱动通信超时时间默认是5000毫秒。如果你在画面上看到的点值是空或者####多半是通信超时了。可以在OPC Client驱动配置里把超时时间调大一点比如调到10000毫秒能缓解部分掉线问题。3.2 配置OPC Group和ItemIFix的OPC客户端不是直接写PLC点地址的它要先定义OPC Group组再在组下面定义Item项。这个Group可以理解成一个通信批次同一个PLC的数据可以放在一个组里减少通信请求次数。创建Group时要填写RSLinx OPC Server中对应的路径这个路径一般就是RSLinx里的驱动名加设备路径比如AB_ETHIP-1\PLC1。然后添加ItemItem的格式通常是Tag名或者地址。RSLinx OPC Server中暴露出来的Item名取决于你在RSLinx里是否定义了Tag数据库。这里有个关键选择RSLinx Classic的OPC服务器有两种数据访问方式一种是通过RSLinx OPC Server直接访问底层设备Item名是类似Address的路径格式另一种是通过RSLinx Tag Server也就是OPC DA 2.0方式Item名是你在RSLinx里配置的逻辑标签名。我建议用后者因为逻辑标签名在IFix里可读性更好维护起来也方便。但要注意启用RSLinx的Tag Database功能后需要在RSLinx里把PLC程序里的Tag导入或手动建好。这个导入工作可以通过RSLinx的OPC/DDE配置界面把PLC里的标签同步过来也可以手动建立。实际项目中PLC程序里的标签比较多手动建太累最好先从PLC编程软件比如Studio 5000里导出标签CSV再在RSLinx里批量导入。4. IFix点表映射从OPC到画面变量的过程点表映射是整个联调里最磨人的部分。IFix里有一套自己的标签Tag体系你要把OPC通信过来的实时值映射到IFix的数据库点Database Block里然后画面上的图元再去引用这些数据库点。4.1 在IGS里建立通信点IFix的数据库点是在IGSiFIX Global Database里创建的。打开IGS新建一个点类型选OPC或者AI模拟量输入之类的。如果你选的类型是AI那这个点的驱动来源要指向之前配置的OPC Client驱动。新建点的时候有个硬件地址Hardware Address字段这里要填写你在OPC Group里定义的那个Item路径。正确格式通常是节点名.OPC服务器名.Item路径比如NODE1.RSLinx OPC Server.AB_ETHIP-1\PLC1\TANK_LEVEL。这里最容易出错的是节点名。IFix的OPC客户端节点名指的是运行OPC服务器的计算机名。如果RSLinx跑在本地节点名填本机计算机名或者LOCAL通常都行如果跑在远程服务器上那就要填服务器的计算机名并且要确保两台机器的Windows用户权限能互通。我当时踩的一个坑是Item路径里的大小写和分隔符。RSLinx的OPC路径用反斜杠IFix里有的版本又不认反斜杠必须改成点。后来我查了文档才发现IFix的OPC Client在解析路径时有它自己的内部转换规则你要么全用反斜杠要么全用点最好不要混用。4.2 点位数据类型匹配PLC里的标签是有数据类型的比如REAL、INT、DINT、BOOL。IFix数据库点的类型也要对应好。如果匹配不对读出来的值要么是乱的要么干脆显示BAD。具体来说PLC里的REAL对应IFix的AI模拟量点PLC里的DINT对应IFix的DI还是AI要根据实际位数来定。BOOL对应IFix的DI数字量点。如果PLC某个标签是数组需要用数组下标访问那在Item路径里要加下标比如ARRAY[0]否则RSLinx会报错。这里有一个本地坑有些老版本RSLinx的OPC服务器默认不暴露BIT类型的标签你要在RSLinx里把对应的BOOL标签单独加到Tag Database中否则IFix侧找不到这个Item。4.3 画面绑定数据库点建好以后画面上要显示或操作数据就直接绑定这些数据库点的地址。在IFix画面编辑器里右键图元选择Animation找到Data Source选择对应的数据库点。这个操作比较简单关键要确认数据库点已经在正常工作可以通过IGS的数据库点监控窗口查看当前值。如果你打开画面看到图元上的值是#####说明数据库点处于BAD状态。这时候先到IGS里看点的Current Value是否为BAD如果是多半是OPC通信没建立成功或者Item路径填错了。如果值是有数字但不动还要继续看通信刷新频率和点类型是否匹配。5. 通信联调的常见问题与排查思路这套系统配置完成后最刺激的阶段就是联调。我把自己遇到过的和身边朋友踩过的坑整理成了一份速查表希望对大家有用。问题现象可能原因解决方案RSLinx扫描不到PLC网络不通、网段不同、固件太老ping测试检查IP和网关升级RSLinx或固件IFix找不到RSLinx OPC ServerOPC组件未安装、位数不一致重新安装RSLinx并勾选OPC组件确认32/64位匹配OPC路径填了但值一直是BADItem路径错误、节点名不对、Tag未建立核对路径大小写和分隔符确认Tag在RSLinx Tag Database中画面值能读但刷新很慢通信超时设置太短、Group设置不合理调大IFix超时时间分组合并同类标签数值读到但显示乱码或错误值数据类型不匹配检查PLC标签类型和IFix数据库点类型是否一致PLC里修改了Tag名IFix里还是旧值OPC缓存未清除重启RSLinx OPC Server或者重新添加Item5.1 通信链路排查法如果遇到问题我建议按照从底层到上层的顺序排查而不是上来就去IFix那边瞎试。先用RSLinx的RSWho看能不能看到PLC看不到就回到网络层。RSLinx能看到PLC但OPC Client读不到值就检查RSLinx的OPC测试工具它自带一个OPC Quick Client可以直接测试数据读取。OPC Quick Client能读到问题就在IFix侧读不到问题就在RSLinx或者PLC侧。这个OPC Quick Client是个好东西一定要学会用。它可以加载你配置好的OPC服务器手动添加Item实时看到通信值。联调时先把通信状态确认到这里再去IFix里做映射能省掉很多无效时间。5.2 通信缓存带来的坑OPC通信有一个缓存机制。RSLinx会缓存设备数据IFix的OPC客户端也会缓存一批数据。如果你在PLC里改了标签值IFix画面没变先别急着怀疑通信线断了有可能是缓存问题。刷新缓存的常规做法是重启RSLinx OPC Server再重启IFix的OPC客户端驱动。如果这样操作太频繁会影响现场操作那就要检查通信刷新速率设置。RSLinx里OPC服务器有数据更新速率参数默认可能是1秒或2秒IFix侧也类似两个都不要太快否则会占PLC通信资源导致CPU负载升高。我在一个测试环境里把OPC更新速率设成了100毫秒结果PLC扫描周期被严重拉长整个程序执行时间都变了。后来把速率调回1000毫秒一切恢复正常。工业现场不是拼速度的地方通信稳定才是第一位的。6. 项目落地后的经验总结整套方案在项目里稳定跑起来之后回头看有几个点是让我印象最深的。RSLinx作为中间层只要配好了可靠性确实高。它把PLC通信的复杂性封装在底层IFix这边只需要关心OPC路径和Tag映射。而且RSLinx自带诊断工具出问题的时候能比较快地定位。IFix 5.8的OPC客户端虽然配置起来有点繁琐但胜在灵活。一个OPC Client可以同时连多个OPC Server一个数据库点可以绑定不同OPC路径这在多PLC项目中非常实用。最后分享一个小技巧。我习惯在项目调试阶段先在IFix里建一个调试画面把所有关键点位全部摆出来用数字框加背景色变化来直观显示通信状态。这样一来哪个点BID、哪个值不动一眼就能看到比看IGS的数据库点列表高效得多。等全部连通之后这个调试画面还可以留着以后查故障时照样能用。这套通信方案整体上很成熟只要前期把RSLinx的通道配置做扎实把OPC路径和Tag映射核对清楚后面基本不会出大问题。真出了问题也多是从底层到上层一层层排查不要跳步。这是我在项目里最深的体会。