☰
欧姆龙ST编程入门:从结构化文本到功能块封装
2026/11/3 20:08:38 网站建设 项目流程

简介:这份欧姆龙ST编程中文手册面向PLC编程初学者与需要查阅功能块用法的工程人员,围绕CX-Programmer 6.1环境下的ST语言入门与功能块应用展开,可帮助读者理解结构化编程的基本思路、变量声明与功能块调用方式,并了解技术规格及安全、应用注意事项。资源包共1个PDF文件,大小约2.26MB,内容按介绍、编程指导、注意事项等章节组织,涵盖功能块类型、变量、库文件转换、实例规格与功能块限制等主题,便于在项目中按目录检索和对照查阅。目前已有7329人学习,适合作为欧姆龙ST语言编程的入门指南和日常参考手册,也可用于梳理功能块编程流程、认识常见限制与注意事项,提升程序设计与查阅效率。

1. 先弄明白一件事:ST 编程到底是个啥

很多人第一次打开编程软件,看到满屏的触点和线圈,第一反应是“这图画得跟电路图似的,我能看懂”。可一旦逻辑里加进计时、计数、数据比较和一堆互锁条件,图就越画越长,横着排不下还要翻页,改一处得顺着线找半天。《欧姆龙ST编程中文手册》讲的 ST,就是给这种情况准备的另一种写法。ST 全称 Structured Text,中文一般叫结构化文本,是 IEC 61131-3 标准里定义的一种文本式编程语言,长得很像 Pascal 或早期 BASIC:有赋值、有 IF 判断、有 FOR 循环,一行一行往下读,像写流程清单。梯形图更像“画电路”,ST 更像“写步骤”。它解决的核心问题不是让程序跑得更快,而是让复杂逻辑写得更清楚、改起来更省心、同一段逻辑能打包复用。刚接触 PLC、准备上手功能块编程、又不想被复杂梯形图绕晕的人,都适合从它入门。

2. 为什么新手值得先学 ST:三个真实痛点

2.1 梯形图写不动的时候,ST 的优势在哪

梯形图的强项是“一眼看通断”,几个按钮控制一个电机,横竖几条线就看明白了。但逻辑一复杂,它的短板会很快暴露。比如你要判断 10 个温度值里有没有超过上限的,梯形图得摆 10 个比较触点再做或运算,图会横向拉得很长;换成 ST,一个 FOR 循环加一个 IF 就写完了,五行代码解决。再比如配方切换,几十个参数按编号取不同值,梯形图要用大量比较和传送指令堆,ST 用 CASE 语句能把每种配方写成一个分支,读代码的人一眼就知道“哦,一号配方走这段”。

这里要提醒一句:不是让新手彻底放弃梯形图。实际项目里两种语言经常混着用,简单的互锁、手动操作画面用梯形图,数据处理、通讯解析、复杂判断用 ST,各干各的活。之所以建议新手先学 ST,是因为它的语法规则少、可迁移性强。你会写 IF 和 FOR,换到别的品牌 PLC 上也大致认得出同样的结构,而梯形图的画法各家软件差别不小。另一个常被忽略的点是调试:ST 代码出错时,编译器会告诉你哪一行、哪个变量有问题;梯形图里一个触点接错,往往只能靠在线监控一段一段试。

我第一次接触 ST 时的感受是“终于不用在屏幕上找线了”。一段两百行的梯形图,改成 ST 可能只有六七十行,打印出来能一页看完。这个差别在接手别人程序的时候特别明显:读 ST 像读一段带注释的流程说明,读长梯形图像在解迷宫。

2.2 这份中文手册能帮你省掉哪些弯路

市面上讲 ST 的资料不算少,但新手真正卡住的地方往往不是语法,而是“这个软件里到底怎么点”。手册的价值就在这里:它把 CX-Programmer 6.1 这个具体软件和 ST 语言绑在一起讲,从功能块是什么、变量怎么定义、程序怎么创建,一路讲到技术规格和限制条件。你可以把它当成一本“边看边做”的操作地图,而不是语法词典。

从目录结构能看出它的编排思路。第 1 章先把功能块和变量这两个核心概念立起来,第 2 章给规格和限制,告诉你哪些能做、哪些做了会报错,第 3 章才是真正的创建流程,附录 A 到附录 C 补上数据类型、ST 语言规格和外部变量这些底层细节。这个顺序对新手很友好:先知道东西长什么样,再知道边界在哪,最后动手做。很多人学编程的失败经验是“一上来就抄代码”,抄完能跑,但换个场景就不会了,因为不知道边界。手册把边界放在动手之前,这一点值得学。

