阅山

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Platforms
  3. IOT
  4. plc
  5. 正文

施耐德TM241PLC使用SoMachine添加编码器、步进驱动器、PID

2025-07-16

博主仅仅是记录一下,避免遗忘。

一、编码器

博主使用了欧姆龙的单端A/B/Z三相增量式编码器:

施耐德PLC配置见下:

编码器的块的配置效果:

二、步进电机驱动器

PTO块配置见下:

PTO块使用见下:

三、PID

PID块定义:

PID块的代码:

Timer1(IN:=EN AND NOT Timer1.Q,PT:=CYCLE); // 定时器周期执行
IF EN AND Timer1.Q THEN //若已经配置使能及定时器
	CASE MODE OF
		0: //位置式PID
			EK_0 :=SV-PV;
			EK_SUM:=EK_SUM+EK_0;
			Y := KP * EK_0 + KI*EK_SUM + KD*(EK_0-EK_1);
			EK_1 :=EK_0;
			IF ABS(EK_0) <=1 THEN
				EK_SUM:=0.0; // 误差过零,消除积分
			END_IF
		1: //增量式PID
			EK_0 :=SV-PV;
			Y := Y + ( KP*(EK_0-EK_1) + KI*EK_0 + KD*(EK_0-2*(EK_1-EK_2)));
			EK_2 := EK_1;
			EK_1:= EK_0;
	END_CASE
		
	IF Y > Y_MAX THEN
		Y:=Y_MAX;
	ELSIF Y< Y_MIN THEN
		Y:=Y_MIN;
	END_IF
	
	M_EK_0 :=EK_0;
	M_EK_1 :=EK_1;
	M_EK_2 :=EK_2;
	M_EK_SUM :=EK_SUM;
			
ELSIF NOT EN THEN
	EK_0 :=0;
	EK_1 :=0;
	EK_2 :=0;
	EK_SUM :=0;
	Y :=0;
END_IF

PID块的引用:

附件 源程序

https://www.claves.cn/wp-content/uploads/2025/07/swing.zip

标签: 暂无
最后更新:2025-07-16

代号山岳

知之为知之 不知为不知

点赞
< 上一篇

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号