设备到客户现场后最让我头疼的事,不是程序逻辑出Bug,而是客户那边上到领导、下到操作员,人手一个USB线,谁都能连上PLC在线改两下,改完还一脸无辜地说“我就看了看”。程序被误改、参数被覆盖、甚至整段工艺逻辑被人调整之后找不到原始版本,这种返工成本太高了。汇川AM系列作为Codesys内核的中型PLC,后台安全管理与用户权限这块功能其实很成熟,但很多工程师只把它当成“设个密码防下载”,用得很浅,没有把它的真正价值发挥出来。
这篇文章我根据自己的实际项目经验,把汇川AM系列(含AM400、AM600系列,编程环境InoProShop)的后台安全管理和用户权限设置的完整思路、具体配置步骤、以及我在现场踩过的坑一次性讲清楚。无论你是设备厂家的调试工程师、做OEM设备交付的电气设计,还是要给客户提供上位机访问接口的项目负责人,这篇内容都能帮你少走弯路。
1. 汇川AM系列后台安全管理到底管的是什么
1.1 先搞清楚“后台”的范围
很多人一听“后台安全管理”,第一反应是“给PLC设个密码”。这个理解太笼统,因为AM系列的安全管理实际上覆盖了三个完全不同的层面:
第一层是工程文件保护。InoProShop工程文件(.amsproj之类)本身可以被加密,别人拿到你的工程文档,没有密码就打不开,源码不会泄露。这是静态层面的防护。
第二层是PLC在线访问管理。PLC程序下载到控制器之后,任何人拿InoProShop通过网线连上PLC,都需要过用户认证这一关。没有登录或者权限不足的人,无法在线监视、强制变量、下载程序,甚至看不到POU内部代码。这是动态运行时的防护,也是后台安全管理的核心。
第三层是数据通信访问控制。AM系列做MODBUS TCP Server、做OPC UA、或者通过上位机直连时,外部节点能不能读写数据、能读写哪些数据,也需要纳入安全考虑。
我见过不少工程师把这三件事混在一起,只设了一个下载密码就觉得万事大吉。结果客户确实没法下载了,但上位机、HMI、触摸屏那条链路完全裸奔,或者操作员通过在线监视窗口强制了一个内部变量,整个设备停摆。真正的后台安全管理,应该把这三个层面都管起来。
1.2 为什么AM系列的管理方式和老式PLC不一样
汇川AM系列用的是Codesys内核,编程软件是InoProShop。这套系统的用户管理的设计思路,和以前那种“一个密码管全部”的老式PLC完全不同。Codesys体系下的用户权限管理,是按“角色 + 权限集合”来组织的,权限粒度精细到了每一个动作:能不能下载、能不能启动、能不能强制变量、能不能修改程序、甚至能不能访问某一个具体的功能块。
这种设计天然适合设备和整线项目。交付给终端客户后,操作员只需要“监视”权限,看看当前状态、看报警;维护人员可以有“操作”权限,能强制、能启停;你们厂家自己保留“下载和修改”权限,用来升级程序。一套权限体系覆盖全角色,不需要整天改密码,也不需要因为有人现在要改工艺,就把全套密码交出来。
1.3 一套权限体系其实要管三个入口
AM系列一个比较容易被忽略的地方是,用户认证的入口不只有InoProShop这一个。实际上有三类入口都需要纳入权限设计:
第一是编程软件入口。也就是刚才说的InoProShop在线联机,最核心的入口。第二是Web可视化入口。AM系列本身支持WebVisu,如果你的工程里启用了Web可视化,别人通过浏览器访问PLC的IP地址就能看到画面,那这个入口必须有对应的认证,不能裸奔。第三是外部通信入口。Modbus TCP Server、OPC UA Server之类的通信配置,不会自动继承PLC的用户管理,需要单独做访问控制。这一点后文详述。
所以,我们做安全方案时,第一步不是急着勾权限,而是先盘点:这台设备对外暴露了哪些访问入口?每个入口对应谁在用?想清楚了,后面的配置才有意义。
2. 用户角色与权限项的核心解析
2.1 用户管理的三层结构:用户、角色、权限
InoProShop(AM系列)里的用户管理,核心结构很好理解:你先定义几个角色,把权限打成包分配给角色,然后再建用户,把用户放进角色里。一个人可以属于多个角色,权限效果是叠加的。
实际项目中我习惯建三个角色:
管理员:拥有全部权限,包括在线下载、启动停止、强制变量、修改工程配置。这个角色只给厂家自己的调试人员用。
工程师:可以联机监视、强制变量、在线修改参数、启动停止,但不能下载新程序。这个角色给到客户的设备工程师或维护主管。
操作员:只允许联机监视和在规定监控列表里看变量,不能强制、不能写入、不能下载。这个角色给现场操作班组。
这套划分最核心的思路就是“最小够用”:每一个人拥有完成自己工作所必需的最少权限。操作员不需要强制变量,就坚决不给;客户需要日常调整PID参数的话,工程师角色就包括在线写值,但下载仍然锁死。这样既不耽误生产,又最大程度保护程序完整性。
2.2 权限项的取舍,看这几个关键开关
具体在用户权限配置界面会看到一堆勾选项,这里重点说几个和现场安全直接相关的:
下载权限。如果勾掉,这个角色在任何情况下都无法下载程序到PLC,包括应用、库、参数配置全都不能写。这是设备交付后需要锁死的核心权限。
启动/停止权限。如果给操作员这个权限,操作员在联机调试窗口就能直接点停止,整个设备就停了。一般来说操作员不应该有这个权限,运行时启停应该是上位机或者旋钮开关来做,而不是通过编程软件。
写权限(在线写值)。这个权限是在线修改和强制变量的总开关。没有它,在线监视窗口里只能看,不能改。给客户的维护人员开这个权限时要慎重,因为写值意味着可能绕过你在触摸屏上做的所有安全限制。
可访问性。这个权限控制的是用户能否看到你的POU内部实现。如果把它关掉,客户在线登录后只能看到工程结构、变量声明、PLC配置,但看不到梯形图/结构化文本代码的具体内容。对设备厂家来说,这是保护源代码的最后一道防线。
调试权限。包含断点、单步、暂停任务等。这个权限要么不给客户,要么只给工程师。实际项目中我一般不推荐给客户开放调试权限——客户一旦用了断点,在线调试状态下PLC扫描会暂停,设备直接停机,容易引发安全事故。
2.3 密码策略与用户密码管理
AM系列用户管理中,每个用户都有自己的密码。InoProShop的密码存在系统用户库中,密码复杂度默认不强要求,但我强烈建议你的项目交付规范里规定:所有PLC用户密码至少12位以上,包含字母、数字、特殊字符。
这里有个非常关键却常常被忽视的问题:密码管理要纳入设备交付档案。我见过太多项目,PLC里的管理员账号密码是几年前的临时密码,当事人离职后没人知道,结果设备出问题需要厂家远程指导时,客户干瞪眼,只能全套初始化重来,工艺参数全部丢失。更危险的是,有些人图方便给现场所有PLC统一用同一个密码,一旦泄露,整个产线等于裸奔。设备发货前,项目负责人必须将管理员密码存到公司设备档案库中,注明日期和设置人,并设置定期更换提醒。
3. 实操:在InoProShop中配置用户权限的完整流程
3.1 第一步:在工程属性中启用用户管理
打开InoProShop,加载AM系列工程后,在左侧工程树中找到“工程”节点,右键打开属性界面。找到“用户管理”选项卡,勾选“启用用户管理”。
这一步做完,工程左下角联机区域会出现一个登录窗口。此时你可以开始配置用户和角色了。注意,启用用户管理这个动作本身不需要PLC在线,它只是修改了工程文件属性。但真正生效,需要重新编译并下载到PLC。
3.2 第二步:创建角色并分配权限
进入用户管理界面,先切到“角色管理”标签页,点击“新建角色”,依次创建管理员、工程师、操作员三个角色。创建后,右侧会列出权限配置表,把系统支持的权限项以复选框列出来,按前面说的方法分别勾选。
这里我建议项目里做一个权限分配矩阵,直接贴在工程说明文件里。下面这张表可以参考:
| 权限项 | 管理员 | 工程师(客户) | 操作员 |
|---|---|---|---|
| 联机读取 | 允许 | 允许 | 允许 |
| 联机写入 | 允许 | 允许 | 禁止 |
| 强制变量 | 允许 | 允许 | 禁止 |
| 启动/停止 | 允许 | 允许 | 禁止 |
| 下载应用 | 允许 | 禁止 | 禁止 |
| 下载配置 | 允许 | 禁止 | 禁止 |
| 调试模式 | 允许 | 禁止 | 禁止 |
| 修改密码 | 允许 | 允许(仅本人) | 允许(仅本人) |
权限表和实际界面里的名字可能有些出入,但核心开关就这几个。表格里的分配思路是“客户的工程师可以在线调值但不能动程序,操作员只监不控”。如果客户连调值的需求都没有,那工程师这一列的写权限和强制权限也可以关掉,具体看项目交付约定。
3.3 第三步:创建用户并分配角色
切到“用户管理”标签页,新建用户,输入用户名和密码,然后把用户挂到对应角色下。一个用户可以被分配多个角色,但要小心,多角色会取权限并集。比如某人既是操作员又是工程师,那他的权限就是两者叠加,操作员身份里“不能强制”的限制就失效了。实际使用时一人一角色最清晰。
另外,AM系列支持在工程登录界面直接显示用户名列表,但默认是通过手工输入用户名和密码登录,不推荐用下拉列表选用户的方式——用户列表形同虚设,任何人都能猜到有哪些账号。登录窗口设置中有“自动选择上次登录用户”之类的选项,建议关闭,避免上一人退出后账号还停留在输入框里。
3.4 第四步:设置POU级访问权限
这是AM系列/Codesys比较有特色的一层防护:可以针对某个具体的功能块(FB)或程序(PRG)单独设置访问权限。
在工程树中选中你要保护的功能块,右键属性里找到访问权限配置,可以把某个FB设置为“仅特定角色可见/可编辑”。比如你把工艺核心的“张力算法”封装成一个FB,只允许管理员角色读取,普通工程师登录后连这个FB的存在都看不到。这相当于在变量监视层面之上再加了一道逻辑隔离。
实际使用中,对客户开放联机监视权限时,把核心工艺FB全部设成管理员专属,能有效防止技术泄密。注意:用户是否能查看某个POU,除了受POU级权限控制,还受前面说的用户权限项里“可访问性”影响,两者是叠加的关系,配置的时候要一起检查。
3.5 第五步:编译下载并验证
所有用户和角色配置完成后,重新编译工程,然后登录管理员账号,将工程下载到PLC。下载完成后,把PLC重新上电一次,然后用不同账号分别测试一遍:用操作员账号登录看能不能在线连、能不能看到内部变量表、能不能强制值;用工程师账号测试能不能下载,理论上应该被拒绝;最后切回管理员账号正常操作。
这一步务必在出厂前做完整。我吃过亏——现场拿着操作员账号想连PLC看看状态,发现权限配置没生效,再回头重新编译下载,设备正在产线上跑,不能随便停,弄得非常被动。权限验证不是“顺手测一下”,而是出厂检验流程里的一环,必须有书面检查记录。
3.6 补充:OPC UA、WebVisu、外部通信的访问控制
AM系列支持OPC UA Server,如果项目里开启了,外部上位机系统(比如MES、SCADA)会通过OPC UA来访问PLC数据。OPC UA的账户体系和PLC用户管理是两套系统,需要另外配置。比如在OPC UA配置界面里开启匿名访问禁用、添加客户端认证,设置可访问的地址空间范围。这里的原则是“最小开放”,MES只需要读哪些数据,就只开放哪些节点,不要图省事把整个PLC地址空间全暴露出去。
WebVisu类似。如果启用了Web可视化,一定要在WebVisu设置里强制登录,并把默认账户密码改掉,绝不能让浏览器访问到登录页却绕过认证。我在测试时遇到过WebVisu设置里勾了“无认证”选项,结果手机浏览器输IP直接就看到设备画面,这是一个非常危险的安全漏洞。
MODBUS TCP Server同理。AM系列做Modbus Server时,功能码05、06、0F、10都是写操作,外部任何客户端连上都能写。AM的Modbus Server本身不带高级权限认证,所以软件层唯一的控制手段就是通信映射表——你暴露哪些寄存器给外部写。设备交付时光靠Modbus这一层,是没法区分“谁在写”的,只能靠网络隔离、防火墙限制IP访问、或者在上位机侧加权限认证。这块很多人没意识到,以为写了Server功能就万事大吉,实际很多设备被误写都是从这里进来的。
4. 常见问题与排查技巧实录
4.1 客户反映“工程师账号无法下载”但我们需要远程协助
这个问题很典型:客户自己买的设备,想更新程序,但发现工程里只分配了工程师角色,没有下载权限。有时候是客户忘了找你们要管理员权限,有时候是现场另一批设备工程师换人了,原来的管理员账号密码没交接。
排查思路是先确认是“没有权限”还是“密码不对”。密码不对,登录时会直接提示用户名密码错误;权限不足,登录成功但右键下载菜单是灰的或点击下载后弹“权限不足”提示。两者在系统日志里都有记录。如果是权限确实不足,要么通过管理员账号添加新用户,要么在安全策略上做一个“临时权限”角色,只给客户开放一次性的下载权限,用完后立即删除用户或改密。不推荐直接把管理员密码交给客户,后续账号不好管理。
4.2 忘记管理员密码,PLC还能恢复吗
如果你把PLC里的密码忘了,而且工程文件里也没有留存备份,InoProShop和AM系列的机制是保护数据优先的,不会提供一套“绕过认证”的官方后门。能做的就是重置PLC——把控制器的用户管理区清空,恢复出厂状态。这块操作在手册里有描述,一般是通过InoProShop的“PLC复位/恢复出厂设置”功能或者拨码来实现。
但代价非常大:程序有可能被清除,或者至少用户库被清掉而程序还在,你必须重新登录并下载工程才能恢复完整控制。如果PLC里还存了掉电保持变量(比如工艺配方、累计产量),这些数据也可能丢失,对产线来说就是一个生产事故。所以密码备份的重要性不管怎么强调都不过分。我的习惯是:每个项目建一个独立的“设备信息-密码”记录文件,里面包括PLC的IP、MAC、工程名、版本号、所有用户账号和密码、设置日期,这个文件和工程归档放在一起,作为项目交付资料的一部分。
4.3 切换工程后用户列表丢失
AM系列工程用InoProShop打开时,如果提示“当前用户库与工程不匹配”或“未找到用户列表”,通常是你用不同版本的InoProShop软件打开同一个工程。Codesys内核的软件,不同版本之间用户管理信息不保证兼容,尤其大版本升级后,用户库文件可能无法识别。
排查时先确认本机装了几个InoProShop版本,是不是打开了旧版本工程;再用原版本导出用户库文件,在新版本里重新导入;或者干脆重新创建用户和角色并重新下装。这里有个实际经验:工程备份时,把用户库文件(一般在工程配置目录里的UserManagement相关文件)一起复制出来,命名成“用户库-版本-日期.bak”,单独存一份,能省掉很多麻烦。
4.4 权限设置生效了但HMI触摸屏显示异常
有两次客户反馈,AM系列和触摸屏之间的通讯变得“时有时无”,最后查出来都是权限设置惹的祸。一次是触摸屏程序里用的HMI账号,在AM的用户管理里被改成了只能监视模式,而屏上的操作需要写权限,所以一操作就被拒绝。另一次是工程里启用了“登录状态下才允许外部通信”的选项,触摸屏一直没有登录PLC,导致通信数据被PLC侧过滤。
排查这类问题,去PLC的诊断缓存区看登录日志最直观——被拒绝的写请求、通信异常记录都会留下线索。同时在InoProShop里用上位机模拟一遍触摸屏的读写操作,看是哪个权限点卡住了,然后单独给HMI通道加一个专用账号,权限和触摸屏功能严格匹配,不要图省事让HMI用管理员账号登录。HMI用管理员权限非常危险,一旦HMI被误操作,或者通信被中间人篡改,等同于把PLC后台拱手让人。
4.5 安全提示:不要为了省事在同一个账号下搞“万能权限”
最后说一个我见到最多的习惯性问题。不少工程师为了方便现场调试,自己用的一个账号开放了所有权限,同时这个账号密码写得特别简单,比如“admin123”。设备交付后也不改,结果客户内部任何人知道这个密码,都能用你的账号对PLC为所欲为。
更危险的做法是把“下载”权限和“联机操作”权限都放在同一个账号下,自己平时联机运行也用这个号,一旦现场误操作,点了一个“下载”按钮,整个程序就被覆盖了。我做项目时,自己的调试账号是分两个的:一个是全权限的管理员账号,只在明确需要下载程序时使用;另一个是日常联机调试账号,权限只有读写变量和启停,没有下载权限。这样就算日常操作失误,也不会把程序冲掉。这个习惯建议每个做汇川项目的人都养成,成本极低,收益极高。
4.6 权限设置要写入随机器文件
很多时候权限配置是项目结束前最后一刻才补上的,这会导致配置不严谨、测试不充分。我的建议是把用户权限设计挪到项目阶段去:机器工艺调试完成后、出厂前最后一周,专门留出半天做权限配置、联机测试、账号交接。把权限矩阵、账号信息表、PLC登录注意事项写进随机器文件,发给客户设备部并抄送客户IT负责人。不要等设备都到客户现场了才补权限,现场的每一个操作都可能有产线风险,你根本没法从容测试。
写在最后的一点体会
使用AM系列做设备交付这几年,最大的感受是:后台安全管理和用户权限,不是“限制客户”的手段,反而是让项目交付更顺畅的保障。适当的权限隔离,让操作员放心看数据、让维护工程师安心调参数、让厂家自己安心做版本迭代,每个角色的使用范围清晰明确,出问题也能准确定位责任边界。客户一开始可能觉得“多了一道登录多了一步操作”,但设备长期运行后,都会认可这套机制的价值。
再分享一个小技巧:AM系列的权限配置不是“一劳永逸”的,设备运行中如果需要临时给客户开放更高权限(比如配合他们做改造验证),用完后记得在InoProShop的用户管理里删除这个临时账号,同时更新项目归档里的权限矩阵表。安全管理的本质就是闭环,配置、测试、交接、回收,每个环节都做到位,设备生命周期内的风险才会真正可控。