采用PDO方式做数据交换,简单、直接。但受到数量限制,而且用不用这些数据都会时时占用总线,会造成连接在总线上的设备数量不能太多。当需要的数据不是实时需求,而是随机需求时,则可以采用SDO方式。按这种方式的需要,直接发出数据交换请求。在编程时,我们可以采用CAN总线读写功能块来实现对驱动器参数的读出和对驱动器设置参数的写入。例如,在程序中调入一个运算块,打开输入助手,点开CIA405下拉功能,就会看到CANopen总线的读写集群,如图12-33所示。
在这个集群中,有4个功能块:SDO_READ,SDO_WRITE这一组对参数的读出/写入参数对象是任意大小的;另外一组SDO_READ4,SDO_WRITE4是读/写对象的4个字节。通常来说,使用比较多的是读/写对象的4个字节。在输入助手中,我们选择SDO_READ4并确定,调入此功能块如图12-34所示。
在这个功能块中NETWORK是CAN总线口通道。
1(默认值)为第一个CAN总线口,如CAN0。
图12-33 CANopen总线读写集群
2为第二个CAN总线口(如果存在),如CAN1。
ENABLE:启用功能块的执行。
在上升沿:执行开始。
在下降沿:如果执行未完成,则取消执行。否则,输出数据会复位为0。
TIMEOUT:最大执行时间(以毫秒为单位)。如果在收到响应之前达到超时,则执行会因超时错误而中止。
0(出厂设置)=禁用超时。
1...65535=超时值(以毫秒为单位)。
DEVICE:读取设备的站地址。
CHANNEL:SDO通道号,默认值为1。
INDEX:对象索引。
SUBINDEX:对象子索引。
图12-34 CANopen总线的读取
所以,根据引脚定义,当我们要读出驱动器的参数,只需查出参数的对象索引和子索引,填上驱动器的地址就可以了。例如,我们查看一下d5的状态。根据图12-24所示我们知道对象索引是16#6041,子索引是0。因此,编写的读状态程序如图12-35所示。当k8为“真”,执行读取,读取的参数由DATA输出,DATA是一个数组,有4个字节,如图12-36所示。(www.daowen.com)
图12-35 读取驱动器状态程序
图12-36 读出的数据
我们还可以通过CAN总线对驱动器执行写入命令,这时我们采用写功能块,如图12-37所示。
在写功能块中DATA是4个字节,所以命令字是16#0000000F,查一下驱动器手册中的驱动器命令字如图12-38可知,命令字的字长是两个字节,所以DATALENGTH填“2”。
需要注意的是:如果字长填的不对,写命令就会报错。如果查不到这个字长或有些手册标注的字长有错误,那么可以通过读命令的办法获得字长。
在SoMachine编程软件中,施耐德电气针对自己的伺服驱动器LEXIUM32A,也有一组读写功能块,如图12-39所示。
图12-37 对驱动器写入使能命令
图12-38 驱动器命令字
图12-39 LEXIUM32A驱动器的写功能块
当CAN1组态为CANmotion后,连接在这个总线口的伺服驱动器要采用softmotion功能块。
CANmotion总线口的读写如图12-40所示。
图12-40 CANmotion总线口的读写
有了这个句型,想读出或写入伺服驱动某些功能和参数,就进行设备的索引和子索引的替换即可。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。