LinuxCNC+EtherCAT(7)一个歪果仁做的例子的解释。。。。。

在Youtube上看到了一位国外老兄做的,很不错。

https://www.youtube.com/watch?v=JU2lFg1rwgg

然后,找到了他的HAL和xml文件,如下。

EtherCAT部分的xml文件

<master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">
<slave idx="0" type="generic" vid="0000060A" pid="00000001" configPdos="true">
<sdoConfig idx="6098" subIdx="0">
<sdoDataRaw data="12"/>
</sdoConfig>
<sdoConfig idx="6099" subIdx="1">
<sdoDataRaw data="E8 03 00 00"/>
</sdoConfig>
<sdoConfig idx="6099" subIdx="2">
<sdoDataRaw data="64 00 00 00"/>
</sdoConfig>
<sdoConfig idx="6093" subIdx="1">
<sdoDataRaw data="00 08 00 00"/>
</sdoConfig>
<sdoConfig idx="6093" subIdx="2">
<sdoDataRaw data="F9 15 00 00"/>
</sdoConfig>
<sdoConfig idx="6094" subIdx="1">
<sdoDataRaw data="01 00 00 00"/>
</sdoConfig>
<sdoConfig idx="6094" subIdx="2">
<sdoDataRaw data="58 02 00 00"/>
</sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1602">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="special32" scale="1000"/>
<pdoEntry idx="60b1" subIdx="00" bitLen="32" halPin="speedcommand" halType="special32" scale="10"/>
<pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="bit"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A02">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="special32" scale="1000"/>
<pdoEntry idx="6077" subIdx="00" bitLen="16" halPin="torque" halType="special32" scale="10"/>
<pdoEntry idx="606C" subIdx="00" bitLen="32" halPin="speed" halType="special32" scale="10"/>
<pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode_fb" halType="bit"/>
<pdoEntry idx="60FD" subIdx="00" bitLen="32" halPin="digital_inputs" halType="bit"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
</slave>
</master>

上述参数是从TwinCAT中的xml文件中get。

可以参考最后的文档。

HAL文件如下

# Erstellt von stepconf am Tue Jul 16 23:06:39 2013
# Änderungen an dieser Datei werden beim nächsten
# Aufruf von stepconf überschrieben.
loadusr -W lcec_conf /root/linuxcnc/configs/roschi_cnc/ethercat_config_estun.xml
loadrt lcec
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt classicladder_rt
loadusr classicladder --nogui custom.clp


addf lcec.read-all servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf lcec.write-all servo-thread
addf classicladder.0.refresh servo-thread


setp lcec.0.0.drivecontrol-1 1
setp lcec.0.0.drivecontrol-2 1


net Xachse_fb lcec.0.0.pos => axis.0.motor-pos-fb
net Xachse_cmd axis.0.motor-pos-cmd => lcec.0.0.poscommand
net Xachse_speed_cmd axis.0.joint-vel-cmd => lcec.0.0.speedcommand



net Xachse_AF axis.0.amp-enable-out => lcec.0.0.drivecontrol-3 
net Xachse_torque lcec.0.0.torque

对于上述的解释。

  1. 实时模块加载:loadrt、非实时模块加载:loadusr。使用格式为:loadrt trivkins count=1 param=value。loadrt 命令将运动轨迹规划模块 trivkins 加载于实时空间运行,加载数目为 1,引入参数为 value。
  2. 添加线程:addf,使用格式为:addf ethercat.read servo-thread。addf 命令将 ethercat驱动模块主函数添加至线程池中运行,servo-thread 按预定周期性调用该函数。
  3. 参数设置:setp,设置模块中某个引脚或参数为指定值,在模块使用前或在运行过程中均可使用,其使用格式为:setp motion.0.pin-08-out TRUE
  4. 引脚连接:net、linksp,用于将模块的引脚与引脚或信号与引脚间互连。
  5. 信号新建:newsig,建立一个指定数据类型的中间连接信号。数据类型包括 bit、s32、u32 以及 float。使用格式为:newsig OutputIO bit








对于本例子。。。。

net命令,

net Xachse_fb lcec.0.0.pos => axis.0.motor-pos-fb

Xache_fb为信号名字,axis.0.motor-pos-fb为IN管脚,前面为Out管脚,=>前后必须要有空格。

setp命令,例如

setp lcec.0.0.drivecontrol-1 1

将lcec.0.0.drivecontrol-1初值为1




阅读更多
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/xkzju2010/article/details/49401757
文章标签: LinuxCNC EtherCAT
个人分类: linux EtherCAT
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