当前位置: 首页 > news >正文

伺服驱动控制CANopen协议

一、CANOpen的概念

CAN现场总线本身实现了物理层和数据链路层,CANopen是一个建立在CAN数据链路层之上的应用层协议。

CANopen是应用层协议,未规定物理层和数据链路层的实现。CANopen抽象了底层的通信机制,只要底层通信技术能提供满足CANopen应用层需求的服务(主要是可靠的点对点和广播/多播通信能力),理论上CANopen就可以运行其上。故并非必须基于CAN总线实现,例如也可基于Ethercat总线实现,即CANopen Over EtherCAT(CoE)。

CANopen网络管理采用的是“单一主站”模式。并且CANopen 主节点(主站)自身必须实现一个完整的 CANopen 节点协议栈,这包括了 NMT 从节点协议所要求的所有功能(状态机、响应命令、状态报告)。因此,在作为一个被管理的节点的底层功能和内部机制上,主节点与从节点是相似的。然而,主节点的核心特征和额外职责在于它被赋予了主动发起 NMT 命令来控制和管理网络中其他从节点的唯一权限,并承担网络监控和协调的全局任务。

二、CANOpen网络的总体架构

CANopen 通信网络一般由一个主节点(master)和数量不定(最大126)的从节点(slave)组成。
●主节点:负责整个网络的管理。
●从节点:主要负责底层的网络通讯和控制任务。

CAN Open 连接由三根线组成:CAN_High、CAN_Low 和 Can_Ground。

基本上,它需要了解从哪里开始(图中的节点 1)以及从哪里结束(图中的节点 N)。因此,两端都需要一个电阻器,如 LT 所示。没有它,节点将无法相互通信。它通常使用双绞线电缆传输差分信号。

三、CANOpen协议报文分类

1、NMT网络管理报文:作用是管理网络,切换节点的状态。一般由主站发送NMT网络管理报文。
2、SDO服务数据对象报文:作用是设置设备参数,或者是一些关键数据的传输。一般由主站发起SDO报文,从站应答SDO报文。从站也可以发起SDO,主站响应,比如关键数据的传输。
3、PDO过程数据对象报文:作用是传输一些设备的过程数据,比如传输温度,速度等等。主站和从站都会发送。
4、EMCY紧急报文:作用是传输设备的故障信息。主站和从站都会发送。


5、SYNC同步报文:SYNC在CANOPEN网络中的作用是提供同步机制,用来同步数据,比如用来同步从站的TPDO数据,一般由主站发送。假设从站的TPDO传输类型是在同步模式下,当从站收到设定次数的SYNC报文后,从站会发送TPDO。

SYNC同步报文的格式:COB-ID是0x80,数据帧,数据长度是0。SYNC报文的优先级仅次于NMT报文的优先级,SYNC的报文没有数据,足够短小,其目的就是为了快,减小抖动。


6、NODE GUARDING节点保护报文:作用是主站请求从站的状态,主站询问,从站应答。这种模式逐渐已被淘汰,因为太占CAN总线网络带宽。
7、HeartBeat心跳报文:作用是设备主动发送心跳,表示自己在线。主站和从站都可以发送。

四、CANOPEN通讯对象

CANopen 协议主要对 CAN 报文中的仲裁域(11 位)和数据域(最多 8 字节)进行了定义。数据部分传输多字节数据时采用小端模式。

CANopen协议是一个通用协议标准,从CiA 301 基础协议(DS 301)开始,对于不同类型的CANopen设备有不同的设备子协议(称之为行规),如CiA 402“伺服与运动控制”子协议面向运动设备(包括伺服驱动器、逆变器、步进电机驱动器等)。

4.1、CANopen 通信对象编号

CANopen报文传输采用 CAN 标准帧格式。

这里的CAN-ID也叫COB-ID(C通信对象编号),Node-ID节点ID,最大128个,范围0-127。

传输数据发生冲突时,CANbus 的仲裁机制会使 COB-ID 最小的讯息继续传送,不用等待或重传,也就是说 COBID 数值越小,输出优先等级越高。

4.2、常用通讯对象的COB-ID

通讯对象

COB-ID

TPDO1

0x180+node_ID

RPDO1

0x200+node_ID

TPDO2

0x280+node_ID

RPDO2

0x300+node_ID

TPDO3

0x380+node_ID

RPDO3

0x400+node_ID

TPDO4

0x480+node_ID

RPDO4

0x500+node_ID

主站SDO

