技术论坛

200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器

作者 主题
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
主题:【探讨】200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 2021-08-11 10:38:11

项目需求4轴点到点的精确定位控制(伺服电机),另有4台变频调速控制。

了解项目需求后,我首先考虑的是用通信,省接线,快速部署;以400W伺服驱动器+伺服电机的配置,带有STO、多圈绝对值编码器的松下A6 SF型

好多人说串口通信慢,那是相对于以太网通信而言的,实际上我这个项目5个从站16个轮询任务,一个轮询周期不会超过100ms,这还是为了迁就精研变频器的通信速率,如果只是用松下伺服,通信速率会再提高一倍,100ms,这对于点到点的运动控制足够了。

(因为精研的变频器通信速率最高只到57600,统一设置为57600bps)

很少有人说profibus DP慢,它的最低通信速率是187.5K,最快可以到12M,我这个项目能用到57.6K的通信速率,总比只能用9.6、19.2强多了。

对应PLC通信程序设置:


现在说说松下A6的内置定位功能Block Motion:



松下A6可以预先定义256条运动控制数据(绝对定位、相对定位、点动和速度控制、及等待),预定义10套速度、加减速,这些功能类似200smart运动向导里的“曲线”(profile)

一个200smart真是要存储了这么多定位数据,很怀疑内存够用不?松下的A6伺服把这部分功能集成到本体上了,除了可以通信调用block motion,还可以通过伺服驱动器的外部接口IF来调用预设运动曲线。

……下续



大道至简,知易行难
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1709696&b_id=64&s_id=0&num=68

至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 1楼 2021-08-11 10:48:25

用·通信控制松下伺服电机的定位控制,流程就3步:1,使能;2,指定block No:3,STB on(Select Block on)。这三步说起来简单,实际编程又分了几个步骤:

1,伺服驱动器里的modbus rtu访问地址要和200smart的modbus访问指令对应起来;

2,还得考虑通信时序;

3,优化通信效率。



大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 2楼 2021-08-11 11:49:17

1,伺服驱动器里的modbus rtu访问地址要和200smart的modbus访问指令对应起来;

先从最简单的伺服驱动器编码器数值读取来做测试:

编码器单圈数据是32位的数据,2个寄存器;如果连续读取2个数据,必须将西门子plc的高位字和低位字顺序互换。16进制4202H对应10进制的16898,两个字就是16898+16899,在200smart的modbus rtu通信对应地址要再加400001,也就是416899和416900。要么将plc侧的高低字互换,要么将伺服驱动器侧的高低字互换,我选择以PLC为主,在伺服驱动器侧互换,利用伺服驱动器的modbus rtu地址镜像:

这也算是所谓“间接寻址”了!

实际的镜像组合:


可以看到,我已经在modbus访问地址的镜像中,将单圈编码器数据的高低字16898和16899进行了互换,plc只需访问16进制的4418H(17432)以后的连续数据即可,紧挨单圈编码器数据的是多圈数据(1个字)、伺服驱动器的状态字(440Ah)、伺服驱动器的输入状态字(4402h,最低位servo on状态)、当前的block No:、、、


v107.0为伺服ready信号,v109.0为servo on信号,当未检测到这两个信号为1时,使其为1;当ready且servo on,则不再发送轮询指令,而编码器位置和伺服状态等读取指令则在每个轮询周期中都被执行。


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 3楼 2021-08-11 13:27:44

2,通信时序;

block选通选通信号应该是一个上升沿,不能持续为ON,如果按照说明书上的顺序,先选择定位编号4414h,然后选通120h,则需要两个轮询,效率不高。


120H选通信号相当于plc的PI区,是位信号,4411h可以看作plc的I区(输入镜像区),是一个字,把4411h和4414h放在modbus地址镜像区相邻的地址上,只需要一个modbus写访问:


程序中,v1200.2为定位指令发送,v207.2为“轴2定位完成”信号(完成为1)。轴定位编号和选通一起发送,发送完成立即复位。


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 4楼 2021-08-11 14:10:57

3,优化通信效率。

blockmotion数据参数不必在轮询中写入,比如更改定位位置、更改速度或加速度,就可以在中断轮询中操作:



T36为轮询超时报警


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 5楼 2021-08-12 07:02:49

终于遇到了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 6楼 2021-08-12 07:14:14

你是完全用内置位置去定位的吗?要用通讯修改吗?

引用<把4411h和4414h放在modbus地址镜像区相邻的地址上,只需要一个modbus写>驱动器逻辑上允许同期写入这两个数吗?就不怕运动走出来的是更改之前的值吗?如果说明书上没有这么说,就算行了我也不敢这么做。因为太临界了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 7楼 2021-08-12 09:29:26
以下是引用芳季在2021-08-12 07:14:14的发言 >6楼

