台达伺服仅用cn3串口MODBUS 控制的实操

用串口通信来控制伺服速度,先看说明书

P3-05 CMM 通讯功能 通讯地址:030AH 030BH 
 参数功能: RS-232 通讯选择标准 MODBUS 或是与 ASDA-Soft 通讯
 RS-232 通讯格式
0:RS-232 标准 MODBUS 通讯
1:RS-232 可与 ASDA-Soft 通讯

修改为0


改变控制模式
P1-01通讯地址:0102H 0103H 

控制模式设定
Mode PT S T Sz Tz 
单一模式
00   ▲ 
01 保留
02      ▲ 
03        ▲ 
04          ▲
05            ▲
混合模式
06   ▲ ▲ 
07   ▲   ▲ 
08 保留
09 保留
0A      ▲▲ 
 单一模式:
PT:位置控制模式(命令来源为外部脉冲输入/外部模拟电压(*预
计加入)两种来源,可通过 DI:PTAS 来选择) 
S:速度控制模式(命令来源为外部模拟电压 /内部缓存器两种来源,
可通过 DI:SPD0,SPD1 来选择) 
T:扭矩控制模式(命令来源为外部模拟电压 /内部缓存器两种来源,
可通过 DI:TCM0,TCM1 来选择) 
 Sz:零速度/内部速度缓存器命令
Tz:零扭矩/内部扭矩缓存器命令
混合模式:
可通过外部的 DI (Digital Input)来切换模式,例如设为 PT/S 的混合
模式(控制模式设定:06),则可通过 DI:S-P(请参考表 7.1)来
进行模式的切换。

寄存器的值设置为02 速度模式,再看输入端子


输入输出端子软件设定
输入
DI1    P2-10 0214H 0215H
DI2    P2-11 0216H 0217H
DI3    P2-12 0218H 0219H
DI4    P2-13 021AH 021BH
DI5    P2-14 021CH 021DH
DI6    P2-15 021EH 021FH
DI7    P2-16 0220H 0221H
DI8    P2-17 0222H 0223H
//1-8连续 第9个
DI9    P2-36 0248H 0249H

输出

DO1    P2-18 0224H 0225H
...
DO5    P2-22 022CH 022DH
只看输入
DI3 、DI4出厂值是116,117控制力矩
我们改成114、115控制速度


速度命令的来源分成两类,一为外部输入的模拟电压;另一为内部参数。选择的方式可根
据 CN1 的 DI 信号来决定


内部速度指令的三个寄存器
SP1    P1-09 0112H 0113H 
SP2    P1-10 0114H 0115H 
SP3    P1-11 0116H 0117H 

单位: 0.1r/min 
设定范围: -50000 ~ +50000 

此时外部硬件设置DI3 、DI4的信号,可以选择三个寄存器的速度值
00 0
10 sp1
01 sp2
11 sp3

怎样内部接通DI3 、DI4?
看P3-06 

P3-06 SDI 输入接点(DI)来源控制开关 通讯地址:030CH 030DH 


参数功能: DI 来源控制开关
此参数每 1 位决定 1 个 DI 的信号输入来源:
Bit0 ~ Bit8 对应至 DI1 ~ DI9。
位设定表示如下:
0:输入接点状态由外部硬件端子控制。
1:输入接点状态由系统参数 P4-07 控制。
数字输入接脚 DI 功能规划请参考:
DI1 ~ DI9:P2-10 ~ P2-17 与 P2-36 


P3-06 DI来源控制开关。外部硬件控制还是内部寄存器控制

再来看P4-07
P4-07■ ITST 数字输入接点多重功能 通讯地址:040EH 040FH 

参数功能: DI 的输入信号可来自外部硬件端子(DI1 ~ DI9)或是软件 SDI1 ~ 9
(对应参数 P4-07 的 Bit 0 ~ 8),并由参数 P3-06 来选择。P3-06
对应的位为 1 表示来源为软件 SDI(P4-07),反之,则来自硬件DI

例如:
读取 P4-07 的数值为 0x0011 则代表:最终 DI1、DI5 为 ON 
写入 P4-07 的数值为 0x0011 则代表:软件 SDI1、SDI5 为 ON;
数字输入接脚 DI (DI1~DI9) 功能规划请参考 P2-10~P2-17 和P2-36;说的是上面的列表


P4-07相当于软件输入的开关,改变这个寄存器的值,就相当于外部硬件端子接通或断开某个DI

能设置这些寄存器,我们可以不用外部硬件接线,串口通信直接控制伺服的速度了。


上马

            #关闭强制使能
            logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x023c, output_value=0))
            logger.info(master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x023c, 0x0004))
            #P1-01设置为2
            logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x0102, output_value=2))
            logger.info(master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x0102, 0x0004))
            # DI3    P2-12 0218H 0219H
            # DI4    P2-13 021AH 021BH

            logger.info(master.execute(dvc_id, cst.WRITE_MULTIPLE_REGISTERS, 0x0218, output_value=[0x114, 0, 0x115, 0]))
            #logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x0218, output_value=2))
            logger.info(master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x0218, 0x0004))
            #3个32位的速度数据
            logger.info(master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x0112, 0x0006))

            # P3-06 SDI 输入接点(DI)来源控制开关 通讯地址:030CH 030DH
            # 1为内部软控
            _r = (master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x030C, 0x0002))
            print(_r)
            _va = _r[0] | 0x0C  # 0000 1100 //第34位对应DI3 DI4
            _va = _va | 0x01  # 0000 0001 //第1位对应DI1 Son 伺服使能
            logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x030C, output_value=_va))


            # DI 的输入信号可来自外部硬件端子(DI1 ~ DI9)或是软件 SDI1 ~ 9(对应参数 P4-07 的 Bit 0 ~ 8)
            _r = master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x040E, 0x0002)
            print(_r)
            _va = _r[0] | 0x0C  # 0000 1100 //第34位对应DI3 DI4
            _va = _va | 0x01  # 0000 0001 //第1位对应DI1 Son 伺服使能
            logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x040E, output_value=_va))
            logger.info(master.execute(dvc_id, cst.READ_HOLDING_REGISTERS, 0x040E, 0x0002))

            time.sleep(3)


            logger.info(master.execute(dvc_id, cst.WRITE_SINGLE_REGISTER, 0x040E, output_value=0x00))#关闭使能,停止
发布了78 篇原创文章 · 获赞 76 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_38288618/article/details/89741821