ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Sysmac Studio基本使用全攻略:从PLC编程到运动控制调试

Sysmac Studio基本使用全攻略:从PLC编程到运动控制调试

1. 工程环境与界面布局,先把工作台理顺

很多朋友第一次打开Sysmac Studio,第一反应是“密密麻麻的工具栏,根本不知道从哪里下手”。咱们这篇“基本使用(二)”,我不打算重复第一篇里面新建工程那点事,而是直接唠清楚那些每天都会碰到、但说明书上写得特别绕的常用操作。把这篇啃下来,至少你能自己建工程、配轴、写ST程序、在线监控,解决现场一多半“软件怎么用”的问题。面向的是已经跑过简单逻辑、但对整个软件体系还没形成完整认识的工程师。

先说界面。Sysmac Studio的默认窗口布局分成左中右三块思路:最左边是工程树,像Windows的资源管理器一样,一层层点开就能看到配置、编程、运动控制等所有东西;中间就是编辑器区,双击工程树里的某个对象,右边就会弹出对应的编辑页面;最下面通常是输出窗口和编译结果,出错信息都在那儿列着。刚上手的时候不要急着点,先把左侧工程树从顶层到底层捋一遍,你会有一种“哦,原来它把所有东西都放在了树形结构里”的通透感。很多初学者点不到面,就是因为没理解这棵树的主干是什么。

再说新建工程时的类型选择。入口在“文件—新建”,弹出来的对话框第一项是设备型号选择,这里能看到NJ、NX、NY这些控制器的型号,还分CPU单元型号。选错CPU型号会直接导致后面库版本支持出问题,因此新建前务必核对铭牌上的型号编码。第二个选项是梯形图或者ST作为默认程序语言,这个可以选ST,因为后续我们重点是ST编写;第三项是运动控制轴的设置模式,有“轴设置”和“轴设置+设备”区别,这里如果不确定,选带设备模式即可,后面还能改。这里的几点选择看似小,实际上影响你后面能不能快捷添加EtherCAT从站和轴,我在现场吃过这个亏,后面细说。

工程树里最值得关注的是“配置和设置”下面的“CPU”,以及“运动控制”—“轴设置”和“程序”这三大块。“CPU设置”里面能改任务周期、中断、串口参数和一些扩展配置,注意这里的“动作模式”可以设为“运行”或“程序”,日常调试时设为“程序模式”可以防止某些误操作直接触发输出。而“I/O映射”和“全局变量”在工程树中是顶层节点,不是挂在CPU下的,经常有人找半天找不到标签编辑器,其实就在工程树的根目录位置。

1.1 主程序周期设定背后的逻辑

在“CPU设置”—“任务设置”里,默认会有“主任务”和“周期任务”几项。很多同学对主任务的周期设定不敏感,直接默认1ms就开干了。实际上你要综合PLC运算量、EtherCAT同步周期、伺服运行速度要求来定。比如你带了一堆直线电机和视觉通讯,主任务周期设成1ms,但程序里执行了一大堆浮点运算和数组拷贝,那极有可能每次周期算不完,出现“任务超时”报警。

任务周期和EtherCAT通信周期是关联的。当你启用轴时,EtherCAT从站刷新周期默认与主任务周期匹配,如果你把主任务调成4ms那运动控制的插补周期也会跟着变。这里建议一个常规套路:纯逻辑为主且没有高速运动时,用2ms或4ms;有伺服插补且对轨迹平滑度比较在意时,用1ms甚至更短。我是怎么判断的?很简单,先在2ms跑仿真,观察“任务监控”标签页里的任务执行时间,如果最大执行时间超过周期的80%,就往上调周期或者优化程序,否则留给PLC的余量不够,现场上的偶发抖动、报警就更难查。

1.2 库与程序结构的组织习惯

再展开聊聊工程树上“程序”和“库”。程序节点下默认有几个文件夹:程序、功能块、功能等。Sysmac Studio的一个工程可以建多个程序,每个程序都可选择语言类型。建议你按功能块拆封:逻辑控制一个程序,运动控制单独一个程序,报警处理一个程序。原因很简单,将来定位问题的时候,你顺着程序分支就能找,不用翻一大坨梯形图。而且当程序之间的变量访问通过“全局变量”统一管理后,模块化测试非常方便,哪段逻辑出问题直接“仅编译当前程序”。

