每周一个编程小例子:轻松去除字符串前导字符
引言
在自动化控制领域中,PLC(可编程逻辑控制器)广泛应用于生产和工业控制过程。作为 PLC 工程师,编写程序实现特定功能是日常工作的重要组成部分。今天我们将介绍一段常见的字符串处理程序——清除字符串开头连续特定字符。这个功能在需要处理或格式化输入字符串时非常有用,尤其是在设备通讯或者数据采集系统中,确保数据的准确性和规范性。本文将对该程序的结构、工作原理及应用场景进行详细介绍。
1 程序代码及介绍
下面是完整的 PLC 程序代码(代码基于 TIA 平台的 SCL 语言):
- FUNCTION_BLOCK "ClearLeadingCharOfString"
- { S7_Optimized_Access := 'TRUE' }
- VERSION : 0.1
- VAR_INPUT
- sourceString : String; // 输入字符串
- Identifier : Char := '0'; // 清除的字符(最左边的连续字符)
- END_VAR
- VAR_OUTPUT
- outString : String; // 输出字符串
- END_VAR
- VAR
- i : Int;
- lenght : Int; // 字符串长度
- Cnt : Int; // 清除字符个数
- sta_str : String;
- END_VAR
- BEGIN
- #lenght := LEN(#sourceString);
- FOR #i := 1 TO #lenght DO
- #sta_str := MID(IN := #sourceString, L := 1, P := #i);
- IF #sta_str = #Identifier THEN
- #Cnt := #i;
- ELSE
- #outString := RIGHT(IN := #sourceString, L := #lenght - #Cnt);
- EXIT;
- END_IF;
- END_FOR;
- IF #Cnt = 0 THEN
- #outString := #sourceString;
- END_IF;
- END_FUNCTION_BLOCK
1.1 代码解析
功能定义:
-
输入参数:sourceString(输入的字符串)、Identifier(需要去除的字符,默认为'0')。
-
输出参数:outString(处理后的输出字符串)。
-
该函数块的目的是去除输入字符串中从左边开始,连续的指定字符(默认为‘0’),直至遇到不同的字符为止。
内部变量:
-
lenght:字符串的总长度。
-
Cnt:记录已去除字符的数量。
-
sta_str:在循环过程中,用于逐个字符检查的临时变量。
程序逻辑:
-
通过FOR循环遍历字符串中的每个字符,逐个与Identifier(指定字符)进行比较。
-
当遇到不同字符时,程序通过RIGHT函数从原始字符串中截取有效部分,去除最左边的连续Identifier字符。
-
如果整个字符串都是由Identifier字符构成,则输出原字符串。
2 应用场景
该函数块在以下几种场景中非常有用:
数据清洗:在工业控制系统中,有时从外部设备读取的数据可能包含多余的前导字符(如零、空格等)。通过该程序,可以快速清除这些无效字符,确保数据的准确性和规范性。
通讯协议处理:在设备通讯过程中,某些协议可能要求发送的数据以特定的字符填充,如使用'0'字符进行填充。此时,接收到的数据需要去除前导的填充字符以获取有效信息。
报表生成:在自动化系统生成报表时,若数据字段中有不必要的填充字符,可以通过此程序进行处理,使报表更清晰、规范。
3 拓展思考
支持多种字符去除:当前程序仅支持去除单一字符。如果要扩展程序以支持去除多种字符,可以考虑修改Identifier为字符串类型,并使用循环检查每个字符是否匹配。
性能优化:该程序采用逐个字符比较的方式,对于较长的字符串,效率可能较低。优化方向可以考虑使用更多内建的字符串操作函数或并行处理方法。
用户自定义输入:可以添加用户输入验证功能,确保输入的Identifier字符有效,避免程序因无效输入导致运行错误。
总结
本文介绍的 PLC 程序实现了从输入字符串中去除指定字符的功能。通过该程序,我们能够灵活地处理工业自动化系统中的字符串数据,确保数据规范性和精确性。此功能在实际应用中非常广泛,尤其是在数据清洗和通讯协议处理中。我们还探讨了拓展思考,提出了多个优化方向,以便在不同的应用场景中能够满足更多的需求。
你来出题 我来答
欢迎大家在评论区提一些标准功能块的需求,如果合适,我们会在以后的文章中与大家分享。
往期回顾
每周一个编程小例子 :Bit 到 Word 转换的两种实现方案对比
2025年07月