它还讲了不少容易被教程省略的实操细节。比如输入参数里填数值时必须加前缀,否则软件会把它当成地址;比如带功能块的任务不能按任务单元下载,只能整体下载;比如在线编辑后 CPU 会自动把程序备份进内置闪存,备份指示灯亮着的时候千万别断电。这些不是语法知识,是血泪经验,漏掉一条就可能在现场折腾半天。

2.3 零基础要准备什么:软件、硬件、心态

软件方面,手册对应的是 CX-Programmer 6.1 版本,这是欧姆龙的功能块编程软件。你需要把它装在一台普通的 Windows 电脑上,安装过程按提示走就行,注意装之前把杀毒软件、屏幕保护、自动更新这类会定时抢资源的程序先关掉,手册的注意事项里专门提过这一点,因为编程软件和 PLC 通信时被打断容易出怪问题。硬件方面,手册覆盖的 CPU 包括 CS1-H、CJ1-H、CJ1M、CP1H,还有 NSJ、FQM1 这些单元,其中 CS1-H、CJ1-H、CJ1M 要求 3.0 版本以上才支持功能块。手上暂时没有实物也不要紧,先把软件装好、工程建起来、代码写出来编译通过,这部分不需要接设备。

还需要一根编程电缆,通常走 RS-232C 串口或者 USB 转串口。这里有个老生常谈的坑:不少笔记本的串口默认被分配给调制解调器或者红外设备,插上线也连不上,得去设备管理器里确认端口号,还要把省电设置关掉,否则电压不稳会掉线。这些琐碎事听起来烦,但做完一次就一劳永逸。

心态上,建议先接受一个事实:ST 不难,难的是把工艺逻辑想清楚。语言只是表达工具,真正决定程序质量的是你对“设备该怎么动作”的理解。所以别急着背语法,先想清楚一个最简单的场景——按启动按钮电机转,按停止按钮电机停,过载就跳闸——然后用 ST 把它写出来。这个例子够小,小到你能完整走一遍建工程、定义变量、写逻辑、编译、下载、监控的全流程,走通了,后面都是在这个骨架上加肉。

3. 动手前的地基:变量、数据类型和功能块

3.1 变量:先给每个数据起个名字

写 PLC 程序,第一件事不是写逻辑,是给数据起名字。传统梯形图里我们习惯说“0.00 这个点”“D100 这个寄存器”,地址就是名字。ST 里更推荐反过来:先给数据起一个有含义的名字,再把这个名字绑到地址上。比如把 0.00 叫Start_Button,把 100.00 叫Motor_Run,把 D100 叫Temperature_Set。这样写出来的代码是Motor_Run := Start_Button;,读起来像一句人话,而不是100.00 := 0.00;。

这个“名字绑地址”的动作,在软件里叫变量定义或者符号注册。手册里把变量分成几类:输入变量、输出变量、内部变量、外部变量。输入变量是功能块对外的入口,输出变量是出口,内部变量只在功能块里面用,外部变量用来引用功能块外面的全局数据。刚上手时不用把四类都玩明白,先记住一条:功能块里面的逻辑只能看见自己声明的变量,外面的数据想进来,要么走输入变量,要么走外部变量。

地址绑定靠 AT 设定。你在变量表里给Start_Button写上 AT 0.00,它就固定对应这个输入点。不写 AT,它就只是一个内部变量,跟物理点没有关系。新手最容易犯的错是“以为起了名字就自动接上了”,结果下载下去按按钮没反应,查半天发现变量没分配地址。所以每次定义完变量,花十秒钟扫一眼 AT 那一列是不是空的。

3.2 数据类型:BOOL、INT、WORD 到底怎么选

ST 是强类型语言,每个变量都得有类型,类型不对编译器直接报错。这在一开始会让人觉得啰嗦,但它能挡住大量低级错误。常用的类型就那么几个,先把下面这张表记住就够用了。

类型位宽取值范围/用途典型场景
BOOL1 位TRUE / FALSE按钮、传感器、继电器输出
INT16 位-32768 ~ 32767有正负的计数值、偏差值
UINT16 位0 ~ 65535计数、编号
WORD16 位按位看,不做算术状态字、报警字
DINT32 位大范围整数累计产量、计时毫秒数
REAL32 位浮点数温度、压力、比例系数