库的用法也算基本操作里比较高级的一点。你可以把常用的功能块,比如电机使能顺序、设备握手逻辑、模拟量滤波这些封装保存到库文件夹里。这里有一个隐藏技巧:Sysmac Studio支持将库文件发布到本地,然后在其它工程里导入。注意版本兼容问题,库的版本和工程使用的Sysmac Studio版本必须匹配,否则导入后可能报错。我的经验是:封装库的时候,变量命名一定带上项目前缀,防止不同库之间的命名冲突,这个坑我在多项目复用同一套库时踩过一次。

2. 变量与I/O映射,让数据在程序内部和外设之间流动

刚接触Sysmac Studio那会儿,最让我困惑的倒不是写程序,而是“变量到底怎么关联到真实PLC地址上”。现代PLC越来越强调符号化编程,Sysmac Studio也是这种思路。你在程序里不能直接读写I/O地址,得通过“变量”来承载数据,然后在“I/O映射”里将变量和物理地址绑定。这中间涉及两个层面:一是内部变量如何定义,二是变量如何映射到硬件通道。

全局变量表的位置在工程树“全局变量”节点。双击打开后,能看到表格:名称、数据类型、初值、保持属性、注释等。个人习惯是所有和设备状态相关的变量都用N、S等前缀区分,比如“N_AutoMode”、“S_AlarmCode”。这里的数据类型是关键,选错了后面的运算会非常痛苦。比如你从模拟量模块读一个温度值,默认16位有符号整数INT就够;但是做温度数据处理时想显示小数点,就需将原始工程量用浮点数保存。这里推荐的做法是:模拟量原始值保持为INT,参与运算或显示时转换为REAL,避免SCADA和程序侧精度不一致。

开关量输入输出用BOOL,但I/O映射时有一个“逻辑取反”选项,这个很实用。比如某传感器常闭输出接PLC输入,正常有物体时信号为OFF,这时你可以在映射表里直接启用取反,程序内看到的就成了TRUE=有物体。这样做可以避免程序里到处写“线圈取反”或用常闭触点绕来绕去,工程维护起来清爽很多。

2.1 直接地址映射与结构化映射怎么选

I/O映射窗口左侧是节点树,展开会看到Built-in IO、EtherCAT从站等设备。选中一个设备节点,右侧显示所有可映射的通道。Sysmac里给通道分配标签时有两种常用方式:一是双击“地址”列,手动输入类似“%Q0.01”这样的绝对地址;二是双击“标签”列,新建或选择已有全局变量,系统会自动匹配到该通道的地址。第一种适合快速直接寻址,但项目一旦变量多了容易乱;第二种比较推举,因为整个工程只需关注标签名称,后续修改硬件地址不影响程序逻辑。

结构体映射是另一个十分偷懒的方式。假如你有8个气缸,每个气缸有正限位、负限位、动作中、注磁等信号,把它们放在一个结构体里:

TYPE ST_Cylinder : STRUCT PositiveLimit : BOOL; NegativeLimit : BOOL; Busy : BOOL; MagnetOn : BOOL; END_STRUCT END_TYPE

然后建一个数组变量Cylinder : ARRAY[1..8] OF ST_Cylinder;。在I/O映射里,把某个输入单元的16个点按顺序映射到Cylinder[1].PositiveLimit等成员。这样程序里操作Cylinder[2].Busy就非常直观,不需要为每个气缸单独建一堆散落的变量。前提是你从站刷下来I/O地址顺序和你的结构体成员顺序一致。结构体映射还要求成员类型和通道位宽一致,比如把16位模拟量映射到结构体的INT成员。这个方法在大型气动设备上优势明显,强烈建议试试。

2.2 模拟量处理中缩放与偏移的惯用套路

模拟量映射不像开关量那么简单,你读到的原始值是0~32767或0~65535,要变成实际的0~10V、4~20mA物理量,还需要量程转换。Sysmac Studio里没有像某些传统PLC那样自带的模拟量缩放指令,但标准库里有“Scale”功能块,也可以自己写个ST函数。常见套路如下:

