阅山

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Platforms
  3. IOT
  4. EtherCAT
  5. 正文

C#通过Leal.Core.Net.EtherCAT测试新力川CL3-D57H步进驱动器

2025-07-16

前期资料:C#通过SOEM+Leal.Core.Net.EtherCAT开发EtherCAT主站 - 阅山

博主代码:

ethercatdemo\ethercatdemo\Program.cs:

// See https://aka.ms/new-console-template for more information
using ethercatdemo;

Console.WriteLine("Hello, World!");

EtherCAT ethercat = new EtherCAT();
ethercat.Start("以太网 3");

ethercatdemo\ethercatdemo\EtherCAT.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Core.Net.EtherCAT;

namespace ethercatdemo
{
    internal class EtherCAT
    {

        public void printPosition(EtherCATSlave_CiA402 _axis,int seconds) {
            for (int i = 0; i < seconds; i++) {

                int PositionActualValue = _axis.PositionActualValue;
                //Console.WriteLine($"PositionActualValue: {PositionActualValue}");
                Console.WriteLine($"从站名:{_axis.SlaveName} 从站地址:{_axis.SlaveAddr} 从站状态:{_axis.SlaveState} 报警代码:{_axis.ErrorCode} 状态字:{_axis.StatusWord} 当前模式:{_axis.ModesOperationDisplay} 当前位置:{_axis.PositionActualValue} 当前速度:{_axis.VelocityActualValue} 控制字:{_axis.Controlword} 设置模式:{_axis.ModesOperation} 设置位置:{_axis.TargetPosition} 设置速度:{_axis.ProfileVelocity} 设置加速度:{_axis.ProfileAcceleration} 设置减速度:{_axis.ProfileDeceleration} 快速停机:{_axis.QuickOptionCode} 停止代码:{_axis.HaltOptionCode} 伺服无故障:{_axis.AxisState.ReadyToSwitchOn} 等待打开伺服使能:{_axis.AxisState.SwitchedOn} 伺服运行:{_axis.AxisState.OperationEnabled} 故障:{_axis.AxisState.Fault} 接通主回路电:{_axis.AxisState.VoltageEnabled} 快速停机:{_axis.AxisState.QuickStop} 伺服准备好:{_axis.AxisState.SwitchOnDisabled} 警告:{_axis.AxisState.Warning} 远程控制:{_axis.AxisState.Remote} 目前到达:{_axis.AxisState.TargetReached} 内部软限位状态:{_axis.AxisState.InternalLimitActive} 回原点完成输出:{_axis.AxisState.HomingAttained}");
                Thread.Sleep(1000);
            }
        }
        public void Start(string card) {


            //初始化主站 
            EtherCATMaster _etherCATMaster = new EtherCATMaster();
            //初始化1个地址为1的驱动器,如果有多个驱动器直接创建对应地址的多个对象即可
            EtherCATSlave_CiA402? _axis = new(_etherCATMaster, 3);
            var interfaces = _etherCATMaster.GetAvailableInterfaces();
            //启动网卡,查找从站数量,参数为网卡名称
            int Count = _etherCATMaster.StartActivity(card);
            //停止网卡
            // _etherCATMaster.StopActivity();
            //伺服使能
            //_axis.Reset();
            _axis.PowerOn();
            _axis.Reset();
            _axis.Home();
            //_axis.MoveAbsolute(-9000, 1000, 1 * 100, 1 * 100);
            printPosition(_axis,10);
            //伺服去使能
            //_axis.PowerOff();
            //绝对位置运动参数为: 位置 速度 加速度 减速度(单位:Puls)
            _axis.MoveAbsolute(90000, 1000, 1 * 100, 1 * 100);
            printPosition(_axis, 10);
            //相对位置运动,参数同上
            // _axis.MoveRelative(postion, speed, speed * 10, speed * 10);
            //扭矩控制,目标扭矩,扭矩斜率
            //_axis.TorqueControl(1000, 100);//扭矩控制,单位为百分比
            //速度控制,目标速度,加速度,减速度
            //_axis.VelocityControl(1000, 100, 100);
            //伺服复位

            //伺服停止
            _axis.Stop(1000);// 停止减速度
                                //伺服启动回零
           
            //写入寄存器,<写入类型>参数:驱动器地址,索引,子索引,值
            //_axis.Master.WriteSDO<byte>(1, 0x6060, 0x00, 6);
            //读寄存器,<读取类型>参数:驱动器地址,索引,子索引
            //_axis.Master.ReadSDO<int>(1, 0x6060, 0x00);
            //获取输入
            //_axis.Master.GetInputs(1);//伺服地址
                                      //获取输出
            //_axis.Master.GetOutputs(1);//伺服地址

        }
    }
}

二、测试结果

电机正常运行,且输出日志:

标签: 暂无
最后更新:2025-07-16

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号