选类型的判断方法很简单:这个数据会不会做加减乘除?不会,只是通断或者开关状态,用 BOOL;会,而且可能出现负数,用 INT;只会是正数,用 UINT;需要按每一位单独判断,用 WORD;涉及小数,用 REAL。手册附录 A 把数据类型讲得更细,包括数组和结构体,等前面这些用熟了再去看那部分,不会觉得吃力。

有一个细节新手常忽略:WORD 和 INT 在内存里都是 16 位,但语义不同。用 WORD 做加减,结果可能溢出翻转,用 INT 则会按有符号数处理。所以状态字、报警字这类东西老老实实用 WORD 加位操作,别图省事拿 INT 去按位与或。

3.3 功能块:把一段逻辑打包成能反复用的积木

功能块是这本手册的主角。用大白话讲,它就是把一段带输入输出的逻辑封装成一个“盒子”,盒子上有几个入口、几个出口,里面怎么算的你看不见也不用每次重写。用的时候在程序里放一个实例,接上入口信号,取出出口结果就行。这跟写代码时封装函数是一个思路:同样的活干三遍,就该打包。

举个具体例子。假设产线上有五台电机,每台都要“启动、停止、过载保护”这套逻辑。如果不用功能块,你会在梯形图里画五遍几乎一样的网络,改一个保护条件要改五个地方,漏一个就是隐患。用功能块,你只需要定义一个叫Motor_Control的盒子,入口是Start、Stop、Overload,出口是Run、Alarm,内部逻辑写一遍,然后创建五个实例,分别接五台电机的信号。以后要加“启动前先检查润滑”这种条件,只改盒子内部一处,五个实例全部生效。

手册里管这个叫“功能块定义转换为库文件”。意思是你把写好的功能块存成库,下次开新工程直接调用,不用重新写。这是功能块真正值钱的地方:经验可以沉淀。老师傅调好的一套控制逻辑,封装成库,新人直接拿来用,参数一填就能跑,既快又不容易出错。

功能块的执行方式也得说清楚。它在程序里被调用时才执行一次,输入变量的值在算法执行之前成批送进去,输出变量在算完之后成批写出来。所以如果某条指令执行过程中需要中间值变化,别指望输入变量实时更新,得用内部变量过渡。这一点手册在应用注意事项里专门写了,新手看到这段容易一滑而过,但它是很多“逻辑明明对、结果就是不对”的根源。

3.4 输入、输出、内部、外部:四种变量别搞混

把四种变量分清楚,能省掉一半调试时间。输入变量和输出变量是功能块对外的窗口,外部程序只能通过它们跟盒子打交道。内部变量是盒子里的草稿纸,外面看不见。外部变量比较特殊,它让功能块能直接读写外面的全局符号,比如某个公共的报警字或者配方参数。

用的时候有个原则:能用输入输出解决的,别用外部变量。因为外部变量相当于在盒子上开了个后门,外面改了值、断了线,盒子里的行为就不好追。手册里提到几种必须用内部变量加 AT 设定的场景,比如给指令操作数指定多个字的首地址或末地址、要给网络上的另一台设备指定地址、某些辅助区不能注册成全局符号。这些属于进阶内容,第一遍读能记住“有这回事”就够了,等真遇到编译报错再回来翻。

还有一个概念叫实例。功能块定义只是一张图纸,实例才是按图纸造出来的实物。同一个定义可以造很多个实例,每个实例有自己的数据区,互不干扰。这就解释了为什么五个电机能共用一个Motor_Control定义——它们各自有一个实例,Run和Alarm是分开的。定义改一次,所有实例的算法都变,但数据各管各的。

4. 第一个能跑的例子:从新建工程到一段 ST 逻辑

4.1 第一步:在 CX-Programmer 6.1 里把工程建起来

打开软件,新建工程,第一步是选设备型号。这一项千万别随手点,因为型号决定了后面能用的指令和功能块规格。手册覆盖 CS1-H、CJ1-H、CJ1M、CP1H 这几类 CPU,其中 CS1-H、CJ1-H、CJ1M 需要 3.0 版本以上才支持功能块,CP1H 本身就支持。如果你手上是更老的 CS/CJ 系列 2.0 版本,功能块是用不了的,硬下载下去所有实例都会被当成非法指令,程序既不能编辑也不能执行。

