官方的Gitee提供了Tutorial程序供下载学习。
打开后,可以看到程序结构。
在这个程序里,可以看到从main主程序到各个FC都写在一个文件里。
同时,通过终端查看下文件目录结构。
/wasomeide_workspace/tutorials/projects/ch05-1$ tree -l
.
├── ams_pack.log
├── build
│ ├── app.tar.gz
│ ├── app.zip
│ ├── debug
│ │ ├── app.bin
│ │ ├── app.layout
│ │ ├── iec.cfg
│ │ ├── iec.io_map
│ │ ├── iec.sn
│ │ └── resources
│ │ └── project.manifest
│ └── release
│ ├── app.bin
│ ├── app.layout
│ ├── iec.cfg
│ ├── iec.io_map
│ ├── iec.sn
│ └── resources
│ └── project.manifest
├── CONFIG
│ ├── build.id
│ ├── global.WAVARS
│ ├── project.IOMAP
│ ├── resources
│ │ └── project.manifest
│ └── resources.WARES
├── MODULES
├── PROGRAM
│ ├── DOUs
│ │ └── User_DataTypes.json
│ ├── POU_FBs
│ ├── POU_FULL_ST
│ ├── POU_FUNCs
│ ├── POU_PRGs
│ │ └── prog_main.st
│ └── SYS_EVENTS
└── README.md
16 directories, 23 files
可以看到,主要就是一个在PROGRAM/POU_PRGs
路径下的prog_main.st
文件。
我们再查看下这个文件内容:
/wasomeide_workspace/tutorials/projects/ch05-1$ cat PROGRAM/POU_PRGs/prog_main.st
(* 本APP展示基本变量定义、赋值、使用; 表达式、基本流程语句的用法 *)
PROGRAM PLC_PRG
VAR
b: BOOL; (**BOOL类型的变量定义*)
n: INT := 10; (*初始化为10*)
r: REAL := 5.2;
s: SINT;
d: ARRAY[0..2] OF DINT; (*定义长度为3的一维数组*)
END_VAR
b := convertToBOOL(n); (*调用函数并将返回值赋给变量b*)
s := convertToSINT(TO_DINT(r));
d[0] := getSumWithFor(s); (*使用for语句实现的函数*)
d[1] := getSumWithWhile(s); (*使用while语句实现的函数*)
d[2] := getSumWithRepeat(s); (*使用repeat语句实现的函数*)
WA_LOG('g_iVar1=%d, g_iVar2=%d, g_bVar=%d, g_fVar1=%f, g_sVar=%s',
g_iVar1, g_iVar2, TO_INT(g_bVar), g_fVar1, g_sVar);
g_fVar1 := g_fVar1 + 0.1;
END_PROGRAM
(** 使用IF ELSE 语句将INT转换为BOOL *)
FUNCTION convertToBOOL : BOOL
VAR_INPUT level: INT; END_VAR
IF level > 10 THEN
convertToBOOL := TRUE;
ELSIF level <= 10 THEN
convertToBOOL := FALSE;
ELSE
convertToBOOL := TRUE;
END_IF;
END_FUNCTION
...
可以看到,st程序的文本就在这个文件里面。
咨询了厂方工程师,被告知FC、FB也可以分多个文件保存。于是,按照该样例程序内容,重新写了一个。
这个程序里,我把FC都拆到了函数栏里,一个个独立开来,可以看到主程序就显得干净很多,看起来和另外几个PLC编程软件类似了。
再看下文件结构:
/wasomeide_workspace/tutorials/projects/Tutorials-1$ tree -l
.
├── ams_pack.log
├── build
│ ├── app.tar.gz
│ ├── app.zip
│ ├── debug
│ │ ├── app.bin
│ │ ├── app.layout
│ │ ├── iec.cfg
│ │ ├── iec.io_map
│ │ ├── iec.sn
│ │ └── resources
│ │ └── project.manifest
│ └── release
│ ├── app.bin
│ ├── app.layout
│ ├── iec.cfg
│ ├── iec.io_map
│ ├── iec.sn
│ └── resources
│ └── project.manifest
├── CONFIG
│ ├── build.id
│ ├── global.WAVARS
│ ├── project.IOMAP
│ ├── resources
│ │ └── project.manifest
│ └── resources.WARES
├── MODULES
└── PROGRAM
├── DOUs
│ └── User_DataTypes.json
├── POU_FBs
├── POU_FULL_ST
│ ├── convertToBOOL.st
│ ├── convertToSINT.st
│ ├── getSumWithFor.st
│ ├── getSumWithRepeat.st
│ ├── getSumWithWhile.st
│ └── main.st
├── POU_FUNCs
├── POU_PRGs
└── SYS_EVENTS
可以看到,在POU_FULL_ST
路径下,多了几个st文件,包括出程序main.st
以及几个函数。
再看下main.st
的内容:
/wasomeide_workspace/tutorials/projects/Tutorials-1$ cat PROGRAM//POU_FULL_ST/main.st
(* 本APP展示基本变量定义、赋值、使用; 表达式、基本流程语句的用法 *)
PROGRAM PLC_PRG
VAR
b: BOOL; (**BOOL类型的变量定义*)
n: INT := 10; (*初始化为10*)
r: REAL := 5.2;
s: SINT;
d: ARRAY[0..2] OF DINT; (*定义长度为3的一维数组*)
END_VAR
b := convertToBOOL(n); (*调用函数并将返回值赋给变量b*)
s := convertToSINT(TO_DINT(r));
d[0] := getSumWithFor(s); (*使用for语句实现的函数*)
d[1] := getSumWithWhile(s); (*使用while语句实现的函数*)
d[2] := getSumWithRepeat(s); (*使用repeat语句实现的函数*)
WA_LOG('g_iVar1=%d, g_iVar2=%d, g_bVar=%d, g_fVar1=%f, g_sVar=%s',
g_iVar1, g_iVar2, TO_INT(g_bVar), g_fVar1, g_sVar);
g_fVar1 := g_fVar1 + 0.1;
END_PROGRAM
可以看到,对应的就是主程序的内容了。
标签:文件,WasomCodeX,POU,st,PROGRAM,试用,iec,app,resources From: https://www.cnblogs.com/PrepAndPonder/p/18555212