// 模拟量原始值 0..32767 对应 4..20mA -> 0..100% // 假设 AVRaw 为WORD转的INT型 AI_Percent := (INT_TO_REAL(AVRaw) / 32767.0) * 100.0;

注意西门子/三菱里常有“ -32768~32767”带符号模式,欧姆龙模拟量模块默认可能配置成0~32767,所以不同模块要按模块规格处理。另外数字量滤波建议不要放到映射表里,用程序里移动平均滤波或限幅滤波来实现。滤波会增大传感器响应延迟,安全回路不要使用滤波,比如急停信号就应该瞬时响应,只在普通测量信号上做滤波。

3. 运动控制轴配置,把伺服和软件之间的那点事弄明白

到了第二篇,运动控制这块绕不开。Sysmac Studio的最大优势之一就是把EtherCAT总线和运动控制紧紧整合到一起。添加伺服轴不需要像传统方式那样写一堆定位指令和脉冲输出指令,而是通过配置和运动指令库完成。理解好这个体系,你会发现伺服配线对软件层面的依赖大大降低了。

先讲添加EtherCAT轴的过程:工程树“运动控制”—“轴设置”里,右键“添加”,选择“轴设置”。此时右侧会弹出轴设置编辑器,和“配置和设置”中EtherCAT主站下的从站设备联系。在“EtherCAT”节点下,如果你已经添加了伺服驱动器从站,可以通过“从站信息自动生成轴”或者手动指定轴号来创建轴。两种方式都要保证轴号和驱动器节点一致,否则一启动就会报轴分配错误。

添加轴之后重点配置基本参数:轴类型(线性轴、旋转轴)、旋转方向、行程范围、每圈脉冲数、工作台行程和电机每转移动量。这些参数里面最容易出问题的是“每圈脉冲数”和“电机旋转一圈移动量”。伺服驱动器电子齿轮比若设定成1:1,则电机编码器分辨率比如24位,即16777216脉冲/圈。如果驱动器里有电子齿轮比,则需要按传动比折算。我遇到过有同事把编码器分辨率当成每圈脉冲数填进去,结果100次定位跑得歪七八扭。正确做法是按伺服说明书设置好脉冲输出模式后,把“每圈脉冲数”设为编码器分辨率(常见16777216),把“旋转一圈移动量”设为丝杠导程,这样所有单位都以用户单位(mm或deg)为准,程序里控制位置就是几何单位,非常直白。

行程限制在“轴设置—限制”里可以设软件正负限位。即使物理限位没接线,也建议在软件里定义软限位,让运动指令在越界前就被拦截,防止机械碰撞。

3.1 轴使能与原点复归的配置细节

轴不是配置完就能直接动的,你得先写使能程序。Sysmac运动库里有MC_Power功能块,用它使能轴:

MC_Power_0( Axis := Axis1, Enable := true, RegulatorOn := true, DriveStart := true, Status => PowerStatus, Error => PowerError, ErrorID => PowerErrID );

注意Enable := true只是让功能块激活,RegulatorOn和DriveStart才是伺服使能真正生效的开关。实际现场通常用急停链控制RegulatorOn,急停断开时此输入为假,驱动器掉使能但功能块还在运行。有的人把Enable接急停信号,急停一断,整个运动指令异常终止,会导致许多不必要的复位流程,这种接线逻辑不建议。正确思路是驱动器使能常通,真正启停由模式、急停链来管理,这样回原点、报错恢复都优雅得多。

原点复归建议使用MC_Home功能块。Sysmac里的原点方式有:1)带限位开关原点;2)原点接近信号+Z相;3)数据设定型原点。最常见的是伺服驱动器上接原点传感器,PLC通过EtherCAT读取原点输入信号。配置时选择“原点输入信号”,设定方向、原点输入逻辑、回原速度、接近速度等。这里有一个现场高频问题:原点接近信号只在低速时才有效,高速时接近原点就直接滑过去了,所以要设置两级速度——高速去找接近开关,遇到后减速到爬行速度再找Z相或原点信号,保证重复精度。很多新工程师直接用一个速度冲过去,回原点位置每次漂好几个丝,原因就在这。