选完型号,软件会让你设定网络类型和通信方式,本地连机一般走串口或者 USB。工程建好后,先在左侧的工程树里找到“符号”或者“变量表”,把接下来要用的变量先定义出来。这个顺序很重要,因为 ST 编辑器有语法检查,引用一个没定义的变量会直接报错,新手容易以为是语法写错了,其实是名字没注册。

建工程阶段还有两个设置值得顺手做掉。一是把工程文件存到一个专门的文件夹,别放在桌面上,后面下载、备份、存档都用得上。二是看一眼 PLC 属性里的存储器备份状态,知道程序下载后会往内置闪存里写一份,这关系到后面断电的时机。这两件事花不了两分钟,但能避免后面不少麻烦。

4.2 第二步:写下第一段 ST 逻辑,一个启保停

我们从最小的例子开始:一个启动按钮、一个停止按钮、一个过载信号,控制一台电机。先在变量表里定义三个输入和一个输出,给它们分配好地址。

(* 变量声明:实际在变量表里填写,这里用注释列出对应关系 *) (* Start_Button : BOOL, AT 0.00 启动按钮,常开接法 *) (* Stop_Button : BOOL, AT 0.01 停止按钮,常闭接法 *) (* Overload : BOOL, AT 0.02 过载保护,常闭接法 *) (* Motor_Run : BOOL, AT 100.00 电机输出 *) (* 启保停逻辑:启动或自锁,再串上停止和过载 *) Motor_Run := (Start_Button OR Motor_Run) AND Stop_Button AND Overload;

这几行代码的含义要拆开看。第一行Motor_Run := ...是赋值,把右边算出来的结果写给左边的输出。右边括号里Start_Button OR Motor_Run就是“自锁”:按一下启动,这一扫描周期Motor_Run变 TRUE,下一周期即使松开按钮,Motor_Run自己的值还在,通过 OR 继续把条件保持住。后面连着AND Stop_Button AND Overload,任何一个变 FALSE,整个结果就是 FALSE,输出断开。

注意停止按钮和过载信号用的是常闭接法,所以正常状态下它们是 TRUE,逻辑里用 AND 直接串。如果你习惯常开接法,逻辑要改成AND NOT Stop_Button。这两种写法都行,但一个工程里最好统一,别一半常开一半常闭,出了问题查接线和查程序两头跑。

写的时候还有一点:赋值符号是:=,比较相等才是=。这个差别在键盘上就一个冒号,眼睛一花就写错,编译器会报错,改过来就行,但别养成“报错就随手加个冒号试试”的习惯,容易越改越乱。

4.3 第三步:编译、下载、在线看它动起来

写完点编译。编译会做语法检查和类型检查,常见的报错有三种:变量未定义、类型不匹配、数组长度和指令要求对不上。第一种回去补变量定义,第二种检查是不是把 BOOL 往 INT 里塞,第三种要去看手册第 2 章关于操作数长度限制的说明,那里讲得比较细。

编译通过就可以下载。下载前先确认 PLC 处于可写入状态,且现场没有人正在操作这台设备,手册在安全注意事项里把这条放在很靠前的位置,因为程序一进去输出就可能动作,接着电机、气缸的设备会跟着动。下载完成后把 PLC 切到运行模式,用在线监控看变量值:按住启动按钮,Motor_Run变 TRUE,松开还保持;按一下停止,变 FALSE;把过载信号断一下,也变 FALSE。这三步都符合预期,第一段 ST 代码就算跑通了。

如果监控发现按启动没反应,按这个顺序查:先看输入点的指示灯亮不亮,排除接线和地址问题;再看监控里Start_Button的值有没有变,排除 AT 地址分配问题;最后看Motor_Run有没有变但输出点没动作,那可能是输出地址或者后面的输出单元问题。这个“从物理点到变量再到输出”的排查顺序,比漫无目的地翻程序快得多。

4.4 第四步:把这段逻辑封装成一个功能块

启保停跑通了,接下来做真正有价值的一步:把它变成功能块。新建一个功能块定义,起名Motor_Control,定义三个输入变量Start、Stop、Overload,两个输出变量Run、Alarm,再定义一个内部变量Fault_Latch用来记住故障状态。