0x600+node_ID

从站SDO

0x580+node_ID

心跳功能

0x700+node_ID

4.3、对象字典

CANopen对象字典(OD: Object Dictionary)是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,描述了对应CANopen节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递形式就叫做EDS文件(电子数据文档Electronic Data Sheet)。对象字典,就像体检表,具备这个人每个功能的参数,便于用人单位(主站)进行合理分配工作。

Index range索引范围

Description描述

0000h

Reserved保留

0001h to 025Fh

Data types数据类型

0260h to 0FFFh

Reserved保留

1000h to 1FFFh

Communication profile area通讯对象子协议区

2000h to 5FFFh

Manufacturer-specific profile area制造商特定子协议区

6000h to 9FFFh

Standardized profile area标准化设备子协议区

A000h to AFFFh

Network variables网络变量(符合IEC61131-3)

B000h to BFFFh

System variables用于路由网关的系统变量

C000h to FFFFh

Reserved保留

索引(Index):每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据量大时无索引可分配,所以在某些索引下也定义了一个8 位的索引值,这个索引值通常被称为子索引(Sub),其范围是0x00到0xFF之间。每个索引内具体的参数,最大用32位的变量来表示,即Unsigned32,四个字节。

对象属性(Attrib):对象属性有RW(读写)、RO(只读)、WO(只写)、M(可映射)、S(可存储)

4.4、通用通讯对象

 

  0x1000 -- VAR变量 -- Device type设备类型。0x1001--VAR变量--Error register 错误寄存器

  0x1002 -- VAR变量 -- Manufacturer status register 制造商状态寄存器。

  0x1003 -- ARRAY 数组 -- Pre-defined error field 预定义错误场。

  0x1005 -- VAR变量 -- COB-ID Sync message 同步报文 COB 标识符。

  0x1006 -- VAR变量-- Communication cycle period 同步通信循环周期(单位 us)。

  0x1007 -- VAR变量 -- Synchronous windows length 同步窗口长度(单位 us)。

  0x1008 -- ARRAY 数组 -- Manufacturer device name 制造商设备名称。

  0x1009 -- VAR变量 -- Manufacturer hardware version 制造商硬件版本。

  0x100A -- VAR变量 -- Manufacturer software version 制造商软件版本。

  0x100C -- VAR变量 -- Guard time 守护时间(单位 ms)。

  0x100D -- VAR变量 -- Life time factor 寿命因子(单位 ms)。

  0x1010 -- VAR变量 -- Store parameters 保存参数。

  0x1011 -- VAR变量 -- Restore default parameters 恢复默认参数。

  0x1012 -- VAR变量 -- COB-ID time stamp 时间报文 COB 标识符(发送网络时间)。

  0x1013 -- VAR变量 -- COB-ID time stamp 时间报文 COB 标识符(发送网络时间)。

  0x1014 -- VAR变量 -- COB-ID emergency 紧急报文 COB 标识符。

  0x1015 -- VAR变量 -- Inhibit time emergency 紧急报文禁止时间(单位 100us)。

  0x1016 -- VAR变量 -- Consumer heartbeat time 消费者心跳时间间隔(单位 ms)。

  0x1017 -- VAR变量 -- Producer heartbeat time 生产者心跳时间间隔(单位 ms)。

  0x1018 -- VAR变量 -- Identity object 厂商 ID 标识对象。

  0x1019 -- VAR变量 -- Sync.counter overflow value 同步计数溢出值。

  0x1020 -- VAR变量 -- Verify configuration 验证配置。

  0x1021 -- VAR变量 -- Store EDS 存储 EDS。

  0x1022 -- VAR 变量 -- Storage format 存储格式。

  0x1023 -- RECORD 记录 -- OS command 操作系统命令。

  0x1024 -- VAR 变量 -- OS command mode 操作系统命令模式

  0x1025 -- RECORD 记录 -- OS debugger interface 操作系统调试接口。

  0x1026 -- ARRAY 数组 -- OS prompt 操作系统提示。

  0x1027 -- ARRAY 数组 -- Module list 模块列表。

  0x1028 -- ARRAY 数组 -- Emergency consumer 紧急报文消费者。

  0x1029 -- ARRAY 数组 -- Error behavior 错误行为。

其中0x1018有各种子索引,也代表不同的意思。

五、状态机

CANOpen节点共包括:初始化、预操作、操作、停止这四个状态。状态机可以通过NMT服务相互切换。