3.2 电子齿轮与凸轮表快速配置

电子齿轮在Sysmac里可以直接用MC_GearIn功能块,也可以在主站配置中做“同步控制”。如果想实现从轴跟随主轴做比例运动,比如飞剪、绕线,最简单的就是:

MC_GearIn_0( Master := Axis_Master, Slave := Axis_Slave, RatioNumerator := 2, RatioDenominator := 1, ... );

这里Ratio分子分母既可以设为整数,也可以设为浮点。注意齿轮关系不是万能的,机械传动间隙、负载变化会导致累积误差,如果要求长距离高精度同步,建议用虚轴主从同步,配合电子凸轮更好。

凸轮表的配置则是另一个常用场景。Sysmac里凸轮表除了可以用电子凸轮编辑器画曲线,也可以导入Excel表格生成。配置步骤:在“运动控制”—“凸轮表”—新建凸轮,然后右键“从Excel导入”,选择凸轮点数据。导入后注意检查凸轮数据的主轴角度范围和从轴位置单位,周杰伦《止战之殇》那种旋律我不懂,但凸轮表单位配错我是真的现场闻过。凸轮表配置完成后在程序里用MC_CamIn功能块激活。需要特别强调一下:凸轮曲线生成时一定要确保起点和终点位置一致且速度一致,否则机器在循环连接点会有冲击,轻则噪音,重则断凸轮随动。软件里会自动提示曲线不光滑,新手容易忽略这种警告。

4. 编程实现,ST与梯形图的配合原则

很多从传统PLC转过来的工程师,天然喜欢梯形图,看到ST就抵触。但Sysmac这款软件,你用梯形图写复杂数学运算和数组处理,真的会被折磨。我的核心原则很简单:逻辑顺序/互锁/故障处理用梯形图,数据处理/算法/批量操作用ST。两者在同一个工程里共存,甚至同一个程序里可以有不同的POU,没有任何问题。核心是让每种语言干自己最擅长的活,而不要试图用一套语言解决所有事。

梯形图的优势在于电气风格的可读性,尤其是当维护人员有电工基础时,看梯形图能直接理解电路关系。而ST的优势在于批量赋值、For循环、复杂表达式。例如把10个模拟量通道的滤波状态放到一起初始化,梯形图你得写10行输出,ST写个FOR循环就完事。看下面的代码:

FOR i := 1 TO 10 DO AI_Filtered[i] := AI_1[i]; // 先用原始值初始化滤波缓冲区 END_FOR;

这段代码换成梯形图,那画面太美我不敢看。另一个常见场景是设备状态字打包上传,比如把8个BOOL状态组合成一个WORD发给触摸屏,梯形图要写8段起保停或用Byte的位移位,而ST一行赋值就能搞定:

StatusWord := 0; IF Condition1 THEN StatusWord := StatusWord OR 16#0001; END_IF; IF Condition2 THEN StatusWord := StatusWord OR 16#0002; END_IF;

这种写法直观、不易错、好修改。所以我真心建议所有手上在用Sysmac Studio的朋友,至少学会ST的条件语句、赋值语句、FOR循环、CASE结构,你后面编程效率会提升一倍。

4.1 功能块封装让复用变成一种享受

Sysmac里功能块类似PLCopen标准功能块,可以自己新建,也可以写一个ST POU,然后把声明区里的VAR_INPUT、VAR_OUTPUT、VAR_IN_OUT、VAR等定义成你的接口和内部变量。我举一个最简单的电机使能顺序功能块:输入有使能命令、急停状态、伺服Ready,输出有使能完成、错误码;内部用一个CASE实现状态机。

写功能块时要注意一个常见错误:普通功能块(FB)必须声明一个实例才可以使用,函数(FUN)则不需要。Sysmac里也有函数功能块,默认类是功能块。新手经常把FB当函数用,然后编译报错“无实例”。解决办法:在全局变量表里,或者调用POU的本地变量里,声明一个FB类型的实例变量,然后再调用。比如:

FB_MotorEnable_Inst : FB_MotorEnable; // 实例化 FB_MotorEnable_Inst(EnableCmd := btnStart, Ready := SvrReady, Done => running);