(* Motor_Control 功能块内部逻辑 *) (* 过载时置位故障并断开输出,故障需复位后才能再启动 *) IF Overload = FALSE THEN Fault_Latch := TRUE; END_IF; IF Start AND NOT Fault_Latch AND Stop THEN Run := TRUE; END_IF; IF NOT Stop OR Fault_Latch THEN Run := FALSE; END_IF; Alarm := Fault_Latch;

这段逻辑比刚才多了状态记忆。Fault_Latch是内部变量,过载断开的瞬间把它置 TRUE,之后即使过载信号恢复,故障状态也保持住,必须走复位流程才清掉。这就是功能块的好处:状态藏在盒子里,外面只看Run和Alarm两个出口,不用关心里面怎么记的。

定义好之后回到主程序,创建五个实例,分别命名为Motor1到Motor5,每个实例接各自设备的三个输入信号,取出各自的Run和Alarm。代码大概长这样:

(* 主程序里调用五个实例,参数分别接各自的信号 *) Motor1(Start := M1_Start, Stop := M1_Stop, Overload := M1_OL); Motor2(Start := M2_Start, Stop := M2_Stop, Overload := M2_OL); Motor3(Start := M3_Start, Stop := M3_Stop, Overload := M3_OL); (* Motor4、Motor5 同理,省略 *)

这种写法叫带参数调用,冒号加等号把实际信号接到功能块的入口上。注意每个实例后面的括号不能省,即使所有参数都用同名变量也要写。写完之后编译,如果报“实例未定义”,说明实例还没创建;报“参数类型不匹配”,回去检查接进去的信号是不是 BOOL。

跑通这一步,你已经用上了这本手册最核心的三块内容:变量定义、ST 语法、功能块封装。后面再复杂的东西,都是在这个骨架上加变量、加判断、加实例。

5. 新手最容易翻车的几个地方

5.1 坑一:变量长度对不上,编译报错还算走运

现象:编译时提示操作数长度不符,或者更糟——编译通过了,运行起来发现某个数组后面的数据被莫名其妙改写。

原因:ST 里有些指令要处理多个字,比如把一段数据块搬走或者比较一串值。如果你指定的数组元素个数比指令要求的少,软件在编译时可能只给个警告,实际执行时却会按指令要求的长度去读写,多出来的部分就越界了,正好压在别的变量上。手册在应用注意事项里写得很直白:数组元素数量小于另一操作数指定的长度时,指令会对超出元素数的那部分执行读写,如果这些字还被别的指令用着,就会出意外动作。

解决:凡是涉及多字操作的变量,用带 AT 设定的内部变量,并且数组长度要么和指令要求完全一致,要么留足余量。编译出现长度相关的警告别当没看见,一条条改掉再下载。

5.2 坑二:输入参数直接敲数字,结果地址被当成值

现象:给功能块的某个输入参数填了 20,本意是设一个设定值,结果设备动作完全不对,监控发现那个参数读出来是地址 0020 里的内容。

原因:软件的输入规则里,纯数字会被优先解释成 CIO 区地址。你写 20,它理解成“去 0020 这个地址取值”,而不是“值就是 20”。手册专门提醒过这一点,输入数值前必须加前缀,&表示十进制数,#表示十六进制数,或者带上正负号。

解决:养成习惯,凡是往参数里填常量,一律带前缀,&20就是二十,#16就是十六进制的 16。不确定的时候先填进去编译一次,看软件有没有把它标成地址,标了就是理解错了。

5.3 坑三:程序下载到不支持的 CPU,全部变成非法指令

现象:程序在自己电脑上编译没问题,下载到现场那台老 CPU 上,所有功能块实例都变成非法指令,程序打不开也跑不了。

原因:功能块是特定版本才支持的特性。CS/CJ 系列要 3.0 版本以上的 CPU 才认,2.0 版本及以下根本不支持。手册在应用注意事项里明确写了这个后果:包含功能块的用户程序下载到不支持功能块的 CPU 单元,所有实例都被视为非法指令,并且无法编辑或执行。

解决:下载前先确认目标 CPU 的型号和版本,不确定就查设备上的铭牌或者连机读一下 CPU 信息。现场是老设备,就老老实实用梯形图写,别硬套功能块。

5.4 坑四:在线改完就断电,备份灯亮着没注意

现象:在线修改了一段程序,看着运行正常,直接关电走人,第二天开机发现改动没了。