六、NMT报文

NMT 即 CAN网络管理系统,用于控制整个网络中所有节点的通讯状态机,NMT主机负责发送NMT指令,从节点仅响应指令即可。所有从设备必须支持NMT功能,并且一个CAN网络中有且只有一个NMT主机。

6.1、NMT报文(Master->Slave)

NMT报文发送的COB-ID固定为”0x000”。

COB-ID

Byte0

Byte1

0x0000

CS

Node-ID

NMT指令CS

说明

实现功能

0x1 =1

启动远程节点

开启所有通讯服务状态进入OP

0x2 =2

停止远程节点

停止CAN节点数据通讯(心跳除外);

由OP或Pre-OP进入Stop

0x80=128

进入预操作状态

仅允许SDO激活,PDO不激活,

OP或者STOP进入Pre-OP

0x81=129

复位节点

通讯参数重新配置,重新开始通讯

进入Initial状态

0x82=130

复位通讯

进入Initial状态

七、心跳保护

通过节点保护功能,主机可以知道网络中所有从节点的当前状态,心跳时间不宜设置过短,会加大CAN网络负担,造成网络瘫痪。

7.1、主站心跳报文和从站心跳报文

心跳模式采用生产者/消费者模型,心跳报文分为主站心跳报文和从站心跳报文。

主站心跳报文
从站以“监督时间”周期性的上传报文到主站,如果超过“心跳消费者时间”后主站还没有收到从站的下一个心跳报文,那么主站判断通讯出错,主站产生报警。主站心跳报文是通常采用的形式。

从站心跳报文
主站以“监督时间”周期性的发送报文到从站,如果超过“心跳生产者时间”从站还没有收到主站的下一个心跳报文,那么从站判断通讯出错。

7.2、心跳保护(Master<-Slave)

当主站(运动控制器)通过对象字典0x1017成功激活从站(驱动器)后,因为从站是按照0x1017设置的时间间隔来发送心跳报文,主站只要在规定时间内没有收到心跳报文,则认为从站掉线。

主站的规定时间一般是0x1017的2.5倍以上。(0x1017--VAR变量--Producer heartbeat time 生产者心跳时间间隔(单位 ms)。)

COB-ID

数据内容

0x700+node_ID

状态(0:启动;4:停止;5:运行;127:预操作状态)

八、SDO服务数据对象

SDO(Service data object,服务数据对象)用于传输非周性数据,使用对象字典的索引和子索引访问CAN节点对象字典中的对象。可对对象字典进行读写操作。

8.1、对对象字典进行读操作

SDO读指令的格式

主/从站

COB-ID

CAN报文

0

1

2

3

4

5

6

7

主站

0x600

+node_ID

0x40(读指令)

索引

子索引

00

00

00

00

从站

0x580

+node_ID

0x43(4字节)

索引

子索引

数据1

数据2

数据3

数据4

0x47(3字节)

索引

子索引

数据1

数据2

数据3

 

0x4B(2字节)

索引

子索引

数据1

数据2

 

 

0x4F(1字节)

索引

子索引

数据1

 

 

 

0x80(读失败)

索引

子索引

中止代码表*

8.2、对对象字典进行写操作

SDO写指令的格式

主/从站

COB-ID

CAN报文

备注

0

1

2

3

4

5

6

7

 

主站

0x600

+node_ID

0x23(4字节)

索引

子索引

数据1

数据2

数据3

数据4

数据1是低位数据

0x27(3字节)

索引

子索引

数据1

数据2

数据3

 

数据1是低位数据

0x2B(2字节)

索引

子索引

数据1

数据2

 

 

数据1是低位数据

0x2F(1字节)

索引

子索引

数据1

 

 

 

数据1是低位数据

从站

0x580

+node_ID

0x60(成功)

索引

子索引

00

00

00

00

 

0x80(失败)

索引

子索引

中止代码表*

 

8.3、SDO读写错误中止代码表

如果使用SDO读取或写入的时候返回0x80错误的话,可以查询返回数据帧的后4个字节,后4个字节是被称为是中止代码,通过中止代码能得知出错的原因。