你是完全用内置位置去定位的吗?要用通讯修改吗?

引用<把4411h和4414h放在modbus地址镜像区相邻的地址上,只需要一个modbus写>驱动器逻辑上允许同期写入这两个数吗?就不怕运动走出来的是更改之前的值吗?如果说明书上没有这么说,就算行了我也不敢这么做。因为太临界了。

这是帖子的重点之一,芳芳很敏锐啊!能够一次完成的动作何必分两次执行呢?

官方文档给出的时序是先赋值4414h,然后把120h线圈赋值为on。虽然文档没有建议同时赋值,但经我实际测试同时赋值毫无问题,可能是我把4414h和4411h放置的镜像前后有关,我是把4414h放在4411h前面。

120h是一个线圈位地址,它不能放在modbus rtu镜像里,即便强制放置到镜像中也是无效的,于是我试着单独控制4411h的最低位(等同于120h的镜像),测试成功后再把4411h和4414h一起赋值,没问题!

测试期间遇到过伺服报错94.0,我以为是时序不对,后来查明是因为我用电脑上的触摸屏仿真在操作,相当于电脑上的触摸屏仿真和实际的触摸屏同时赋值,把触摸屏断开后单独操作电脑上的仿真,或者单独操作实际的触摸屏都不再出现94.0报错,这是两地操作要避免的“数据一致性”问题。


大道至简,知易行难
以下网友喜欢您的帖子:

  
侠圣

经验值: 2041
发帖数: 219
精华帖: 3
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 8楼 2021-08-12 10:15:05

这个时序图要求先指定块编号,然后给定STB选通信号,间隔时间10ms.

在一条写通讯指令内,将Block编号和STB信号同时写操作,是否合适?




多学长知识 多问长见识
以下网友喜欢您的帖子:

  
至圣

经验值: 13020
发帖数: 1815
精华帖: 22
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 9楼 2021-08-12 10:24:16

       感谢至圣分享。

       有时间细看下再请教学习。

       价格这事还是不要提了,技术论坛就讨论下成熟的不能再成熟应用的技术吧。很多时候被卡脖子也是由于某宣传格式导致的:某某突破了某某技术封锁,将某某产品卖成了白菜价。倒要问问真正幕后踏实搞原创性“研发”的大国工匠劳动成果就是白菜价。

       实事是别人原创研发的暂时领先的事物价格卖高点或者干脆不卖,还被说道,别人良好的研发高收益良性原创性循环,偏要被莫名骄傲的白菜价搞得原创性僵化全无。既不可能突破别人的封锁弯道超车,更破坏了好的高品质进步性产学研循环。自己"累死累活"搞"研发",领突破,解封锁只不过是别人的轻描淡写。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 10楼 2021-08-12 11:00:03
以下是引用水煮花生在2021-08-12 10:15:05的发言 >8楼

这个时序图要求先指定块编号,然后给定STB选通信号,间隔时间10ms.

在一条写通讯指令内,将Block编号和STB信号同时写操作,是否合适?



你的这张时序图是利用外部IO调用blockmotion方式吧,10ms是不是外部IO镜像的最长刷新时间?而用通信则可以直接访问镜像区的内存?


大道至简,知易行难
以下网友喜欢您的帖子:

  
侠圣

经验值: 2041
发帖数: 219
精华帖: 3
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 11楼 2021-08-12 12:32:37
以下是引用看雪001在2021-08-12 11:00:03的发言 >10楼

你的这张时序图是利用外部IO调用blockmotion方式吧,10ms是不是外部IO镜像的最长刷新时间?而用通信则可以直接访问镜像区的内存?

以下是引用水煮花生在2021-08-12 10:15:05的发言 >8楼:这个时序图要求先指...

引用8楼详细内容:

这个时序图要求先指定块编号,然后给定STB选通信号,间隔时间10ms.

在一条写通讯指令内,将Block编号和STB信号同时写操作,是否合适?



时序图是 A6手册  modbus通讯 block功能动作篇 中的第5章的内容,是否只针对外部I/O接点,这倒没有看到明确的指示。


多学长知识 多问长见识
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 12楼 2021-08-12 12:36:45

那图上面写的是120H啊。

如果有明文规定,我肯定是不支持背离规定的做法。

假设发脉冲,脉冲信号和方向信号同时改变,那到底是该正转还是反转?

别在死亡边缘试探。君子不立危墙下,也是这个意思。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 14楼 2021-08-12 12:40:57

