3、第一个SCL程序:编写“Hello World”程序、程序下载与监控、在线调试基础
说实话,学任何一门编程语言,第一个程序都是“Hello World”。这几乎成了工程师的仪式感。SCL也不例外。虽然PLC的世界里没有控制台让你打印字符串,但我们可以点亮一个灯,或者往数据块里写个值,来宣告:我写的程序活了。
我个人习惯,每接触一个新平台,第一件事就是跑通这个最小系统。这能帮你验证三件事:编程环境好不好使、下载通道通不通、监控能不能看到结果。嗯,这三步通了,后面的事就好办了。
3.1 编写你的第一个SCL程序
打开TIA Portal,新建一个项目,选好你的PLC型号(我常用的是S7-1200或S7-1500)。在程序块里添加一个函数块(FB)或函数(FC),语言选SCL。
你会看到一个空白的编辑器界面。别慌,先写一行最简单的代码:
#hello := "Hello World from SCL!";
等等,这个#hello是什么?它是你在块接口里定义的变量。你需要先在接口区(Interface)里声明一个局部变量,类型选String。就像这样:
FUNCTION "FC_HelloWorld" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR
hello : String[25];
END_VAR
BEGIN
#hello := "Hello World from SCL!";
END_FUNCTION
你看,SCL的语法其实很接近Pascal或C语言。赋值用:=,语句结束用分号;。我刚开始从梯形图转SCL时,老忘加分号,编译报错一脸懵。后来养成了习惯:写完一行,手指自动敲个分号。
#是TIA Portal的局部变量标识。如果你用的是全局变量(比如DB块里的),直接写"DB名称".变量名就行。我个人建议新手先用局部变量,避免变量冲突。
3.2 程序下载与监控
程序写好了,怎么让它跑起来?你需要把代码下载到PLC里。这个过程,说白了就是把你电脑上的“思想”灌进硬件的大脑。
操作步骤很简单:
- 点击工具栏的“下载”按钮(或者按快捷键Ctrl+D)
- 选择你的PLC设备(确保电脑和PLC在同一个网段)
- 系统会提示“停止模块”?点“是”。PLC会进入STOP模式
- 下载完成后,系统问你是否启动模块?点“是”。PLC切回RUN模式
我记得第一次下载时,卡在“无法访问设备”上。折腾了半天,发现是电脑IP地址没设对。你想想看,PLC的IP是192.168.0.1,你电脑是192.168.1.100,这俩不在一个网段,怎么通信?
下载完成后,怎么看到你的“Hello World”呢?这时候需要用到监控功能。右键点击你的程序块,选择“监视”(或者按快捷键Ctrl+Shift+F9)。你会看到变量旁边出现了实时值。
如果#hello变量显示的是'Hello World from SCL!',恭喜你,第一个SCL程序跑通了!
3.3 在线调试基础
程序能跑只是第一步。真正干活的时候,调试才是重头戏。我见过太多人,程序写完了直接丢到现场,结果设备动不了,然后一脸无辜地说“我仿真没问题啊”。
在线调试,说白了就是让PLC停下来,你一步一步看它怎么执行。SCL的调试工具比梯形图更直观,因为你可以看到每一行代码的执行顺序。
常用的调试手段有几种:
- 单步执行: 点击“单步”按钮,程序会执行一行就停下来。你可以观察每个变量的变化。我习惯在关键赋值语句前设断点,看看值是不是预期的。
- 断点调试: 在代码行号旁边点一下,会出现一个红点。程序运行到这里会自动暂停。这招在排查复杂逻辑时特别好用。
- 监视表格: 除了在代码里看变量,你还可以打开“监视表格”,手动输入变量地址,批量观察。我个人喜欢把关键变量都列在监视表格里,一目了然。
为什么会需要这些调试手段?因为PLC程序是循环执行的。你想想看,一个循环里可能有几百行代码,如果某个中间变量算错了,你光靠眼睛看是看不出来的。只有让程序停下来,你才能抓住那个“罪魁祸首”。
举个例子,我曾经调试一个PID控制程序,输出值总是震荡。我设了断点在积分环节,发现积分项累加异常——原来是积分限幅没设好,数值溢出了。这种问题,不单步调试根本发现不了。
3.4 本章知识体系
为了让你更直观地理解本章的内容结构,我画了一张流程图。它展示了从编写到调试的完整链路:
这张图把本章的核心逻辑串起来了。你从编写开始,经过下载、监控,最后进入调试。每一步都有它的意义,缺一不可。
好了,第一个SCL程序你已经跑通了。接下来,你可以试着改改那个字符串,或者加个计数器,看看变量怎么变化。动手试试,比看十遍教程都管用。
#debug_counter变量,每次循环加1。这样我就能知道程序跑了多少轮,有没有卡死。这个小习惯,帮我抓到了好几次死循环的bug。
公众号:蓝海资料掘金营,微信deep3321