中止代码描述
0503 0000切换位不交替
0504 0000SDO协议超时
0504 0001命令说明符无效
0504 0002块大小无效(仅块模式,请参阅DS301)
0504 0003序列号无效(仅适用于块模式,请参阅DS301)
0504 0004CRC错误(仅限块模式,请参阅DS301)
0504 0005内存不足
0601 0000不支持访问对象
0601 0001尝试读取只写对象
0601 0002尝试写一个只读对象
0602 0000对象字典不存在改对象
0604 0041对象不能映射到PDO
0604 0042要映射的对象的数量和长度将超过PD0长度
0604 0043一般参数不兼容的原因
0604 0047一般在设备内部不兼容
0606 0000由于硬件错误,访问失败
0607 0010数据类型不匹配,服务参数长度不匹配
0607 0012数据类型不匹配,服务参数的长度太高
0607 0013数据类型不匹配,服务参数的长度太低
0609 0011子索引不存在
0609 0030 超出参数值范围(仅限写访问)
0609 0031 参数值太高
0609 0032 参数值太低
0609 0036最大值小于最小值
0800 0000一般错误
0800 0020数据不能传输或存储到应用程序
0800 0021由于本地控制,数据不能传输或存储到应用程序中
0800 0022由于当前设备状态,数据无法传输或存储到应用程序*
0800 0023对象字典动态生成失败或者不存在对象字典(发生文件和文件错误的对象字典加载)

九、PDO过程数据对象

PDO的全称Process Data Object,用来传输过程数据。比如,温度、电压等等。PDO传输是属于生产者消费者模型,生产数据方把数据发送出去。消费者需要处理数据的就去处理,不需要处理的就不处理。PDO是单向传输,不需要应答,所以PDO传输效率高于SDO传输效率。

主站发送的PDO称为RXPDO,从站发送的PDO称为TXPDO

9.1、PDO对象

PDO 由通信参数映射参数共同决定最终传输的方式及内容。RPDO 通讯参数范围:0x1400h to 15FFh;TPDO 通讯参数范围: 1800h to 19FFh。TPDO的映射参数范围是0x1A00到0x1BFF,RPDO的映射参数范围是0x1600~0x17FF。【通讯对象:设置PDO传输特性;映射对象:设置传输内容,即映射对象字典。二者相当于索引的作用】

(一)、PDO通讯示例图

主站向从站发送数据:

在这里插入图片描述


从站向主站发送数据:

在这里插入图片描述

(二)、下表示例:4 个 RPDO 和 4 个 TPDO 来实现 PDO 的传输

主/从站

C0B-ID

序号

通讯对象

映射对象

RPDO
(主->从站)

0x200
+node_ID

1

0x1400

0x1600

0x300
+node_ID

2

0x1401

0x1601

0x400
+node_ID

3

0x1402

0x1602

0x500
+node_ID

4

0x1403

0x1603

