设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI聊天机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
使用必看
GPT3.5免费体验版
万能程序翻译
WinCC脚本编程机器人(VIP免费)
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
GPT4.0完整版-线路1(VIP免费)
自控工程师4.0版-线路1(VIP免费)
GPT更多线路及版本
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
西门子1200PLC S型加减速曲线程序
返回列表
发新帖
西门子1200PLC S型加减速曲线程序
[复制链接]
3715
|
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免费)
万能程序翻译
编程序专区