简介:这份《施耐德Unity Pro入门使用手册》面向零基础自动化工程师、电气调试人员及职业院校学生,定位为Unity Pro编程软件的自学入门指南,帮助读者从新建程序起步,逐步掌握Quantum平台的项目配置与编程流程。文档围绕机架槽位替换、CPU模块与状态RAM设置、以太网通讯及NOE模块配置展开,并细化到变量创建与自定义列、快速建变量、导出功能块类型(DFB)、MAST段编程、动态数据表监控、生成更改、标准/仿真模式切换以及程序上传下载与STU保存等实操环节,兼顾入门操作与常见配置要点。资源包共1个docx文件,约1.18MB,以图文步骤说明为主,便于按章节检索和对照软件界面练习。已有1994人学习,适合需要系统熟悉施耐德Unity Pro基础配置、补齐通讯与变量操作细节的读者作为案头速查材料。
1. 一份 Unity Pro 入门使用手册,先从「新建工程就卡住」说起
接手一台 140CPU67160 的 Quantum 机组,软件装好、工程也能打开,结果第一屏就卡住:默认挂的是 16 槽机架,图纸上是 10 槽;CPU 的状态 RAM 地址范围没设,变量表里 %MW 一路排到 %MW800,编译过、下载也过,运行起来数据全是 0;NOE 模块的 IP 还停留在上一个项目的网段,上位机死活连不上。这些问题跟编程水平没关系,全是组态顺序和参数边界没踩准。这份 Unity Pro 入门使用手册的价值就在这里——新建程序、替换机架、配 CPU 与 NOE、建变量、写 DFB、下载运行,整条链路按顺序串起来,每一步都落到具体型号和具体地址。适合刚接手 Unity Pro 工程的自控工程师、做课题的学生,以及从别的 PLC 平台迁过来、被地址区规则绕晕的熟手。
2. 从 16 槽换到 10 槽:机架、CPU 与以太网的组态顺序
2.1 新建工程与 CPU 选型:为什么第一步就定 140CPU67160
点击左上角文件——新建,或者直接点工具栏上的新建图标,弹出设备选择对话框。左侧按平台家族展开,在 Quantum 下面选 CPU 型号 140CPU67160,确定。这一步看着简单,实际上是整份工程的地基。
CPU 型号一确定,后面能用的状态 RAM 大小、热备选项、通讯口数量、支持的指令集全都跟着定死。常见做法是严格照图纸上的订货号选,别图省事挑一个「看着差不多」的型号——等配到 NOE 模块或者打开热备对话框时发现选项是灰的,回头改 CPU 等于把机架配置整个重做一遍,前面填的槽位全白费。
我一般会在动手前把图纸上三样东西抄在便签上:CPU 订货号、机架订货号、每个槽位的模块型号。Unity Pro 的硬件目录支持按订货号检索,直接敲 140 开头那串数字,比一层层展开家族树快得多,也不容易点错相邻型号。
2.2 替换机架:16 槽改 10 槽与模块落位顺序
新建出来的 Quantum 工程默认挂 16 插槽机架 140XBP01600。图纸上是 10 槽 140XBP01000。很多人图省事,直接在这个 16 槽机架上往下堆模块,编译一样能过,但槽位编号和现场机柜对不上,后面查故障时手里握着一张错位的槽位表,血泪经验就是这么攒出来的。
替换动作:在硬件配置视图里右键机架(也就是标着 1 的那个位置),选「替换机架」,在型号列表里选 140XBP01000,确定。顺序很关键——先换机架,再放模块。替换机架会把已经摆上去的模块清空,反过来做就是白干一遍。
放置模块有两种方式:双击空白插槽弹出设备选择框,或者从右侧硬件目录里把模块直接拖到槽位上。按图纸依次配置电源模块和通讯模块,槽位号必须和现场一一对应。下面这张表是我习惯在组态前先填好的槽位规划,填完再动手,能避免一半的返工:
| 槽位 | 模块类型 | 说明 |
|---|---|---|
| 0 | 电源模块 | 按机架规格选,槽位固定 |
| 1 | CPU 140CPU67160 | 主处理器,槽位固定 |
| 2 | NOE 以太网模块 | 与上位机通讯,需绑定网络 |
| 3 及以后 | 数字量/模拟量模块 | 按图纸顺序,槽位号即现场编号 |
槽位规划表填错,后面变量地址的 %I、%Q 前缀全跟着错,改起来是一整张表的返工。
2.3 状态 RAM 地址范围:变量能不能生效的硬边界
双击 140CPU67160 打开配置对话框,里面有一栏是状态 RAM 的地址范围。这是整个工程最容易翻车的地方:它划定了程序里变量地址的可用区间,%MW、%I、%Q 这些地址必须落在范围内,超出的部分编译不报错、下载也照样成功,但运行起来就是不生效。现象特别有迷惑性——程序逻辑看着没问题,监控值一直不动。
配置时按实际点表算起始地址和长度。比如模拟量输入占到 %IW0.1.1 至 %IW0.8.16,数字量输出从 %Q0.1.1 起 64 点,内部中间变量从 %MW100 起预留 500 个字,就按这个上限再加 10%~20% 余量去设。别卡着边设,后期加两个点就得回来改。
改完范围必须重新生成所有项目再下载。只在对话框里把数字改了、不重新生成,下载下去的仍然是旧配置,这个坑我见过不止一次。地址区的基本含义如下,配变量表时对照着看:
| 地址形式 | 含义 | 典型用途 |
|---|---|---|
| %MW100 | 内部字 | 中间运算、通讯缓冲 |
| %MW100.1 | 字内位 | 取某个字的某一位 |
| %I0.1.1 | 数字量输入 | 按钮、限位、开关 |
| %Q0.1.1 | 数字量输出 | 接触器、指示灯 |
| %IW0.1.1 | 模拟量输入字 | 变送器、热电偶 |
| %QW0.0.1 | 模拟量输出字 | 调节阀、变频给定 |
2.4 热备与实时时钟:两个容易忽略的对话框
同一个 CPU 配置对话框里还有「热备」页。这里有两件事要处理:一是状态 RAM 里划出非传输区域,这块区域不跟上位数据库做数据交换,只给 CPU 内部使用,用来放那些不需要上传的过程变量;二是 RIO 子站选项,本系统配置里没有 RIO 子站,就明确选「无 RIO 子站」。选错的后果是 CPU 启动阶段一直等一个不存在的子站,卡在那儿不动,排查时又不报明显错误,非常像玄学问题。
实时时钟在「动态显示——实时时钟」里。两种同步方式:选 PC→PLC,把编程电脑的时间直接写进 CPU;选用户→PLC,先手工设好时间再下发。做事件记录、报警时间戳的项目,时钟必须一次性对准,否则事后翻日志全是错位时间,排查故障时完全没有参考价值。
2.5 以太网网络与 NOE:命名规则、IP 规划与四种连接介质
选择通讯——新建网络,在可用网络列表里选以太网。名称别用默认那串,Unity Pro 对网络名有硬性要求:不支持中文,不支持数字和个别符号开头,建议纯英文字母开头,比如 ETHERNET1。名字起错,后面绑定模块时会找不到网络。
建完网络,在通讯目录里选中 ETHERNET1,填 IP 地址、子网掩码、网关。这个 IP 是 PLC 侧网络地址,要和上位机规划在同一网段。IP 规划最好在组态前就画好一张小表,PLC、上位机、交换机各占一个固定地址,别在现场临时改。
NOE 模块要单独绑一次:双击主机架里的 NOE 模块,再双击模块下方的以太网口,弹出对话框里选 ETHERNET,把它和刚才建的网络关联起来。网络建了但 NOE 没绑,线接得再对也不通,这个步骤在两份不同的教程里写法差别很大,实际上就是这一次绑定动作。
连接 PLC 的方式一共四种,选错介质是最常见的连接失败原因:
| 方式 | 介质 | 地址 | 接线 |
|---|---|---|---|
| USB | USB | SYS | 笔记本 USB 口接 CPU 的 USB 口 |
| 以太网 | TCPIP | NOE 配置的 IP,如 192.168.1.20 | 网线接 NOE 模块以太网口 |
| MB+ | MBPLUS01 | 主机架 NOM 模块的 MB+ 地址,如 2 | MBP 转 USB 转换器接 NOM |
| 仿真 | TCPIP | 127.0.0.1 | 无需接线 |
填完点右侧的「测试连接」。成功会弹提示,失败就按介质—地址—接线三个维度倒查,先确认介质选对,再确认地址和 IP 规划一致,最后查物理连接和 CPU 是否上电。
3. 变量、DDT 与 DFB:上千点变量表怎么批量做出来
3.1 基本变量的列、自定义列与过滤器
项目浏览器——变量和 FB 实例——基本变量。默认列是名称、类型、地址、值、注释。列不够用时,右键点击列名那一行,选「自定义列」,弹出对话框里把想看的参数勾上,列的顺序用右侧按钮上下调整,名称前面的检查框控制显示与否。
上万点的变量表,靠滚动找点是不现实的。过滤器在名称后面那块空白处输入关键字回车,支持*abc*这种通配写法,星号代表任意几个字符;也可以先选定按哪一列过滤,比如按注释列、按类型列。改一批同类型的点之前,我一般先过滤出这一批,改完再放开,比在整表里跳来跳去稳得多。
3.2 地址写法与变量命名规则
变量名称和类型是必填项,名称默认不能以数字开头。确实需要前导数字的场合,去工具——项目设置——变量,勾上「允许前导数字」,这个开关藏得比较深,第一次找要绕一圈。注释可有可无,但建议填,半年后回头看没有注释的变量表基本等于黑匣子。
地址栏可以留空,表示这个变量不分配硬件地址,只做内部运算。可以填的格式见 2.3 的表,另外 %MW100.1 这种「字内位」写法在打包通讯时特别常用。
3.3 EDT 与 DDT:自定义类型什么场合该上
EDT 是软件自带的基本数据类型,BOOL、EBOOL、WORD、INT、REAL,以及 ARRAY[0..31] OF WORD 这种直接写出来的数组,都属于 EDT 范畴。
DDT 是导出的数据类型,也就是用基本类型拼出来的自定义结构。举个例子:在 DDT 类型里定义一个名为 BigActSEQ 的类型,内容为 ARRAY[0..34] OF WORD;回到基本变量里,变量名称填 Big_ActSEQ,类型选 BigActSEQ。这样一组 35 个字的序列在变量表里只占一行,看着清爽,改结构时也只改 DDT 定义这一处。
普通数组直接写 ARRAY[0..15] OF BOOL 就行,不必为了省事全往 DDT 里塞。判断标准很简单:同一结构在工程里出现三次以上,或者长度会随工艺调整,才值得抽成 DDT。
3.4 导出 TXT 走 Excel:批量建点的可行路径
手工一个个敲变量,几百点还能忍,上千点就是纯耗时间。可行做法是借 Excel 批量生成,再导回 Unity Pro。
先在硬件那栏里建一个变量,导出成 TXT 文档;打开 Excel,文件菜单下选「打开」,文件类型选 TXT,走导入向导。第一步选「分隔符号」,下一步;第二步勾选 Tab 键,下一步;第三步按原变量表各列选择对应的数据格式,这一步是关键,名称列、地址列一定要设成文本,否则 %MW100.1 会被 Excel 当成数值处理掉。完成后在 Excel 里把其余硬件的地址补齐,另存为制表符分隔的 TXT,再导回工程。
导出的 TXT 大致是这么个结构,列顺序和工程里保持一致,回导时才不会错位:
名称 类型 地址 注释 Start_Btn BOOL %I0.1.1 启动按钮 Stop_Btn BOOL %I0.1.2 停止按钮 AI_Flow INT %IW0.1.1 流量变送器 DO_Pump BOOL %Q0.1.1 泵接触器 Mid_Cnt WORD %MW100 中间计数字段之间是制表符,不是空格;地址列保持文本格式;注释里别带制表符,否则整行会错列。导回后抽查十几个点,确认地址和类型都对得上,再往下走。
3.5 DFB:AI_Converter 的管脚、段与语言选择
点击变量和 FB 实例里的 DFB 类型,输入名称 AI_Converter,类型默认就是 DFB。在输入、输出页里填管脚变量名,段里填功能块变量名 SCALE_Calculate,编程语言按习惯选 FBD、LD 或 ST。模拟量线性换算这种带公式的活儿,ST 比 FBD 好读也好改。
双击 SCALE_Calculate 进入编程界面。DFB 的意义在于一路模拟量一个实例,量程上下限、偏置做成管脚,几十路信号共用一份逻辑,改公式只改一处。下面这段是常见的线性换算写法示意:
(* SCALE_Calculate 段:原始码值线性换算为工程量 *) (* 所有管脚在 DFB 输入输出页里定义,这里只写段内逻辑 *) Out := EngMin + (INT_TO_REAL(Raw - RawMin) / INT_TO_REAL(RawMax - RawMin)) * (EngMax - EngMin);Raw 是原始码值,RawMin/RawMax 是码值量程,EngMin/EngMax 是工程量上下限,Out 是换算结果。整数相减后必须先转 REAL 再除,否则整数除法直接把小数截掉,量程一小结果全是 0,这个坑很隐蔽。DFB 建好后在基本变量里声明实例,类型选 AI_Converter,一路信号一个实例,管脚逐个接上实际地址。
4. 程序段与功能块库:MAST 任务下的 ST 写法与联机调试
4.1 MAST 任务与段的建立
程序——任务——MAST——段,右键选择新建段,输入名称和编程语言。MAST 是主任务,按周期循环执行,绝大多数逻辑都放这里。段是组织单位,一个段干一件事:急停链一个段、模拟量处理一个段、通讯映射一个段。把所有逻辑塞进一个段,后期改一处要通读全篇,调试时也没法单独禁用某块。
段的编程语言可以混用,同一个工程里 FBD、LD、ST 并存是正常做法。逻辑联锁用 LD 看着直观,数学运算和循环用 ST 省事,硬件组态和回路调节用 FBD 连线清楚。
4.2 逻辑块:AND、OR、XOR、NOT 与边沿检测
逻辑类功能块有个统一前提:所有输入值和输出值的数据类型必须相同。BOOL 用得最多,但 WORD 按位运算同样成立,类型混着传会直接报类型不匹配。
(* 逻辑块:输入输出同类型 *) Result_And := AND (Value_1, Value_2); (* 两个都为 1 才为 1 *) Result_Or := OR (Value_1, Value_2); (* 两个都为 0 才为 0 *) Result_Xor := XOR (Value_1, Value_2); (* 相异为 1,相同为 0 *) NegValue := NOT (Value); (* 取反 *)AND 的语义是两个输入都为 1 时输出才为 1,其余情况为 0;OR 是两个都为 0 时输出才为 0;XOR 是相异为 1;NOT 是单输入取反。四条都是逐位运算,处理 WORD 时按位展开,不是把整个字当一个布尔值看。
边沿检测在工程里出现频率极高:
(* 上升沿:CLK 从 0 变 1 时,Q 输出一个执行周期 *) Edge_Start (CLK := Start_Btn, Q => Start_Pulse); (* 下降沿:CLK 从 1 变 0 时,Q 输出一个执行周期 *) Edge_Stop (CLK := Stop_Btn, Q => Stop_Pulse);R_TRIG 检测 0→1 的跳变,F_TRIG 检测 1→0 的跳变。关键在于 Q 只保持一个功能块执行周期,下一个周期就回 0。所以这类脉冲只能拿来触发一次性动作,比如加计数器、置位某个状态、发一条命令;拿它当持续状态用,下一个扫描周期就丢了,表现为「偶尔动作偶尔不动」,排查起来非常费劲。
4.3 RS 复位优先:S 和 R1 同时为 1 时谁赢
RS 是具有「复位优先」属性的存储器。S 输入变 1,输出 Q1 变 1;S 恢复 0 后这个状态保持;R1 输入变 1,Q1 回 0;如果 S 和 R1 同时为 1,R1 优先,Q1 被强制为 0。
(* RS:复位优先,S 与 R1 同时为 1 时输出 0 *) RS_1 (S := Start_Cmd, R1 := Stop_Cmd, Q1 => Run_State);这个优先级差别在急停、启动互锁这类回路里就是安全边界。用错成置位优先的 SR,急停按下瞬间如果启动信号还在,输出仍然保持 1,后果不用多说。选块的时候看清是 RS 还是 SR,别凭手感拖。
4.4 数学块与 DIVMOD 的双输出
数学类功能块同样要求所有输入输出同类型,整数和实数混传会出问题。
Sum := ADD (Value1, Value2); (* 加法 *) Difference := SUB (Value1, Value2); (* 减法,Value1 - Value2 *) Product := MUL (Factor1, Factor2); (* 乘法 *) Quotient := DIV (Dividend, Divisor); (* 除法,先判除数非 0 *) Output := MOVE (Input); (* 赋值 *) DIVMOD (Dividend, Divisor, Quotient, Modulo); (* 商和余数一起出 *)DIVMOD 是双输出块,商走 Quotient,余数走 Modulo,做脉冲计数换算、流量累积时比先除再乘回去省事。除法块在 Divisor 为 0 时的行为要提前防,做运算之前加一个Divisor <> 0的判断。整数除法会直接截断小数,需要小数结果就先用 INT_TO_REAL 转换,这一点在模拟量换算里踩坑最多。
4.5 比较块、计数器与动态数据表在线验证
比较块 EQ、NE、GE、GT、LE、LT 分别对应等于、不等于、大于等于、大于、小于等于、小于,比较的是连续输入构成的序列。两个以上输入时按顺序两两比较,别想当然地当成求和或求平均值用。
Result_EQ := EQ (Value1, Value2); (* 相等输出 1 *) Result_NE := NE (Value1, Value2); (* 不等输出 1 *) Result_GE := GE (Value1, Value2); (* IN1 >= IN2 输出 1 *) Result_GT := GT (Value1, Value2); (* IN1 > IN2 输出 1 *) Result_LE := LE (Value1, Value2); (* IN1 <= IN2 输出 1 *) Result_LT := LT (Value1, Value2); (* IN1 < IN2 输出 1 *)CTU 是加计数器,CU 端每来一个上升沿计一次数,R 端复位,PV 是预设值,计到预设值 Q 输出 1。计数器配合 R_TRIG 用最稳,直接拿一个持续为 1 的信号去接 CU,只会计一次。
联机验证靠动态数据表。在变量表里选中一个或几个变量,右键选择初始化动态数据表,也可以直接在动态数据表里输入要查的变量名。模拟量点可以改数值,数字量点可以强制为 1 或 0。强制是把双刃剑,临时代一下能快速定位问题,但调试完必须逐个解除,带着强制下装到现场设备,就是事故隐患。
改完程序或增删变量,必须点「生成更改」或「重新生成所有项目」才生效,这两项在生成菜单里也能找到。编译有错误时编辑区下方会列出来,有错误的情况下无法下载到 PLC。标准模式和仿真模式在 PLC 菜单下切换,标准模式走实际 PLC 通讯,仿真模式地址固定 127.0.0.1。下载是 PLC——将项目传输到 PLC,完成后点运行;上传是「从 PLC 中上传项目」。状态栏会显示「不同」(PLC 内程序与待下载程序不一致)、「运行」、以及「TCPIP:127.0.0.1」(当前处于仿真),这三条提示是判断现场状态的第一手依据。
5. 避坑与排查:五个让下载失败或数据对不上的高频问题
5.1 现象:编译通过、下载成功,运行起来变量值一直不动
原因基本只有一个:变量地址超出了 CPU 状态 RAM 配置的地址范围。超出部分编译不校验、下载也不拦,但运行时不生效。另一个变种是改完状态 RAM 范围没有重新生成所有项目,下载下去的仍是旧配置。
解决:回到 CPU 配置对话框,核对状态 RAM 的起始地址和长度,按实际点表把范围放大并留余量,然后重新生成所有项目再下载。我一般会在变量表里按地址列降序排一次,一眼看出最大地址,和状态 RAM 上界对一下,比逐条查快得多。
5.2 现象:第二次连 PLC 想上传程序,提示无法上传或上传结果为空
原因:上次断开连接时弹窗问是否更新上载信息,手快点了「否」。上载信息没更新,下次就没有可上传的源文件。另一种情况是 CPU 配置里「上载信息」勾选框被去掉,等于主动禁止上载,这个设置一旦生效,现场任何上传操作都拿不到程序。
解决:断开连接时点「是」;检查上载信息是否被禁;下载完成后立刻做一次上传验证,确认能拿回完整工程。从此把「下载完必做一次上传」写进交付清单,后悔药没有现成的。
5.3 现象:网络建好了,测试连接一直失败
原因通常是三类:网络名用了中文或数字开头,绑定模块时找不到;PLC 的 IP 和上位机不在同一网段,或者网关填错;NOE 模块下方的以太网口没有选 ETHERNET,模块和网络没关联上。还有一种容易忽略的,网线插在了 CPU 自带的另一个口上,介质和地址填法完全对不上。
解决:网络名改成英文字母开头;核对 IP、掩码、网关三者;双击 NOE 模块下方的以太网口确认选的是 ETHERNET;对照连接方式表逐项确认介质、地址、接线三者匹配。测试连接按钮只是结果,倒查要按「介质→地址→物理连接→CPU 上电」这个顺序走。
5.4 现象:同事发来的工程双击打不开,提示版本不兼容
原因:用高版本软件直接打开低版本生成的 *.STU 文件,格式不认。反过来低版本打开高版本文件同样不行。
解决:让源端在旧版本里走「开始——导出项目」,保存类型选.XEF,再用高版本导入。XEF 是中间交换格式,跨版本迁移就靠它。另外.STU 保存时同目录下会自动生成.ztx、.auto、.sta、.BAK 等文件,这些删掉不影响 STU 打开,但归档时最好整个目录一起打包,别手动挑着删。
5.5 现象:点了运行程序没反应,或者连接 127.0.0.1 一直连不上
原因:模式切错了。人以为在仿真,实际连的是真 PLC;或者反过来,还停在仿真模式就去点运行。状态栏显示 TCPIP:127.0.0.1 就代表当前是仿真模式,这条信息很多人不看。
解决:在 PLC 菜单下确认当前是标准模式还是仿真模式,切换后重新测试连接。仿真模式下没有实际硬件,强制和写入操作影响的只是仿真器内存,别拿这个结果当现场验证。切换到标准模式前,先把仿真期间加的强制项全部解除。
6. 版本迁移与工程备份:XEF 导出和一份能回滚的存档
.STU 是工程主文件,双击就能打开。同目录下自动生成的.ztx、.auto、.sta、*.BAK 都是过程文件,删掉不影响 STU 打开,这一点在清理归档目录时很实用,但别在唯一一份工程目录里手动挑着删。
跨版本迁移只有一条路:低版本软件里点开始——导出项目,保存类型选 *.XEF;高版本里再导入。直接拿高版本双击低版本的 STU,大概率提示格式不支持。反过来低版本打开高版本也一样,别在这个上面浪费时间猜原因。
我现在的交付习惯是三件套一起归档:一份 *.XEF 导出文件、一份带日期目录的 *.STU 副本、一份从变量表导出的 TXT。XEF 用于跨版本和跨机器恢复,STU 副本用于版本回溯,TXT 用于快速比对点表变化,三者互不依赖,任何一个坏掉都不至于从零开始。
| 归档物 | 格式 | 用途 |
|---|---|---|
| 工程主文件 | *.STU | 日常打开、下载 |
| 交换文件 | *.XEF | 跨版本迁移、异机导入 |
| 变量表 | *.TXT | 点表比对、Excel 批量维护 |
下载完成后的第一次上传验证也顺手做掉,确认能完整取回工程再关闭连接,断开时记得点「是」更新上载信息。从那以后我每次交付出图前都强制走一遍「导出 XEF → 复制 STU → 导出变量表」,多花五分钟,换的是后面任何一次误删都能原地恢复。希望帮到你。
本文还有配套的精品资源,点击获取