原因:在线编辑后,CPU 会自动把用户程序和参数备份进内置闪存,备份过程中 CPU 面板上的备份指示灯是亮的。这时候断电,备份没写完,数据就丢了。手册把这条写在应用注意事项里,还给了查看备份状态的方法:在 PLC 属性里打开存储器备份状态显示,从查看菜单里能看到当前进度。

解决:每次在线编辑完,等备份指示灯灭掉再断电。急着走的时候至少看一眼那盏灯,亮着就再等十几秒。这个习惯听起来小题大做,丢过一次程序就知道值了。

5.5 坑五:以为程序能上传回来,结果手里没有源程序

现象:现场设备跑得好好的,想改点东西,一连机发现上传上来的只有一堆地址和指令,变量名、注释、功能块定义全没了,改都不知道从哪改。

原因:手册里有一条容易被忽略:用户程序无法上传到编程软件中。也就是说,从 PLC 里读回来的东西不包含完整的源程序结构,功能块这类封装过的内容更是读不回来。PLC 里存的是能执行的代码,不是给你二次编辑的工程文件。

解决:把源工程文件当成设备的一部分来管理。每次下载前归档一份,文件名带上日期和版本,改完再存一份新的。别指望“设备里有,回头拷出来就行”,这条路走不通。

6. 下一步学什么:从“能跑”到“敢用在设备上”

启保停跑通之后,很多人会急着去看更复杂的例子,结果越看越懵。我的建议是反着来:先把已经跑通的东西往深处挖一层,再往宽处扩。下面这条路是我带新人时用得比较顺的顺序,你可以照着走。

阶段学什么练什么大概花多久
第一层数据类型和变量作用域把启保停改成带故障记忆、带运行小时累计的版本一到两周
第二层IF、CASE、FOR 三种结构写一个按编号切换参数的配方逻辑两到三周
第三层功能块的输入输出与实例把配方逻辑封装成块,在主程序里开三个实例两到三周
第四层数组和多字操作写一段求平均值、找最大值的逻辑两到三周
第五层外部变量和地址分配规则把功能块接到实际的输入输出点上跑一遍视设备情况

第一层别嫌慢。数据类型这东西,写十行代码可能都用不上,但一旦开始处理模拟量、累计值、配方参数,类型选错就是无穷无尽的怪现象:该是负数的时候变成六万多,该是小数的时候被截断成整数。我见过有人为了一个温度值显示不对,查了两天才发现变量定义成了 INT,负数一出现就翻车。这种坑,提前花两周把类型摸清楚,比事后查两天划算得多。

第二层重点练 CASE。实际设备里“按模式走不同流程”的需求特别多:手动模式、自动模式、调试模式、报警复位模式,每种模式的动作不一样。用一堆 IF 嵌套也能写,但读起来像俄罗斯套娃,CASE 写出来是一个分支一段,清清爽爽。写的时候注意每个分支要有明确的出口,别让某个分支跑完还往下掉。

第三层是功能块真正发挥价值的地方。练的时候刻意做一件事:同一个功能块定义,创建三个以上实例,让它们的参数各不相同,然后改一次定义,看三个实例是不是同时生效。这个体验会让你明白为什么要封装。顺便把库文件的概念用起来,把调好的功能块存成库,下次新建工程直接调。

第四层开始碰数组,就会遇到前面说的长度问题。练的时候故意把数组长度写小一点,看编译器报什么错、运行时出什么现象,比看十遍文字说明印象深。手册第 2 章和附录 A 在这部分讲得比较细,遇到看不懂的地方回去查,比从头读到尾效率高。

第五层是接真实设备。到这一步,重点不再是语法,而是地址分配和安全确认。哪些地址能注册成全局符号、哪些必须用内部变量加 AT 设定、下载前要确认什么、在线修改要注意什么,手册的应用注意事项那几页这时候才真正读得进去。

说个我自己的教训。刚学功能块那会儿,我觉得封装特别酷,什么逻辑都想塞进一个块里,结果做出来一个入口二十多个参数、内部三百行的巨无霸,别人看不懂,我自己过两个月也看不懂。后来我给自己定了个规矩:一个功能块只干一件事,入口参数超过八个就拆。这个习惯保持到现在,每次新建功能块之前都先问一句“这东西能不能拆成两个”,能拆就拆。代码量是多了一点,但改起来、传给别人用的时候,省下的时间远不止那一点。

希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询