TPDO
(从->主站

0x180
+node_ID

1

0x1800

0x1A00

0x280
+node_ID

2

0x1801

0x1A01

0x380
+node_ID

3

0x1802

0x1A02

0x480
+node_ID

4

0x1803

0x1A03

9.2、传输类型

(一)、传输类型的数值设定

1、当TPDO的传输类型为0时,如果映射数据发生改变,且接收到一个同步帧,则发送该 TPDO;

2、当 TPDO 的传输类型为1~240时,接收到相应个数的同步帧时,发送该TPDO,和映射数据是否变化没有关系;

3、当TPDO的传输类型是254或255时,映射数据发生改变或者事件计时器到达则发送该TPDO;

4、当 RPDO 的传输类型为0~240时,只要接收到一个同步帧,则将该RPDO最新的数据更新到应用;

5、当 RPDO 的传输类型为254或者255时,将接收到的数据直接更新应用。

(二)、PDO 有两种传输方式,同步传输和异步传输。

1、同步传输

同步传输就是通过 SYNC(同步)消息让所有节点能在同一时刻进行上传数据或者执行下达的应用指令。SYNC 消息是由主节点周期性地发送的,所有其他节点在接收到 SYNC 消息后都会执行指定的操作。

对TxPDO,同步传输又可细分为下述两种类型:

同步非周期(AcycliSyn,传输类型:0)。该方式下节点接收到1个SYNC 消息且数据发生变化时,PDO 数据传输一次。
同步周期(LoopSyn,传输类型:1-240)。该方式下节点每接收到 n 个SYNC 消息后(可设置数为1 到 240 个 ),PDO 数据传输一次。

2、异步传输

异步传输由特定事件触发,此处事件指数据变化或定时器溢出等。

(三)、设定参数的含义

生产禁止约束时间:这一项对TPDO才有用,用来规定TPDO发送的最小时间间隔。这其实就是流量控制,防止TPDO狂发,占用大量CAN总线带宽。

针对 TPDO 设置了禁止时间,存放在通信参数 (1800h~1803h) 的子索引03 上,防止 CAN 网络被优先级较高的 PDO 持续占有。该参数的单位是 100us,设置数值后,同一个 TPDO 传输间隔减不得小于该参数对应的时间。

同步起始值:同步传输的 PDO,收到若干个同步帧后,才进行发送,该参数用于指定同步帧数量。

9.3、异步PDO传输

1、RPDO

对于RPDO的通讯对象0x1400~0x1403,用来设置RPDO传输的特性。

举例:

0x1400:01字索引 010x200+node_ID ,用于表示COB-ID,该数据是无符号32位的数据,最高位用于设置是否激活该PDO(COB-ID最高位为0则PDO有效可以传输数据,为1则PDO无效)。0x1400:02字索引02用来设置数据传输类型,255表示异步传输,表示接受到PDO后立即处理数据。

node_ID =1,设置0x1400:01 = 0x201时,表示激活第一个RPDO ;如果设置0x1400:01 = 0x80000201时,表示关闭第一个RPDO。0x1400:02 = 255表示异步传输。

索引

子索引

名称

数值

说明

0x1400

01

COB-ID

0x200
+node_ID

不支持修改

02

传输类型

255

异步传输

2、TPDO

对于TPDO的通讯对象0x1800~0x1803,用来设置TPDO传输的特性。

举例:

node_ID =1,设置0x1800:01 = 0x181时,表示激活第一个TPDO ,如果设置0x1800:01 = 0x80000181时,表示关闭第一个TPDO;0x1800:02 = 255用于异步传输;设置0x1800:03 = 100,就是10毫秒,设置0x1800:05 = 100,就是100毫秒。

那么有以下PDO传输特性:如果映射的数据内容长时间是一个恒定值,即使长时间没有改变,那么每过100毫秒,也会发出一个PDO;如果映射的数据变化很快,每毫秒变化一次,但是PDO不会每毫秒都发送一次,当时间到达10毫秒,才会发出一个PDO。  

索引

子索引

名称

数值

说明

0x1800

00

字索引个数

5

不支持修改

01

COB-ID

0x180
+node_ID

 

02

传输类型

255

异步传输

03

禁止时间

100

单位:0.1毫秒

04

——

——

——

05

事件时间

0

单位:1毫秒

9.4、同步PDO传输

同步PDO的传输,需要根据同步帧(SYNC)0x80的周期,来决定 PDO(TxPDO,RxPDO)发送周期,驱动器既是同步帧的消费者,也可以发送同步帧,发送同步帧由对象0x1005和0x1006来实现。(SYNC消费者:根据SYNC帧触发PDO收发。SYNC生产者:通过配置 0x1005 和 0x1006 主动发送SYNC帧。)

0x1005(SYNC COB-ID)是发送同步帧报文的COB-ID(配置SYNC帧的COB-ID及启用状态)在CAN网络中同步帧的报文以0x80开头,0x1005对象是一个32位的数据,通过设置该对象数值可以决定是否激活同步报文帧。激活标志在最高位(bit 31),0x1005 = 40000080h表示激活同步报文帧,0x1005 = 80h表示关闭报文帧。

0x1006(SYNC周期)用于设置同步报文的周期,数据类型是32位无符号数据,单位是微秒。0:非周期性SYNC(每收到任意CAN帧触发一次同步)。>0:周期性SYNC(例:1000 = 1ms周期)。

1、RPDO

对于RPDO的通讯对象0x1400~0x1403,用来设置RPDO传输的特性。

举例:

对于RPDO而言,从站收到主站发出的同步帧,且收到同步的RPDO,在下一个同步时刻,将RPDO的数据更新到从站,同步周期等于(0x1400-02)*(0x80周期)。

索引

子索引

名称

数值

说明

0x1400

01

COB-ID

0x200
+node_ID

不支持修改

02

传输类型

1-240

同步传输周期

2、TPDO

对于TPDO的通讯对象0x1800~0x1803,用来设置TPDO传输的特性。

举例:

当0x1800-02 = 0时,只要数据改变,在下一个同步帧时刻立即将TPDO的数据发送;

当0x1800-02 = 1~240时,收到相应的同步帧时,不管数据是都改变,立即发送PDO,同步周期等于(0x1800-02)*(0x80周期)。

索引

子索引

名称

数值

说明

0x1800

00

字索引个数

5

不支持修改

01

COB-ID

0x180
+node_ID

不支持修改

02

传输类型

1-240

同步传输

03

禁止时间

——

——

04

——

——

——

05

事件时间

——

——

9.5、PDO映射对象

PDO配置的过程称PDO映射,对于映射对象0x1600~0x1603和0x1A00~0x1A03。

注意:

1、PDO映射对象只能用来映射对象字典,不能决定PDO传输特性;

2、0x1400~0x1403,0x1800~0x1803用来设置PDO传输特性。

3、每个映射对象的子索引最大个数是8个,总数据长度是8个字节;

4、PDO映射的内容中,务必确保每个对象字典的数据长度以及属性正确,比如对象字典0x6040只能配置在RPDO映射对象中,如果配置到TPDO的映射对象就会报错;

举例:

1st
TxPDO

索引

子索引

索引内容

0x1A00
子索引内容可变

00H

03H

 

Index

Size

Name

01H

0x6041

2.0

StatusWord

02H

0x6061

1.0

Modes of Operation Display

03H

0x6064

4.0

PositionActualValue

1st
RxPDO

索引

子索引

索引内容

0x1600
子索引内容可变

00H

03H

 

Index

Size

Name

01H

0x6040

2.0

ControlWord

02H

0x6060

1.0

Modes of Operation

03H

0x607A

4.0

Target Position

十、SYNC同步报文

SYNC同步是控制多个节点发送与接收之间协调和同步的一种特殊机制,用于 PDO 的同步传输。

同步对象由 CANopen 主站周期性地广播 CAN 总线的报文,用来实现基本的网络时钟信号,每个设备可以根据自己的配置,决定是否使用该事件来跟其它网络设备进行同步通讯。

SYNC 通信也基于生产者/消费者模型。生产者定期广播同步对象,网络中的其它设备都可以接收 SYNC 消息,由此为 CANOpen 网络提供基本的同步机制。

SYNC同步周期由对象字典中的标准通信循环周期参数 0x1006 定义。SYNC 报文的 COB-ID 为 0x80,具有很高的优先级,以减少生产者发送 SYNC 报文时的延时抖动。SYNC 报文可以不包含数据,最小化报文的传输时间。

相关文章

CANopen基本概念学习笔记-CSDN博客

CanOpen协议的伺服驱动控制_canopen控制伺服电机-CSDN博客

canopen_canopen emcy-CSDN博客

轻松掌握CANOpen最难理解的对象字典 - 21ic电子网

简单CANOPEN 协议说明

CANopen轻松入门----详解1 - Vak - 博客园

CANOpen PDO传输_canopen pdo发送的内容-CSDN博客

CanOpen通信----PDO与SDO_canopen pdo和sdo-CSDN博客

http://www.dtcms.com/a/274453.html

相关文章:

  • [WinForms] 如何为 .NET Framework 4.8 窗体程序添加自定义图标
  • 力扣面试150(29/100)
  • vue3 el-input 通过数组 获取显示
  • 上位机知识篇---网络通信端口
  • 【Nginx】实测Nginx增加第三方主动式健康检查模块
  • C++——构造函数的补充:初始化列表
  • C++11堆操作深度解析:std::is_heap与std::is_heap_until原理解析与实践
  • 操作系统内核链表操作接口
  • 基于机器视觉的半导体检测解决方案
  • 模拟心电图采样数据
  • 《PyQtGraph:Python绘图领域的“超级引擎”》
  • [ARC195E] Random Tree Distance
  • 完全和零一背包
  • 游戏开发日记
  • nginx 负载均衡配置(加解决重复登录问题)
  • Reading and Writing to a State Variable
  • stm32-modbus-rs485程序移植过程
  • gRPC服务注册和故障恢复
  • AI技术重塑工业制造:从智能应用到大型模型落地
  • AMTS AHTE | 具身智能成制造升级新引擎 灵途科技助力更强感知
  • 八股训练--RabbitMQ
  • LVS-NAT模式配置
  • 《Java 虚拟机内幕:从垃圾回收到类加载的深度解析》
  • 微积分核心考点全解析
  • pnpm 的 resolution-mode 配置 ( pnpm 的版本解析)
  • 上位机知识篇---Docker
  • 静态路由综合实验报告册
  • HashMap简介
  • 五星出东方洛老师:gma绘制的洛阳市瀍河回族区的地图和兴趣点
  • 高精加法-P1601 A+B Problem(高精)