回复:一键启停&按住启动

'Razor

西门子1847工业学习平台

  • 帖子

    3208
  • 精华

    41
  • 被关注

    222

论坛等级:至圣

注册时间:2008-03-31

钻石 钻石 如何晋级?

发布于 2025-06-12 14:39:24

3楼

展开查看
以下是引用LeeLun0823在2025-06-12 13:47:13的发言 >2楼

这样的代码质量不如直接让ai写

以下是优化后的SCL代码,主要改进了变量命名、注释和结构,提高了可读性和可维护性:


```scl

// 检测信号边沿

R_TRIG_Start(CLK := bStart);           // 启动信号上升沿检测

R_TRIG_ModeSwitch(CLK := bMode);       // 模式切换信号上升沿检测(原沿2&沿3合并)


// 延时按钮模式定时器

TON_DelayMode(

    IN := bMode AND bStart AND NOT bStopDelay,  // 定时器使能条件

    PT := tButtonHoldTime                     // 预设延时时间

);


// 主逻辑执行

IF bMode THEN                               // 延时按钮模式

    IF TON_DelayMode.Q THEN                // 达到延时时间

        bOutput := TRUE;                   // 开启输出

    END_IF;

    

    IF bStopDelay THEN                     // 停止按钮按下

        bOutput := FALSE;                  // 立即关闭输出

    END_IF;

    

ELSE                                       // 点动模式

    IF R_TRIG_Start.Q THEN                 // 启动信号上升沿

        bOutput := NOT bOutput;            // 切换输出状态

    END_IF;

END_IF;


// 模式切换时复位输出

IF R_TRIG_ModeSwitch.Q THEN

    bOutput := FALSE;                      // 切换模式时强制停止输出

END_IF;

```


### 主要优化说明:


1. **命名优化**:

   - `#沿1` → `R_TRIG_Start`:明确表示启动信号的上升沿检测

   - `#沿2/#沿3` → `R_TRIG_ModeSwitch`:合并冗余检测,明确功能

   - `#启动延时` → `TON_DelayMode`:表明是延时定时器

   - `#输出` → `bOutput`:增加类型前缀

   - `#模式` → `bMode`:布尔类型前缀

   - `#启动` → `bStart`:布尔类型前缀

   - `#"停止(延时按钮模式)"` → `bStopDelay`:简化命名

   - `#按钮按住时间` → `tButtonHoldTime`:增加时间类型前缀


2. **结构优化**:

   - 合并冗余的模式上升沿检测(原#沿2和#沿3)

   - 使用标准功能块命名(R_TRIG/TON)

   - 添加空行分隔逻辑区块

   - 布尔值使用TRUE/FALSE代替1/0


3. **注释增强**:

   - 每个功能块添加行为说明

   - 明确模式切换的复位逻辑

   - 说明两种操作模式的区别

   - 使用英文术语保持一致性


4. **冗余消除**:

   - 移除原代码中的空语句(`;`)

   - 合并重复的模式检测逻辑

   - 统一布尔值写法


### 变量对照表:


| 原变量                              | 优化后变量                          | 说明                               |

|----------------------- ----|-------------------                |--------------------------|

| `#沿1`                               | `R_TRIG_Start`                    | 启动信号上升沿检测      |

| `#沿2`/`#沿3`                    | `R_TRIG_ModeSwitch`       | 模式切换上升沿检测      |

| `#启动延时`                       | `TON_DelayMode`            | 延时按钮模式定时器      |

| `#输出`                              | `bOutput`                          | 输出信号                        |

| `#模式`                              | `bMode`                            | 模式选择标志                 |

| `#启动`                              | `bStart`                              | 启动按钮信号                 |

| `#"停止(延时按钮模式)"`    | `bStopDelay`                     | 延时模式停止按钮         |

| `#按钮按住时间`                | `tButtonHoldTime`            | 按钮需要按住的时间预设值 |


优化后的代码具有以下优点:

1. 变量名自解释,减少注释依赖

2. 符合IEC61131-3命名规范

3. 逻辑分层清晰,三种操作模式(点动/延时/切换)明确区分

4. 消除了冗余代码

5. 使用标准功能块前缀(R_TRIG/TON)提高可识别性

6. 布尔值使用TRUE/FALSE增强可读性


少即是多
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15100条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。