阅山

  • 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#通过SOEM+Leal.Core.Net.EtherCAT开发EtherCAT主站

2025-07-08

本文转载来自:作者:沃德天帅德布曜布曜德·杨(674210745)群

安装方法:

  1. 使用nuget搜索 Leal.Core.Net.EtherCAT 作者比较懒只支持.net6/8/9,windows支持X86,X64作者说懒得维护多版本没提供
  2. 安装WinPcap 可在群文件中下载或者官网下载(https://www.winpcap.org/)
  3. 安装好之后项目中会有着7个文件(最新版中已取消这7个文件,在.18.0版本之前才会有)

伺服控制:

//初始化主站 
EtherCATMaster _etherCATMaster = new EtherCATMaster();
//初始化1个地址为1的驱动器,如果有多个驱动器直接创建对应地址的多个对象即可
EtherCATSlave_CiA402? _axis = new(_etherCATMaster, 1);
//启动网卡,查找从站数量,参数为网卡名称
int Count = _etherCATMaster.StartActivity("EtherCatNet");
//停止网卡
_etherCATMaster.StopActivity();
//伺服使能
_axis.PowerOn();
//伺服去使能
_axis.PowerOff();
//绝对位置运动参数为: 位置 速度 加速度 减速度(单位:Puls)
_axis.MoveAbsolute(postion, speed, speed * 10, speed * 10);
//相对位置运动,参数同上
_axis.MoveRelative(postion, speed, speed * 10, speed * 10);
//扭矩控制,目标扭矩,扭矩斜率
_axis.TorqueControl(1000,100);//扭矩控制,单位为百分比
//速度控制,目标速度,加速度,减速度
_axis.VelocityControl(1000, 100, 100);
//伺服复位
_axis.Reset();
//伺服停止
_axis.Stop(1000000);// 停止减速度
//伺服启动回零
_axis.Home();
//写入寄存器,<写入类型>参数:驱动器地址,索引,子索引,值
_axis.Master.WriteSDO<byte>(1, 0x6060, 0x00, 6);
//读寄存器,<读取类型>参数:驱动器地址,索引,子索引
_axis.Master.ReadSDO<int>(1, 0x6060, 0x00);
//获取输入
_axis.Master.GetInputs(1);//伺服地址
//获取输出
_axis.Master.GetOutputs(1);//伺服地址
 
//初始化完成后可读取参数
从站名:_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

IO控制:

//初始化主站 
EtherCATMaster _etherCATMaster = new EtherCATMaster();
//初始化从站
IEtherCATSlave _etherCATSlave = new EtherCATSlave(_etherCATMaster, 1)
//启动网卡,查找从站数量,参数为网卡名称
int Count = _etherCATMaster.StartActivity("EtherCatNet");
//停止网卡
_etherCATMaster.StopActivity();
 
//创建输入索引
TransmitPDOMapping in1 = _etherCATSlave.AddTxPDOMapping(0, typeof(byte));// Inputs数组 索引0
//创建输出索引
ReceivePDOMapping out1 = _etherCATSlave.AddRxPDOMapping(0, typeof(byte));
//控制输出
out1.Value = (byte)0;
 

问题汇总:

1.Unable to load DLL ... or one or its 缺少DLL

答:看执行文件夹下 是否存在该DLL 存在则安装一下群文件中的WinPcap 不存在则请参考群主博客(windwos系统 请按x86_x64 将win-..zip中的dll 拷贝到执行文件夹中)

2.EtherCATSlave_CiA402

EtherCATSlave_CiA402_1

EtherCATSlave_CiA402_2的区别

答:性能依次增加 兼容性依次降低(能使用高版本 尽量使用高版本)

3.可以运行的平台

答:win_x86 win_x64 linux_x64 linux_arm linux_arm64

4.支持的.net版本

答:目前只支持net6.0;net8.0;net9.0(不过.net core可以调用.net framework的库(any cpu))

测试驱动器型号

测试成功:

倍福

EK1100

EL1018

EL2008

埃斯顿

E2P-EC

汇川

SV660N

SV630N

SVD60N

SV635N

GL10-RTU-ECTA

GL20-RTU-ECTA

AM600-1616ETNE

雷赛

PM32EC-A0

PM16DI-A0

PM16DO-A0

CL3B-EC

松下

MADLN15BE

MADLN05BE

高创

CDHD2

LDHD2

实点

C2P-EC

信捷

DS5C1

锐特技术

ECT60

繁易

FV5(非标准从站 需重构SetSyncMode:不做操作 SetOperational:强制至OP模式)

测试失败:

凌臣

LC1100

雷赛

EM32DX-E4

新立川

LC10E(不能读取实时位置,转速,扭矩,其他正常,咨询过厂家,属于驱动器BUG)

更新日志:

0.17.19.1

  1. 添加对win-x64的兼容
  2. 优化部分问题
  3. 删除windows系统环境dll ucrtbased.dll及vcruntime140d.dll(正常电脑会自带 如何不自带 根据系统需求 在群文件下载)
标签: 暂无
最后更新:2025-07-08

代号山岳

知之为知之 不知为不知

点赞

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

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号