签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
200smart近期又火起来了,因为v2.4支持Profinet,能走Epos控制V90PN。编程软件里提供的Sian_Pos块其实是仅作为“驱动程序”,实现与V90驱动器的数据交互,具体实现各个运动功能,还需对Sina_Pos块里的各参数进行配置。为了方便使用,本人参照博途轴工艺对象里Motion Control指令,做了几个简单的功能块,以实现对伺服进行初始化、操作错误上报、运动参数设置、相对定位、绝对定位、寻找参考点、点动、增量点动。控制多台伺服直接对这些功能块进行多次调用即可。
前期对200smart与v90PN的配置工作在此不赘述了,可以参考“刚刚入门”兄的精华帖“一步一步实战200smart与V90PN的定位控制”——http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1548104&b_id=64&b_sid=0&s_id=0&num=20#anch
下面进入示例程序。在此假设控制一台伺服“轴1”。编程之前首先进行数据规划,将需要用到的变量建出来。把变量放在多个符号表里,便于查找和管理。在此创建三个符号表:dbSinaPosAxis1,用于轴1的Sina_Pos块;dbCtrlAixs1,用于轴1的控制命令;dbSystem,用于全程序使用。
注:对于变量规划命名有两点小建议:
1、多个对象的相同操作,假设同对对象1、对象2、对象3进行开启,则在建立对象1的变量时,命名为“start_对象1”,这样对象2、对象3直接复制粘贴对象1,把最后的数字改一下就行。
2、长度为一个字的变量,地址用2的整数倍;长度为一个双字的变量,地址用4的整数倍。防止地址重叠。
dbSinaPosAxis1
dbCtrlAxis1
dbSystem
下面是Main程序总览
时间有限,暂时发这么多,望大家理解。后续我会对每个功能块进行详细介绍。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1555359&b_id=64&s_id=0&num=16
在介绍运动控制功能块之前,先介绍一个小子程序TimeBase。它用来给整个程序提供一个100ms的定时时基,可避免在程序中,尤其是子程序中大量使用定时器。虽然这种方式计时不是太精确,但可满足大部分应用场合。
TimeBase
这段程序可每隔100ms产生一个上升沿脉冲。如想实现计时功能,可建立一Int(长度为1个word)型变量wTon,使用“TB_100ms”去执行wTon的INC(自加1)操作,则wTon=1便是计时了100ms,wTon=10便是计时了1s。
各运动控制功能块都存在几个共性问题,下面一一介绍。
1、CmdAct:运行已激活。这是一个bool变量,可从Sina_Pos块的“Status_table”中的"Epos_zsw2"中读取。当驱动器正在执行运行任务时,该位置的状态是1。在本例程中,出于安全因素考虑,不允许在运行中切换运动模式,即仅当当前运动任务完成后,才允许切换模式。如有特殊应用需要,可删去此限制。
2、AxisPosOk:定位完成。这个bool变量也是从“Status_table”中读取。只要轴使能,且伺服未处于运动状态,该位一直为1。仅当伺服开始运动时,才会置0,运动完成后又一直为1。因此为判断某一运动是否完成,取其上升沿。如在子程序中使用上升沿,在多次调用时会出错,所以取AxisPosOk的上升沿放到功能块外操作。
3、AxisRef:已设置参考点。这个bool变量从"Status_table"中读取。当伺服执行了寻找参考点任务后会一直置1,执行寻找参考点任务时为0。我在程序中用"RefOk"表示,同AxisPosOk,取RefOk的上升沿放到功能块外操作。
4、Enabled:已使能。bool型变量,从"Status_table"中读取。伺服使能时为1,未使能为0。本例程中所有的运动控制命令的前提是使能,否则,运动命令复位并报错。
5、ActMode:当前操作模式。Int型变量,从"Status_table"中读取。这个我重点说明一下,这个ActMode把我狠狠坑了一把。开始在调试的时候,经常出现发出“跨模式”的运动命令,伺服不动作的情况,比如我刚刚执行了寻找参考点命令,这时操作模式是“4”,接下来想执行相对定位,模式是“1”,在发出相对定位命令后,伺服不动作,得再置位一次相对定位命令才会动作。后来我请教了一位前辈,他说V90伺服在切换模式后需要延时一小段时间模式才会生效。具体原因可能有两个:1、Profinet通信需要时间;2、V90驱动器切换模式需要时间。这两个原因,不管哪一个,都暴露出来一个小问题,就是从Sina_Pos块里读出的“当前模式”并不一定是驱动器中已经生效的操作模式。在此提个建议,希望西门子的技术专家能看到,就是让“ActMode”这个变量反映出来的是驱动器中的的确确已经生效的操作模式,这样能避免写很多延时程序。
下面是各功能块程序,注释比较详细,请大家查阅,并希望大家提出宝贵意见。
1、MC_MoveRelative
功能块接口变量
功能块程序
2、MC_MoveAbsolute
3、MC_ToRef
4、MC_MoveJog
5、MC_MoveIncJog
6、MC_Initialize
注:200smart的Sina_Pos块有个特性,就是操作模式为0时,会报错“3,不支持的操作模式”,且无法使能,所以初始化时先任意给其赋值一个操作模式。因刚上电一般都需寻找参考点,所以这里把操作模式设置成“4”。
7、MC_MotionParam
注:这里是对伺服的速度、加减速百分比、相对定位、绝对定位的速度、位置进行设置
8、MC_OprateError
注:这个块反馈的是“操作错误”,因系统性错误,如伺服故障、到达硬限位等在驱动器的报警代码里都会体现,所以这里反馈的是“未使能便触发动作命令”、“速度、位置设定值超出允许范围”等操作性错误。
这些子程序封装成库,后期就能随时调用了。
楼主挺不错的想法
谢谢楼主的分享,很用心很详细,必须点赞!
这个不错,相对切绝对需要延时吗?
帮助文件和系统手册中不是都有吗?
我感觉楼主挺牛的,要不直接甩去SINA_POS吧
楼主厉害!我想请问一下楼主,V90用的是绝对值编码器时如何通过PLC设置参考零点?使用模式7的话断电再上电它的当前位置值又回去了?有没有什么办法解决?谢谢
参照《V90_PN操作手册》的第“6.5.7”节。使用模式7回原点完成后,等电机完全停止,按照如下操作:
操作完毕后再将参数“P0977”设置为1并等待该参数自动复位为0。
多谢分享,谢谢
谢谢楼主,收藏备用吧
好想下载源程序!
是的,200SMART面向中国的低端市场,功能却越来越强大了,接地气啊!
不错的贴, 学习了,谢谢分享!
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录