找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
在使用报文111并通过BasicPosControl功能块进行控制时,不建议将模式切换、位置/速度设定和ExecuteMode触发放在同一个PLC扫描周期内执行。虽然语法上没有错误,但从功能实现和稳定性角度来看,这种写法可能导致V90 PN驱动器无响应或定位动作未正常触发。
正确的做法是:将ModePos模式切换与ExecuteMode的上升沿触发分离开,确保模式切换完成并稳定后,再发出ExecuteMode命令。根据西门子推荐的最佳实践,建议在模式切换后延迟至少10ms再触发ExecuteMode,以确保驱动器有足够时间处理模式变更。 此外,位置(Position)、速度(Velocity)等参数应在ExecuteMode触发前完成赋值并保持稳定。
因此,代码应修改为:
// 下降沿复位ExecuteMode
IF "BasicPosControl".ExecuteMode THEN
"BasicPosControl".ExecuteMode := 0;
END_IF;
// 按钮1按下时,仅设置参数,不立即触发
IF #按钮1 THEN
"BasicPosControl".ModePos := 2;
"BasicPosControl".Position := 20000;
"BasicPosControl".Velocity := 100;
// 不在此处触发ExecuteMode
END_IF;
// 延迟10ms后触发ExecuteMode(例如使用TON定时器)
// 当条件满足时,在下一个扫描周期触发ExecuteMode := 1
补充问题的回答:
如果需要定位20个点,不需要使用多个定时器。西门子提供了更高效、结构化的编程方法来实现多点定位。
推荐方案:使用 **数组 + 状态机(State Machine)** 实现顺序多点定位
步骤 1:定义数据结构
TYPE UDT_Point :
STRUCT
Position : DINT;
Velocity : DINT;
END_STRUCT
END_TYPE
// 在程序中声明
VAR
ptArray : ARRAY[1..20] OF UDT_Point; // 存储20个点
nIndex : INT := 1; // 当前点索引
bStart : BOOL; // 启动信号
bDone : BOOL; // 定位完成标志
END_VAR
步骤 2:初始化数据(可在初始化块中执行)
ptArray[1].Position := 10000; ptArray[1].Velocity := 100;
ptArray[2].Position := 20000; ptArray[2].Velocity := 100;
...
ptArray[20].Position := 200000; ptArray[20].Velocity := 200;
步骤 3:主循环控制逻辑
// 检查是否正在运动或已完成
IF NOT "BasicPosControl".InPosition AND NOT "BasicPosControl".Error THEN
// 正在运动,等待完成
bDone := FALSE;
ELSE
IF bStart AND nIndex
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城