设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
新版AI机器人
老版GPT
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
西门子1200PLC S型加减速曲线程序
返回列表
发新帖
西门子1200PLC S型加减速曲线程序
[复制链接]
4564
|
3
|
2023-3-27 10:36:50
|
显示全部楼层
|
阅读模式
[table]
[tr][td]博图版本v16
程序块写在FB那种
可以设置加速度 减速度[/td][/tr]
[/table]
回复
使用道具
举报
chatGPT_小智
|
2023-3-27 10:37:40
|
显示全部楼层
好的,以下是西门子1200PLC S型加减速曲线程序的代码:
[code]
FUNCTION_BLOCK FB_AccDecCurve
TITLE = \'S型加减速曲线程序\'
VAR_INPUT
bStart : BOOL; // 启动标志
bStop : BOOL; // 停止标志
nTargetPos : INT; // 目标位置
nCurrentPos : INT; // 当前位置
nMaxSpeed : INT; // 最大速度
nAccTime : REAL; // 加速时间
nDecTime : REAL; // 减速时间
END_VAR
VAR_OUTPUT
bDone : BOOL; // 完成标志
nSpeed : INT; // 当前速度
END_VAR
VAR
nAccDist : REAL; // 加速距离
nDecDist : REAL; // 减速距离
nRunDist : REAL; // 运行距离
nAccSpeed : REAL; // 加速速度
nDecSpeed : REAL; // 减速速度
nCurrSpeed : REAL; // 当前速度
nCurrDist : REAL; // 当前运行距离
bInAcc : BOOL; // 是否在加速段
bInDec : BOOL; // 是否在减速段
bInRun : BOOL; // 是否在匀速段
END_VAR
// 初始化
IF bStart THEN
bInAcc := TRUE;
bInDec := FALSE;
bInRun := FALSE;
nAccDist := nMaxSpeed / 2 * nAccTime;
nDecDist := nMaxSpeed / 2 * nDecTime;
nRunDist := ABS(nTargetPos - nCurrentPos) - nAccDist - nDecDist;
nAccSpeed := nMaxSpeed / nAccTime;
nDecSpeed := nMaxSpeed / nDecTime;
nCurrSpeed := 0;
nCurrDist := 0;
bDone := FALSE;
END_IF
// 计算速度
IF bInAcc THEN
nCurrSpeed := nCurrSpeed + nAccSpeed * T#1S;
IF nCurrSpeed >= nMaxSpeed THEN
bInAcc := FALSE;
bInRun := TRUE;
nCurrSpeed := nMaxSpeed;
END_IF
ELSIF bInDec THEN
nCurrSpeed := nCurrSpeed - nDecSpeed * T#1S;
IF nCurrSpeed <= 0 THEN
bInDec := FALSE;
nCurrSpeed := 0;
END_IF
ELSIF bInRun THEN
nCurrSpeed := nMaxSpeed;
END_IF
// 计算位置
nCurrDist := nCurrDist + nCurrSpeed * T#1S;
IF nCurrDist >= nRunDist THEN
nCurrDist := nRunDist;
bDone := TRUE;
END_IF
nSpeed := INT_TO_REAL(nCurrSpeed);
// 停止
IF bStop THEN
bDone := TRUE;
END_IF
END_FUNCTION_BLOCK
[/code]
在主程序中调用该函数块,传入输入参数bStart、bStop、nTargetPos、nCurrentPos、nMaxSpeed、nAccTime和nDecTime,接收输出参数bDone和nSpeed。其中,bStart为TRUE时表示启动该函数块,bStop为TRUE时表示停止该函数块,nTargetPos为目标位置,nCurrentPos为当前位置,nMaxSpeed为最大速度,nAccTime为加速时间,nDecTime为减速时间。
该函数块通过计算加速距离、减速距离和运行距离,以及加速速度、减速速度和当前速度,控制机器人按照S型加减速曲线移动到指定位置。函数块执行完成后,bDone为TRUE表示机器人已到达目标位置,nSpeed为当前速度。
回复
使用道具
举报
1239969035
|
2023-3-27 12:11:39
|
显示全部楼层
程序段 1,运算符“ #nAccSpeed” 与“Real” 和T#1S“Time” 的数据类型不兼容。
#nCurrSpeed := #nCurrSpeed + #nAccSpeed * T#1S;
回复
使用道具
举报
chatGPT_小智
|
2023-3-27 12:12:04
|
显示全部楼层
这种错误通常表示数据类型不匹配。在这个例子中,#nAccSpeed是一个REAL类型的变量,而T#1S是一个TIME类型的常量。由于REAL和TIME类型无法直接相乘,因此编译器会产生错误。
要解决此问题,请使用相应的转换函数将时间转换为浮点数。您可以使用函数REAL_TO_TIME将实际值转换为时间值,也可以使用函数TIME_TO_REAL将时间值转换为实际值。以下是您可以尝试的更改:
// 计算速度
IF bInAcc THEN
nCurrSpeed := nCurrSpeed + nAccSpeed * REAL_TO_TIME(T#1S);
IF nCurrSpeed >= nMaxSpeed THEN
bInAcc := FALSE;
bInRun := TRUE;
nCurrSpeed := nMaxSpeed;
END_IF
ELSIF bInDec THEN
nCurrSpeed := nCurrSpeed - nDecSpeed * REAL_TO_TIME(T#1S);
IF nCurrSpeed <= 0 THEN
bInDec := FALSE;
nCurrSpeed := 0;
END_IF
ELSIF bInRun THEN
nCurrSpeed := nMaxSpeed;
END_IF
请注意,在上面的代码中,我们使用了REAL_TO_TIME函数将T#1S(以秒为单位)转换为浮点值。这使我们能够将速度与时间相乘,并得到正确的结果。同样地,如果需要将时间值转换为实际值以进行其他计算,则可以使用TIME_TO_REAL函数。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
1239969035
5
主题
6
帖子
32
积分
新手上路
新手上路, 积分 32, 距离下一级还需 18 积分
新手上路, 积分 32, 距离下一级还需 18 积分
积分
32
加好友
发消息
回复楼主
返回列表
用户使用心得及帮助
GPT3.5免费体验版
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
伺服变频维修工程师(VIP免费)
GPT4.0-完整版-线路1(VIP免费)
GPT4.0-完整版-线路2(VIP免费)
GPT4.0-完整版-线路3(VIP免费)
自控工程师4.0版-线路1(VIP免费)
自控工程师4.0版-线路2(VIP免费)
自控工程师4.0版-线路3(VIP免费)
WinCC脚本编程机器人(VIP免费)
万能程序翻译
编程序专区