功能块实例名不能和变量冲突,这一点IDE里也会做检查。建议所有FB内部状态变量不要放在VAR_IN_OUT里,而是放在VAR里,这样对外的接口干净,也方便监控内部状态。

4.2 一个ST例程,从编写到赋值全流程

我们来手写一个简单但完整的例程:三个设备泵组的逻辑,实现自动选择运行泵数量。目标:根据压力设定值和当前压力,调节运行数量,最少一台,最多三台。流程:压力低加泵,压力高减泵,泵之间需切换轮换。为了不啰嗦,我只写核心逻辑:

// 假设 Pumps : ARRAY[1..3] OF BOOL; // 输出给接触器 // Pressure 当前压力 REAL,SetPoint 设定压力 REAL // RunningCount 整型 实际运行数量 CASE state OF 0: // 停止状态 RunningCount := 0; FOR i := 1 TO 3 DO Pumps[i] := FALSE; END_FOR; IF bAutoStart THEN state := 1; END_IF; 1: // 运行状态 IF NOT bAutoStart THEN state := 0; ELSIF Pressure < SetPoint - 0.5 THEN IF RunningCount < 3 THEN // 加一台 RunningCount := RunningCount + 1; END_IF; ELSIF Pressure > SetPoint + 0.5 THEN IF RunningCount > 1 THEN // 减一台 RunningCount := RunningCount - 1; END_IF; END_IF; // 根据运行数量,把轮换后的泵输出置位 FOR i := 1 TO 3 DO Pumps[i] := (i <= RunningCount); END_FOR; ELSE state := 0; END_CASE;

上面这个例子里,我用了一个整数RunningCount代表泵数量,没有直接用泵数组来计数,好处是加减泵逻辑清晰。轮换算法我没有细写,实际上可以加一个RotationIndex变量,每次启动时偏移。编译后这个例程可以直接分配给“程序—Program”,然后在扫描周期内持续执行。在ST里,FOR循环的索引变量i需要在声明区定义为INT,Sysmac不允许直接在循环里用未声明变量。

写完程序,编译时可以从输出窗口看到错误行号和信息。Sysmac有个让我很喜欢的功能:双击错误信息可以直接跳到出错的代码行,甚至能定位到具体变量。修改完重新编译,直到输出窗口只有警告没有错误,就可以进下一步仿真或在线。

5. 在线监控与调试,把现场问题摁在萌芽期

写程序谁都会,但调试才是真正见功夫的地方。Sysmac Studio的在线监控做得很直观。在工程树里右键工程名,选择“在线”或点击菜单栏“在线”按钮,此时分为两种情况:连接真实PLC或启动仿真器。两者界面一致,但仿真器不需要硬件,特别适合初期验证逻辑和运动曲线。我这节主要讲在线真实设备时的操作。

连接成功后,工具栏会变成在线状态,程序模块前会出现小标记。默认情况下,在线状态下程序只能看不能改。如果你改了程序,需要“传送”操作把新工程下载到PLC。这里有一个非常关键的细节:Sysmac Studio下载程序时,如果工程中被修改过数据且PLC正在运行,默认会提示“停止运行并传送”或者“传送并运行”。如果直接把PLC切到运行,那就可能造成设备突然动作。稳妥做法:在“在线”—“操作设置”里勾选“传送后保持停止状态”,等确认无误后再手动切到运行模式。对于调试初期,我基本都是传送后停在程序模式,然后一句一句推进测试。

在线监控界面支持多个窗口。最常用的是“数据监视窗口”,可以通过菜单“在线—数据监视窗口”打开,输入变量名,回车,实时值和当前值都显示出来。还可以右键变量选择“修改”,把当前值强制改成任意值。这一点在调试时非常管用,比如你不想用传感器发信号,直接给变量置TRUE,观察程序响应。但注意,如果程序里某一段逻辑每个周期都在赋初值,你强制修改会被覆盖,看起来“改了没反应”。这个其实不是没反应,而是程序随后又把它重新计算了。要排查只能通过断点或修改程序逻辑。

5.1 任务扫描模式下监视时序的方法

