TIA Portal中创建一个新的程序,并添加一个读取编码器数据的函数块 函数块具体内容
时间: 2024-05-21 16:10:58 浏览: 143
1. 在TIA Portal中创建一个新的程序,如下图所示:
![image](https://user-images.githubusercontent.com/55330306/135124100-9b17f9b8-8d6e-4a2a-9c2d-91f8a7e1e3c3.png)
2. 添加一个读取编码器数据的函数块,具体内容如下:
```
FUNCTION_BLOCK Read_Encoder
VAR_INPUT
Encoder_Number : INT; // 编码器编号
END_VAR
VAR_OUTPUT
Encoder_Value : INT; // 编码器值
END_VAR
VAR
// 编码器相关变量
Count : INT; // 编码器计数值
Old_Count : INT; // 上一次编码器计数值
M1 : BOOL; // 编码器输入口A
M2 : BOOL; // 编码器输入口B
Dir : BOOL; // 编码器方向
END_VAR
// 初始化编码器变量
Count := 0;
Old_Count := 0;
M1 := FALSE;
M2 := FALSE;
Dir := FALSE;
// 根据编码器编号选择对应的输入口
CASE Encoder_Number OF
1: M1 := I0.0;
M2 := I0.1;
2: M1 := I0.2;
M2 := I0.3;
3: M1 := I0.4;
M2 := I0.5;
END_CASE
// 判断编码器方向
IF M1 = FALSE AND M2 = FALSE THEN
Dir := FALSE;
ELSIF M1 = FALSE AND M2 = TRUE THEN
Dir := TRUE;
ELSIF M1 = TRUE AND M2 = FALSE THEN
Dir := NOT Dir;
ELSE
Dir := Dir;
END_IF
// 计算编码器计数值
IF Dir = FALSE THEN
Count := Old_Count + 1;
ELSE
Count := Old_Count - 1;
END_IF
Old_Count := Count;
Encoder_Value := Count;
END_FUNCTION_BLOCK
```
其中,变量`Encoder_Number`表示编码器的编号,变量`Encoder_Value`表示编码器的值。函数块中包含了编码器计数、方向等相关变量,根据输入口的状态判断编码器方向,并计算编码器计数值。
3. 在主程序中调用函数块,如下图所示:
![image](https://user-images.githubusercontent.com/55330306/135124217-5dc1d1c8-48b5-4809-9a9a-2e8e5d5dc5b5.png)
调用函数块时需要输入编码器的编号,函数块会返回编码器的值。可以使用`SCL`指令将编码器的值赋给变量,并进行后续的处理。
阅读全文