对,那上面写的是120h(不是4411h),关于4411h怎么用,文档没有举例,所以,我这个实例就是对文档的补充。

日系plc很多文档说不要用双线圈,以至于set和rst同一个线圈,编译后都会发出警告信息,你是不是就不用set和rst了?


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 15楼 2021-08-12 17:39:43

不说这个了。谈谈别的。

你松下伺服有没有一些信号需要一个边缘就可以了的?

如果在通讯上要触发这样的信号,你会怎么做?就像你那个STB on信号,是否可以一直接通?还是说要什么时候off过来?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 16楼 2021-08-12 20:43:18
以下是引用芳季在2021-08-12 17:39:43的发言 >15楼

不说这个了。谈谈别的。

你松下伺服有没有一些信号需要一个边缘就可以了的?

如果在通讯上要触发这样的信号,你会怎么做?就像你那个STB on信号,是否可以一直接通?还是说要什么时候off过来?


最后一句提示了,stb可以用从站参数复位。

通信(所有)程序中,尤其是tcp套接字通信也是接收成功后立即清空缓冲区,原理都是一样的。

本想把程序上传,但若不同时上传电气接线图、伺服驱动器的参数和运动控制数据块,仅凭程序来理解会比较困难。

使用第三方配置本来就存在两不管的地带,两方的技术支持都可以理直气壮地表达“官方不予置评”,只能靠用户自己去摸索和测试,风险和乐趣并存,做这样的项目可以让自己不依赖库文件自由编写通信诊断和报警处理,做过后会发现,原来官方文档just so so,你信不信有神?呵呵!


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 17楼 2021-08-12 21:06:56

哦,原来有参数设定,只要设定了4就可以收到指令后就自动回到off,这就很方便啊。我用的那种就没有,写了on之后有空就写回off。

再进一步问问,如果一个点到点的运动一直是一种无计划的实时运动(电子手轮),那么松下是否有一个立即运动的功能?就是说不是你提到的那个256个点的那个事情。比方说:台达A2有两个缓冲区,专门是轮番接收定位信息,然后无缝连接两个定位。不断写位置就不断定位,形成连续运动。富士α5smart写入一个定位信息,运动开始后,再发出一个立即值变更指令,就可以一直以变更目的地的方式做连续定位,形成实时运动。

想了解一下松下是用什么方式做这个功能?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 18楼 2021-08-12 21:55:25


你说的这些功能松下a6都具备,毕竟是在中国市场经过了几十年用户检验过的产品,包括立即终止计划曲线执行新的运动曲线,还有连续执行多条计划曲线等等,国产信捷(信捷电气是一家a股上市公司哦)的伺服也具有松下伺服同样的功能,它的modbus RTU通信速率最大可设置为6M!台达a系列或者b系列就别用了吧,多年不思进取,国产伺服驱动器新势力无论性能还是价格早把台达甩多远了!

做这个项目之前,我其实优先选西门子的伺服和变频器,但西门子小功率变频器数倍于国产变频器价格,伺服驱动器的乞丐版价格都远高于松下旗舰版,我就只看中200smart(不知道是不是与200smart那套视频中的女声有关)。

做设备研发的乙方有个便利,工控产品的供应商会争着把自己的样机产品送过来给我们试用,合适就留下(不合适也会留下),这就有机会测试对比,芳芳应该不缺少这样招蜂引蝶的机会啊!


大道至简,知易行难
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 19楼 2021-08-14 08:18:38

楼主,通讯控制如果有一个点动指令,要发送到驱动器,那么你是不是就在点动指令的上升缘和下降缘发送指令?如果点动的接通时间小于一个轮训周期甚至更短,你怎么处理?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19408
发帖数: 2077
精华帖: 73
回复:200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
推荐帖


只看楼主 楼主 20楼 2021-08-14 09:27:05
以下是引用芳季在2021-08-14 08:18:38的发言 >

楼主,通讯控制如果有一个点动指令,要发送到驱动器,那么你是不是就在点动指令的上升缘和下降缘发送指令?如果点动的接通时间小于一个轮训周期甚至更短,你怎么处理?

发两次定位指令,一次jog,一次减速停止。

显然,你也知道这个方法,于是有第二问。虽然我认为你的第二个问题有点杠,但我喜欢!

轮询周期要看modbus rtu的通信速率和从站数量,还有结合点动速度。点动功能在需要精确定位时意义不大,细微调节最终还是要靠输入绝对定位数据,做过机器人示教的就会体会到示教或者点动都只是粗调位置。


大道至简,知易行难
以下网友喜欢您的帖子:

  
收起
200smart通过modbus RTU控制4轴松下A6伺服驱动器和1台精研A变频器
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。