Sysmac Studio支持实现在线调整和断点调试(ST程序里可以设置断点)。这个功能真的非常好用。你可以打开ST程序,在某一行的左边框点击设置断点,然后编译下载。当程序执行到该行时会暂停,右侧监视窗口会显示当前所有变量的值。这在排查“为什么某条件总不成立”时效率极高。

断点调试的缺点是,设备正在长时间运行生产时,断点会导致轴停在一个不确定位置,有安全隐患。因此我建议断点调试只用于单机停机调试。如果你只是想知道某个程序块单次执行了多少次,可以在里面加一个计数器变量,然后在线监视该计数器,而不是直接设断点。更贴现场的技巧:大量逻辑用“条件满足即置位一个标志位”的思路,监控这个标志位,就能判断条件是否在某一个周期出现过。否则断点一停,整个扫描周期也被暂停,你以为发现了问题,其实可能掩盖了时序问题。

5.2 强制输入的几种方式与风险

在数据监视窗口右键变量,可以对BOOL型变量进行“强制TRUE/FALSE”。强制对象分“变量”和“物理触点”。当你强制一个映射到物理输入的变量时,实际上强制的是I/O刷新后的变量值。这时候外部输入变化,只要程序不覆盖它,它就一直是强制值。之后再点“取消强制”或“释放所有强制”恢复。

风险在哪里?如果你强制了一个安全相关的常闭信号,比如把急停输入强制为TRUE,然后你忘了释放强制,过一会儿你测试安全功能时发现急停根本没用,那设备就可能冲出限位。我的习惯是:每次强制之前先在变量名后面加一个“//F”注释符号标记,在线测试完立马释放。当然更好的办法是不要动物理安全输入,测试安全功能应该用硬件本身模拟。强制功能尽量只用于那些非关键的条件、模式选择、工艺使能信号。另外如果PLC重启,强制值会被清除,不要依赖强制来维持生产。

还有一点,多个工程师同时在同一台PLC上调试时,谁强制了哪个变量是看不见的,必须用“在线—分配与强制监视”这个窗口查看所有强制列表,能显示当前强制状态。调试完务必全清。

5.3 在线修改程序时机的选择

在线修改是指不停止PLC而更新程序,但Sysmac对在线修改的支持有特定条件:只支持某些修改类型,比如增加网络段、修改参数、替换部分指令,但不支持删除或更改已经分配的数据类型,尤其是变量类型。在线修改触发后,程序会被部分锁定,有的版本会要求“重启任务”。执行在线修改时,运动控制轴会有微小停顿风险,因此不要在轴跟随时做在线修改。如果涉及轴运动相关的程序变化,直接停下来传送,再运行,别图省事。

我在实际调试时,尽量把在线修改限制在纯逻辑、报警文本、定时器参数这类改动。凡是和运动控制接口、EtherCAT配置有关的东西,一律停机下载。稳比快重要,一天出事一次就能让你白加班好久。

6. 仿真模式下跑通逻辑,避免把现场变成试验场

仿真是一个被低估的功能。很多人以为仿真器只能跑逻辑,其实Sysmac Studio的仿真器还能模拟运动轴响应、EtherCAT从站的I/O变化,甚至能模拟故障。你可以通过仿真先验证手动自动模式的转换、报警复位流程、轴回原点的逻辑顺序,然后在现场再直接上传,会省很多时间。

启动仿真的很简单:点工具栏“仿真”按钮,或者选择“在线—启动仿真器”。第一次启动时,它会提示创建虚拟设备和虚拟轴,确定即可。仿真模式下也有“运行”/“停止”按钮,等同于PLC背面开关切到运行。仿真时程序会被编译并下载至虚拟PLC环境,数据监视窗口照常工作。轴运动控制的MC_Power功能块也可以执行,虚拟轴位置会按照当前速度积分。这允许你测试运动逻辑的位置条件,不是真的带动机械动,但完全能够验证程序分支选择。

