黄工无刷电机学习
直播中

李建设

7年用户 1364经验值
私信 关注
[问答]

怎样用串口通信去控制伺服速度呢

怎样用串口通信去控制伺服速度呢?
RS-232通讯格式有哪几种?

回帖(1)

龙献益

2021-10-11 10:21:25
  用串口通信来控制伺服速度,先看说明书
  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))#关闭使能,停止
举报

更多回帖

发帖
×
20
完善资料,
赚取积分