顺带一提,仿真模式默认不会模拟实际输入输出刷新。你需要给输入变量临时赋值或强制,然后观察程序输出。在模拟设备显示窗口里,你甚至可以看到从站输入点并手动切换状态,这样即使没有硬件信号,也能完整跑一遍流程。因为我用仿真跑通了大部分逻辑,现场上电后只需要做传感器阈值和设备互锁的微调,极大地降低了故障概率。

6.1 仿真中时间尺度与实时性问题

仿真模式下,任务周期不一定严格按真实时间走。虽然虚拟PLC尽量1ms一个周期,但若电脑性能不足,仿真速度可能变慢。尤其是在仿真中加入大量轴和复杂数值计算后,你会发现虚拟轴运动速度明显低于设定值。这不是程序逻辑错,而是实时性不足。因此,仿真不能用来精确评估节拍时间、运动协调性能,只能验证功能逻辑。如果需要时间分析,还是得靠真机或高级仿真方案。

规划仿真时,建议把“时间无关”的逻辑先测:状态机、报警、联锁、I/O对应关系。凡是涉及时间条件——比如等待一个气缸到位超时5秒,在慢速仿真下,你会觉得程序卡很久,其实实际PLC运行不慢。为了避免这种误导,可以把超时时间临时缩短到0.5秒测试。记得测试完恢复原值,并且不要用仿真值直接下载到现场。

6.2 仿真中模拟故障复位的常见做法

故障复位逻辑是很多新工程师头疼的部分。仿真里可以手动将故障代码变量置位,比如设置轴故障控制字,或在数据监视窗口里直接给某个虚拟输入置真,模拟限位开关卡住。然后观察程序中的复位流程是否正确进入“故障状态”。实际过程中,我经常模拟三个故障同时发生的场景,确认报警优先级和界面显示正确。

具体操作:先给故障输入置TRUE,此时监控到相应报警标志位变化;然后尝试启动复位命令,看故障是否被清;如果清不掉,检查复位条件里是否要求“故障源已消失”。比如某个故障代码复位条件包含“输入信号OFF”,你在仿真中忘记把故障输入置FALSE,复位永远无法成功。这类问题在真实调试中也特别多,先通过仿真反复熟悉复位逻辑,能有效节省现场时间。

7. 常见问题排查实录,这几年踩过的坑一次性说透

最后这一节,我把经常被同行问到的几个问题整理出来,以表格加文字的方式分享。这些都是我亲身经历过的或看同事反复掉落过的,不是抄说明书。

7.1 连接不上PLC时的排查顺序

症状可能原因解决动作
在线按钮灰色未打开工程或工程类型不匹配确认工程CPU型号与目标PLC一致
连接超时IP地址不在同一网段设置电脑网卡IP与PLC同网段(如192.168.1.x)
找不到设备USB驱动未装或EtherNet/IP配置错误用设备管理器检查USB驱动,重装Sysmac相关驱动
能连上但传输失败CPU处于运行且程序比较不匹配停止PLC或使用“传送并运行”前先备份程序
连接后崩溃Sysmac版本与PLC固件版本不一致升级或降级Sysmac版本,或升级CPU固件

还有一条最容易忽略:Sysmac Studio的在线连接需要目标PLC开启“允许在线编辑”或“允许传输”选项,有的厂家默认设置是禁止在线传输。直接到PLC“CPU设置”里找到相关选项打开即可。

7.2 轴使能后发抖或者堵转

轴使能瞬间,伺服电机高频抖动或者报堵转,排除机械卡死和驱动器参数问题后,软件层注意检查“轴设置—位置控制”里的“定位完成宽度”“跟随误差过大阈值”等参数。如果在使能前,轴实际位置与指令位置已经偏差很大(比如手动盘过电机,或者编码器零点丢失),使能瞬间驱动器会尝试追脉冲,就会出现猛抖。此时先把轴“当前位置设为零”或执行一次原点复归,将指令位置与实际位置对齐,再使能轴。

还有一点,轴类型选错也会出现这种现象。线性轴但配置了旋转轴的位置单位,导致一圈对应角度和毫米数差别巨大,使能后伺服直接跑飞报警。配置轴时一定按机械机构来选,滚珠丝杠平台用线性轴,转台或者分度盘用旋转轴,每圈移动量要对应物理实际。

7.3 程序下载后设备不动作的隐形陷阱

下载后明明程序已经运行,但设备一点反应都没有。大多数时候是因为混淆了“程序模式”和“运行模式”。PLC前面板状态在仿真或在线时看到的模式,必须切到“运行”才执行输出。另外,检查输出点是否被强制,尤其是调试过程中强制过输出,忘了释放,即使程序逻辑输出了TRUE,物理输出也不会变化。这时在线监视变量显示为TRUE,但输出模块指示灯不亮,十有八九是强制残留或输出点使能条件缺失。

另一种情况是PLC内部的安全状态:有些CPU型号带有“安全CPU”功能,安全功能未解锁时,普通输出通道被禁止。排查时先看CPU模块上的“安全”状态指示灯,如果没亮,说明安全逻辑没有收到“允许输出”信号。这时候到“安全”相关配置里检查运行启动输入。这些故障现象容易误判成程序问题,如果你在线看逻辑和变量都对,那就往硬件使能和强制列表方向查。

7.4 运动控制指令有时不触发的原因

我遇到最多的情况是MC_MoveAbsolute指令的输入Execute用的是普通Bool变量,该变量在程序里被置TRUE后持续保持,没有形成“上升沿”。PLCopen运动控制指令大多要求Execute输入为上升沿触发,如果一直为TRUE,指令只执行一次,后续位置修改不生效。解决办法是用MOVE指令前的“R_TRIG”功能块,或者专门写一个上升沿变量。例如:

RTrig_ABS : R_TRIG; RTrig_ABS(CLK := bRunCommand); IF RTrig_ABS.Q THEN MC_MoveAbsolute_0( Axis := Axis1, Position := TargetPos, Velocity := Vel, Execute := TRUE ); END_IF;

实际上MC_MoveAbsolute的Execute也可以直接连bRunCommand,但第二次修改TargetPos再置TRUE是不会执行的,你在现场经常看到“改个位置数据就是不听使唤”就这样来的。同理,很多功能块的Enable和Execute区分必须理解清楚。Enable是功能块长期激活,Execute是启动命令的跳动信号。这条如果没搞明白,运动控制调试能把人逼疯。

7.5 数据丢失与掉电保持的误区

Sysmac里掉电保持由变量的“保持属性”决定。在全局变量表里,保持属性勾选后,该变量会保存在CPU的非易失性区域。但要注意,只有变量名、数据类型、初始值和保持属性一致,PLC重新上电后才能恢复。你不能指望结构体中某几个成员掉电保存而另一些不保存,所有成员都统一继承结构体变量的保持属性。另一个高频误区:把计数器变量设为保持属性,结果手动重启后计数器应该归零却没归零,导致设备误动作。所以保持属性只加在真正需要在掉电后恢复的设备号、配方号、累计产量这类变量上。

还有掉电保持区的容量是有限的,不要把所有变量都勾保持。一旦容量超限,编译时会报“保持区溢出”,导致无法下载。如果遇到这种提示,检查哪些变量可以被设计为非保持,清理掉即可。使用“内存访问权限”和“注释”也能帮助你快速扫描变量表。

写在最后的小经验

上面这些内容,是我在无数个调试夜晚里总结出来的“避坑”实用记录。如果你问我最想提醒新手什么:第一,变量命名和注释一定写全,不然三周后你自己都想不起来这个BOOL控制的是哪个气缸;第二,仿真一定要用,但不要过度依赖,现场信号和硬件的本质问题仿真替代不了;第三,每当你要对PLC做下载或强制操作前,先拍照保存当前工程和监控值,最好用Sysmac自带的项目比较功能做一次差异对比,避免后来回去找不到自己改了什么。

Sysmac Studio这套软件,表面看功能庞杂,但真正日常用到的核心功能不超过20%。把这20%用熟、用透,你就能解决80%以上的应用问题。希望这篇“基本使用(二)”能让你少走点弯路,后面有时间我还会接着写一些更细化的专题,比如功能块库封装技巧、凸轮表曲线规划、以及和上位机通讯的案例。大家在实际使用中遇到什么具体问题,也可以带着现象和截图来聊,线上说不清楚的,按这个思路去排,至少能帮你缩小范围。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进