CANopen教程全解

合集下载

第三方CANOPEN配置方法

第三方CANOPEN配置方法

第三方硬件配置方法
一、
进入Hardware Catalog Manager配置硬件;
二、配置第三方产品;
三、添加EDS文件;
先在第三方产品上点击“add device”,添加EDS文件,找到EDS文件并命名,第三方产品的第四个“yhb”即为添加好的产品,然后右击会出现“add fuction”,添加IODDT,右击取消全选,并选择2401:01、2401:02及6401:01、6401:02,添加就可以了,最后再编译下,如果没有错误硬件配置就好了。

四、UnityPro软件配置;
双击配置中CANOPEN,就会出现CANOPEN子站画面,3和4号地址是两台变频器,然后再双击总线上3号和4号下面的一个圈,添加第三方设备,如图
选择第三方产品“yhb”,这样第三方的子站就添加成功了。

然后双击这个子站的块,进入PDO文件的添加,如下图
注意左下角的“功能”要选择一下,默认的DEFAULT可能没选择,需要更改下。

把这四个变量分别添加到PDO中。

传输(%I)中插入IW,接收(%Q)插入QW即可,然后需要设置下传输(%I)的传输类型,修改为如图。

而接收(%Q)仍然为异步方式。

六、程序已经编好,这里不再阐述,主站配置
配置好输入输出自述和第一个%mw的索引及传输速度就可以,这样配置就OK了。

(完整word版)CANOPEN协议详解

(完整word版)CANOPEN协议详解

一、CAN-BUS介绍1.CAN的基本概念、特点CAN 是 Controller Area Network的缩写(以下称为 CAN),是 ISO*1国际标准化的串行通信协议。

CAN 协议如表 3 所示涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层。

CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体有哪些定义如图所示。

ISO/OSI 基本参照模型【注】*1 OSI:Open Systems Interconnection (开放式系统间互联)CAN的特点CAN 协议具有以下特点。

(1) 多主控制在总线空闲时,所有的单元都可开始发送消息(多主控制)。

最先访问总线的单元可获得发送权。

(2) 消息的发送在 CAN 协议中,所有的消息都以固定的格式发送.总线空闲时,所有与总线相连的单元都可以开始发送新消息。

两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。

ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。

两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较.仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

(3)系统的柔软性与总线相连的单元没有类似于“地址”的信息。

因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

(4)通信速度根据整个网络的规模,可设定适合的通信速度。

在同一网络中,所有单元必须设定成统一的通信速度。

即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信.不同网络间则可以有不同的通信速度。

(5)远程数据请求可通过发送“遥控帧”请求其他单元发送数据。

(6) 错误检测功能·错误通知功能·错误恢复功能所有的单元都可以检测错误(错误检测功能)。

CANopen轻松入门

CANopen轻松入门

广州致远电子股份有限公司入门教程 CANopen 轻松入门类别内容 关键词CANopen DS301 摘 要 用于初次接触CANopen 的用户,主要以CANopen DS301为主要教授方向修订历史目录1. 前言 (1)2. CANopen在ISO层级中的位置 (2)3. CANopen协议诞生和发展 (3)4. CANopen的预定义报文ID分类 (5)4.1网络管理(NMT)与特殊协议(Special protocols)报文ID分类 (5)4.2过程数据对象(PDO)和服务数据对象(SDO)的报文ID分类 (7)5. 对象字典OD(Object dictionary) (9)5.1对象字典概述 (10)5.2通讯对象子协议区(Communication profile area) (10)5.3通用通讯对象(General communication objects) (10)5.4制造商特定子协议(Manufacturer-specific Profile) (11)5.5标准化设备子协议(Standardized profile area) (12)5.6对象字典和EDS文件实例 (12)6. 网络管理NMT(Network management) 与CANopen主站 (16)6.1NMT节点状态 (16)6.2NMT节点上线报文 (17)6.3NMT节点状态与心跳报文 (18)6.4NMT节点守护 (18)6.5NMT节点状态切换命令 (19)6.6CANopen主站设备 (20)7. 过程数据对象PDO(Process data object) (22)7.1PDO的CAN-ID定义 (22)7.2PDO的传输形式 (23)7.3PDO的通信参数 (24)7.4PDO的映射参数 (24)8. 服务数据对象SDO(Service data object) (26)8.1通讯原则(communication principle) (26)8.2快速SDO协议(Expedited SDO protocol) (27)8.3普通SDO协议(Normal SDO protocol) (27)9. 特殊协议(Special protocols) (30)9.1同步协议(Sync protocol) (30)9.2时间戳协议(Time-stamp protocol) (31)9.3紧急报文协议(Emergency protocol) (33)10. 免责声明 (35)1. 前言本教程适用于CIA CANopen协议DS301又名CIA301标准。

CANopen教程全解 共36页

CANopen教程全解 共36页
①事件触发模式(一个对象特定事件出现而触发) ②时间触发模式(如:一规定时间内无事件发生) ③远程请求触发(接受到任何其他设备发出的一个远程
请求)
(2)SDO服务数据对象
功能:主要用于主节点对从节点的参数配置。 用来在设备之间传输大的低优先级数据,典型 的是来配置CANopen网络上的设备。
通讯方式:客户机/服务器 它用于访问对象字典的入口。对CANopen对象
表示命令会被广播至所有从节点 任何NMT从设备在上电时都必须主动报告自己上电信
息,便于NMT主设备进行管理。
(4)特殊功能对象
①同步对象 ②紧急对象 ③时间标记对象
①同步对象
功能:由同步生产者向网络进行周期性 的广播,该对象提供基本的网络时钟
通信方式:生产者/消费者模式
②紧急对象
CANopen网络通信和管理是通过不同的通信对象来完 成的。
CANopen协议定义了四种通信对象,分别为过程数据 对象PDO(Process Data Object)、服务数据对象 SDO(Service Data Object)、网络管理对象 NMT(NetWork Management Object)、预定义报文或 者特殊功能对象。
二、通信方式
根据通信对象功能,通信关系可分为以下3类: 主/从关系可以对应NMT SYNC 节点保护等 一
对多,一唯一,可以有应答,也可以没有。 客户机/服务器可以对应SDO 一对一,带应答。 生产者/消费者可以对应PDO Heartbeat等,一
对多,一不唯一,没有应答。
二、通信方式
对于开发主节点和从节点设备来说有着较大的区别, 主节点主要负责整个网络的管理并且能加载所有节点
的EDS(Electronic Data Sheet)文件,例如主节点可

F1与Kinco伺服CANopen异步通讯使用说明

F1与Kinco伺服CANopen异步通讯使用说明

F1与KINCO伺服CANopen使用说明准备工作:●准备好PC与PLC通讯的标准以太网线。

●焊好PLC与伺服间的CANopen通讯电缆,通讯电缆务必使用屏蔽双绞线,2-7脚双绞在一起。

首末一定要加120Ω的终端电阻,F1端自带终端电阻可以不焊。

以下做法供参考:●用KincoServo上位机软件配置好伺服参数:(1)去掉伺服驱动器数字输入口功能,否则通讯无法控制伺服控制字、工作模式等对象。

(2)设置好伺服ID号。

整个CANopen网络里面不允许有重复的ID,点击“驱动器/控制面板/F005”查看/修改驱动器ID。

部分系列驱动器ID采用外部拨码开关设置,请注意查看手册说明。

(3)设置好伺服CANopen通讯波特率。

点击“驱动器/ECAN/其他”菜单,设置伺服驱动器CANopen通讯波特率,如下图所示。

完成准备工作我们就可以开始PLC编程工作了。

CANopen通讯要点:通讯电缆是否正确,终端电阻是否正确,站号是否正确,波特率是否正确,PDO配置是否正确,PDO传输类型是否正确。

1.打开软件新建工程,选择F1,点击OK。

2.根据自己的喜好选择PLC主程序的编程语言,然后点击OK。

3.开始进行CANopen通讯配置前,我们先需要添加伺服从站的EDS文件到Codesys里面来。

点击主菜单栏里的“Extras/add configuration file”选项。

找Kinco伺服的EDS文件,选中文件点击OK。

4.添加CANopen从站,设置通讯参数。

(1)F1有两路CANopen主站,选中其中一个口右键添加伺服从站。

(2)从站添加成功后,设置主站通讯参数。

下图中PLC主站波特率500K,波特率最高可设成1M,主从站波特率要一样;主站Node_ID可以设成0,不能和伺服从站ID重复。

(3)设置伺服从站的通讯参数。

下图中伺服从站的Node_ID设为1,从站Node_ID设置范围1-127,伺服驱动器ID要和这里设置的值一样为1;多个从站时ID要设置的都不一样。

CAN-open程序解读

CAN-open程序解读

刘怡师兄CANopen协议从节点实现程序简单说明作者邱家齐CAN从节点初始化:(从节点决定了其扮演的角色,也决定了其初始化,主从节点是不同的)void CAN0_Init (void)功能:11位ID,设置速率500K,接收发送对应的ID/message object/数据长度发送与接收的配置只有3个寄存器不同CAN0IF1MC/ CAN0IF1A2/ CAN0IF1CR接收SYNC设置11-bit identifier: 0x0080 (低11位00010000000)接收NMT 0x0000接收RPDO1 0x0200+ NodeId=0x0202(此从节点NodeId=0x02一个从节点可有多个RPDO)接收rSDO 0x0600 + NodeId=0x0602接收NODE GUARD 0x0702发送EMCY message 0x0082发送TPDO1 0x0182发送tSDO 0x0582 (从节点需要tSDO发送应答)发送NODE Status 0x0702CAN发送函数canSend(Message * m)m中包括了cob_id/datas[],根据cob_id找到对应的message object,配置好CAN0IF2CM/ CAN0IF2CR就好了数字可编程电位器输出函数OutPut(U8 VC)100 tap 数字可编程电位器DPP,UD/INC/CS控制信号根据VC与Pre_VC(前一次输出)的差值,控制UD,INC使输出VC设置从节点初始态setState(&ObjDict_Data, Initialisation)从节点状态改变主要是由主节点(上位机)发NMT报文,从节点收到NMT报文,则调用proceedNMTstateChange(d,m)进行状态转换从节点之后进入while()大循环,用到switch case,根据从节点当前状态nodeState,做相应处理,不断查询nodeState其中_initialisation()和_preOperational()为空函数,因为我们在前面已经做好了初始化工作关键是主节点控制从节点使其进入Operational后,调用AD()采样函数,如果工作电压电流超过阈值(2000V/500mA),调用canSend(&m)发送报警给主节点(上位机),调用OutPut(0),然后关电源,如果输出正常,根据控制命令(自动or手动)与当前状态(自动or手动)进行相应处理,调用OutPut(Write_Analogue_Output_8_Bit[0])输出主节点(上位机)设定的值,很明显Write_Outputs_8_Bit[]与Write_Analogue_Output_8_Bit[]是主节点发给从节点的指令与数据(主节点可以通过tSDO与tPDO),从节点可以通过tPDO将AD采样数据Read_Analogue_Input_16_Bit[]实时传输给主节点(只能是tPDO)再来看看CAN中断服务函数INTERRUPT (CAN0_ISR, INTERRUPT_CAN0)接收到报文m(包括datas[]/cob_id/ len/ rtr),然后调用canDispatch( &ObjDict_Data, &m)处理接收报文,下面分析canDispatch()函数canDispatch()根据cob_id的功能码进行跳转,有4个分支proceedSYNC(d):SYNC同步报文是主节点发的,SYNC主要服务于tPDO(tPDO有6种传输模式,其中3种需要SYNC信号)如果从节点处于operational状态(此态允许tPDO),则在proceedSYNC(d)里调用A_sendPDOevent(d, 1 /*isSyncEvent*/ )该函数一次处理所有tPDO(因为return是在while之后),首先从OD中取出tPDO传输类型n(0—255(241—251保留)),第一个if 0 <n<241 且++d->PDO_status[pdoNum].transmit_type_parameter==n则Reset count of SYNC,调用buildPDO (d, pdoNum, &pdo),然后把pdo存起来d->PDO_status[pdoNum].last_message = pdo,并调用canSend (&pdo)这里其实有对SYNC进行计数,收到n个SYNC报文,才发送tPDO第二个else if n== TRANS_RTR_SYNC调用buildPDO (d, pdoNum, &d->PDO_status[pdoNum].last_message)如果建立成功,则将其d->PDO_status[pdoNum].transmit_type_parameter设置为PDO_RTR_SYNC_READY,这样从节点接收到主节点发的PDO请求后,调用proceedPDO(d,m)就会发送tPDO,如果建立没有成功,则状态设置~PDO_RTR_SYNC_READY第三个else if n==0 ||(( n==254 ||255)&&(n!= PDO_INHIBITED))调用buildPDO (d, pdoNum, &pdo),如果new and old PDO相同,处理下一个tPDO,如果不相同,如果EventTimerDuration与InhibitTimerDuration不为零,则等待时间到,然后调用canSend (&pdo)第四个elsetPDO与SYNC无关,处理下一个tPDOproceedPDO(d,m)该函数处理接收rPDO首先判断m报文是否是请求报文(远程帧)如果不是请求报文(数据帧),在从节点的接收rPDO中查找,如果其pwCobId与m报文的cob_id相同,就找到了numPdo,也可以得到pMappingCount,(下图中为2)从子索引1开始,得到Size=8,调用CopyBits ()将m->datas[]写入tmp[],然后调用setODentry() 将tmp[]中数据写入对应对象的子索引中,然后处理子索引2……如果是请求报文(远程帧),在从节点的发送tPDO中查找,如果其pwCobId与m报文的cob_id 相同,就找到了numPdo,然后得到其传输类型pTransmissionType第一个if pTransmissionType ==TRANS_RTR,则buildPDO (d, numPdo, &pdo),然后canSend (&pdo)第二个else if pTransmissionType == TRANS_RTR_SYNC,则判断d->PDO_status[numPdo]. transmit_type_parameter是否PDO_RTR_SYNC_READY,如果ready,调用canSend (&d->PDO_status[numPdo].last_message)如果没有ready,发送current data(即buildPDO (d, numPdo, &pdo),canSend (&pdo))第三个else if 传输类型TRANS_EVENT_PROFILE|| TRANS_EVENT_SPECIFIC,则调用PDOEventTimerAlarm (d, numPdo) (还需要仔细阅读)第四个else 返回0xFF该函数首先判断本节点是SDO_SERVER还是SDO_CLIENT,本例中为从节点,故为SDO_SERVER,(程序中考虑了多个SDO的情况,但是通常只有1个rSDO和1个tSDO,主从节点都如此)查找方法与上面提到的方法类似,找到后判断m报文数据长度是否为8,不为8则认为出错,然后程序根据m->datas[0]的高3位(高3位决定SDO传送类型(见协议))进行跳转,采用的是switch casecase 1:启动域下载(站在主节点的角度,是主节点请求写从节点的对象字典)从m中提取index与subIndex,然后调用getSDOlineOnUse()查看是否SDO transfert已经开始过了(即不是SDO_RESET),如果没有,那很好,调用getSDOfreeLine(d, whoami, &line)找1个空闲线程,然后initSDOline(d, line, nodeId, index, subIndex, SDO_DOWNLOAD_IN_PROGRESS),如果SDO加速传送(最多传送4字节)调用SDOtoLine()将m中数据写入d->transfers[line]中(写入线程中),然后调用SDOlineToObjdict(d, line)将数据写入对象字典中index和subIndex对应的对象中,之后释放该线程如果SDO分段传送如果指明了数据长度(长度对应上图中4字节计数器),调用setSDOlineRestBytes(d, nodeId, nbBytes)然后从节点调用sendSDO(d, whoami, sdo)给出SDO应答case 0:启动域分段下载(分段下载的第一帧已经在case 1中处理了)从节点是SDO_SERVER,调用err = getSDOlineOnUse( d, nodeId, whoami, &line ),因为case 0中SDO分段传送调用过initSDOline(d, line, nodeId, index, subIndex, SDO_DOWNLOAD_IN_PROGRESS),状态变为SDO_DOWNLOAD_IN_PROGRESS了,所以err=0,从transfers[line]中取出index和subindex,之后进行toggle测试,m中数据第1字节是命令字节,包括此帧数据长度,调用SDOtoLine(d, line, nbBytes, (*m).datas + 1)将数据写入线程中,然后为SDO应答做好准备,调用sendSDO(d, whoami, sdo)给出应答,如果是最后的segment,调用SDOlineToObjdict(d, line),将数据写入对象字典中index和subIndex对应的对象中,释放该线程,如果不是最后的segment,返回case 2:启动域上传(主节点读从节点对象字典请求)从节点从m中提取index和subindex,调用getSDOlineOnUse()查看是否SDO transfert已经开始过了(即不是SDO_RESET),如果No line on use那很好,找一个空闲的线程line,然后initSDOline(d, line, nodeId, index, subIndex, SDO_UPLOAD_IN_PROGRESS),objdictToSDOline(d, line),getSDOlineRestBytes(),如果要传送的nbBytes > 4,则进行分段传送,准备应答sdo,sdo数据的后4个字节代表nbBytes,然后调用sendSDO(d, whoami, sdo)给出应答,如果nbBytes<= 4,就不用分段传送了,是加速传送,对于加速传送,这里还要调用lineToSDO(d, line, nbBytes, sdo.body.datas + 4),将line 中数据存入sdo.body.datas[]中,sdo数据的后4个字节就是主节点需要的数据,调用sendSDO(d, whoami, sdo)应答,之后释放该SDO线程case 3:域分段上传首先调用getSDOlineOnUse( d, nodeId, whoami, &line )判断SDO传送是否已经开始过(即是否收到启动域上传报文且传送模式为分段传送(nbBytes > 4)),如果是,则从d->transfers[line]提取index和sub index,(case 2中初始化过的),进行Toggle test,调用getSDOlineRestBytes(d, line, &nbBytes)得到还需传送的nbBytes,如果nbBytes > 7,则不是最后的segment,先调用lineToSDO(d, line, 7, sdo.body.datas + 1),然后调用sendSDO(d, whoami, sdo)作为应答如果nbBytes <= 7,则是最后的segment,调用lineToSDO(d, line, nbBytes, sdo.body.datas + 1),然后调用sendSDO(d, whoami, sdo)作为应答,之后调用resetSDOline(d, line)释放该线程case 4:域传送终止故从最后4字节提取终止原因得到abortCode,调用getSDOlineOnUse( d, nodeId, whoami, &line )查找那个线程line被要求终止,然后释放该线程line,default:未定义传送模式,return 0xFFproceedNMTstateChange(d,m)如果d->nodeState目前处于Pre_operational or Operational or Stopped则if( ( (*m).datas[1] == 0 ) || ( (*m).datas[1] == *d->bDeviceNodeId ) ) 判断该NMT报文是否是发给自己的(从节点),如果datas[1]==0,该NMT是发给所以从节点的,如果datas[1] == *d->bDeviceNodeId,当然是发给自己的m报文中第0字节datas[0]是主节点发的状态转换命令,用switch case进行跳转调用setState(d,newstate)设置从节点状态为newstate主要函数列表U8 canSend(Message * m)void OutPut(U8 VC)INTERRUPT (CAN0_ISR, INTERRUPT_CAN0)void canDispatch(CO_Data* d, Message *m)UNS8 proceedSYNC(CO_Data* d)proceedPDO (CO_Data * d, Message * m)UNS8 proceedSDO (CO_Data* d, Message *m)void proceedNMTstateChange(CO_Data* d, Message *m)UNS8 setState(CO_Data* d, e_nodeState newState)PDO相关U8 proceedPDO (CO_Data * d, Message * m)U8 A_sendPDOevent (CO_Data * d, U8 isSyncEvent) 由proceedSYNC(CO_Data* d)调用U8 buildPDO (CO_Data * d, U8 numPdo, Message * pdo)U32 _getODentry(CO_Data* d, U16 wIndex,U8 bSubindex,void * pDestData, U32 * pExpectedSize,U8 * pDataType,U8 checkAccess,U8 endianize)U32 _setODentry( CO_Data* d,U16 wIndex,U8 bSubindex, void * pSourceData,U32 * pExpectedSize,U8 checkAccess,U8 endianize)TIMER_HANDLE DelAlarm(TIMER_HANDLE handle)Void PDOEventTimerAlarm (CO_Data * d, U32 pdoNum)TIMER_HANDLE SetAlarm(CO_Data* d, UNS32 id, TimerCallback_t callback, TIMEVAL value, TIMEVAL period)SDO相关UNS8 proceedSDO (CO_Data* d, Message *m)UNS8 getSDOlineOnUse (CO_Data* d, UNS8 nodeId, UNS8 whoami, UNS8 *line)UNS8 getSDOfreeLine ( CO_Data* d, UNS8 whoami, UNS8 *line )UNS8 initSDOline (CO_Data* d, UNS8 line, UNS8 nodeId, UNS16 index, UNS8 subIndex, UNS8 state)UNS8 SDOtoLine (CO_Data* d, UNS8 line, UNS32 nbBytes, UNS8* datas)UNS8 lineToSDO (CO_Data* d, UNS8 line, UNS32 nbBytes, UNS8* datas)UNS32 objdictToSDOline (CO_Data* d, UNS8 line)UNS32 SDOlineToObjdict (CO_Data* d, UNS8 line)UNS8 sendSDO (CO_Data* d, UNS8 whoami, s_SDO sdo)。

EPEC控制器CANOPEN使用说明

EPEC控制器CANOPEN使用说明

EPEC控制器CANOPEN使用说明本CANOPEN采用的标准的CAN数据格式,11位的ID,有效数据长8个字节,8个字节。

CAN ID,DLC,D0,D1,D2,D3,D4,D5,D6,D7我们将这样一组CANOPEN数据叫做一路PDO。

利用CANOPEN组成的网络是一个主从网络,将控制器节点号最小的控制器设置为MASTER,其他的设置为SLA VE,因为控制器的节点号越小,其优先级越高。

如果一个控制器不虚拟节点往总线上发送数据,那么初始化结束后,本控制器往总线上发送4路TPDO:(CANOPEN_START_INIT 、CANOPEN_END_INIT)第一路PDO数据的ID为0X180+控制器的节点号第二路PDO数据的ID为0X280+控制器的节点号第三路PDO数据的ID为0X380+控制器的节点号第四路PDO数据的ID为0X480+控制器的节点号如果是再虚拟一个节点号发送数据,则发送的4路TPDO为:(CANOPEN_ADD_TRANSMIT_NODE_ID)第一路PDO数据的ID为0X180+虚拟控制器的节点号第二路PDO数据的ID为0X280+虚拟控制器的节点号第三路PDO数据的ID为0X380+虚拟控制器的节点号第四路PDO数据的ID为0X480+虚拟控制器的节点号如果是再虚拟一个节点号发送莫一路数据,则发送的PDO为:(CANOPEN_ADD_TRANSMIT_PDO)如果是虚拟第一路PDO数据的ID为0X180+虚拟控制器的节点号如果是虚拟第二路PDO数据的ID为0X280+虚拟控制器的节点号如果是虚拟第三路PDO数据的ID为0X380+虚拟控制器的节点号如果是虚拟第四路PDO数据的ID为0X480+虚拟控制器的节点号假设现在有三个控制器通过CANOPEN总线相连:控制器4 控制器7 控制器104号控制器CANOPEN初始化程序为:4号控制器发送4路PDO数据,发送的数据分别为第1路PDO,ID为0X184,发送%QW200~%QW203地址里的数据第2路PDO,ID为0X284,发送%QW204~%QW207地址里的数据第3路PDO,ID为0X384,发送%QW208~%QW211地址里的数据第4路PDO,ID为0X484,发送%QW212~%QW215地址里的数据4号控制器接收7号控制器发送的4路PDO数据和10号控制器发送的4路PDO数据%IW200~%IW203地址保存7号控制器发送的第1路PDO(ID=0X187)%IW204~%IW207地址保存7号控制器发送的第2路PDO(ID=0X287)%IW208~%IW211地址保存7号控制器发送的第3路PDO(ID=0X387)%IW212~%IW215地址保存7号控制器发送的第4路PDO(ID=0X487)%IW216~%IW219地址保存10号控制器发送的第1路PDO(ID=0X18A)%IW220~%IW223地址保存10号控制器发送的第2路PDO(ID=0X28A)%IW224~%IW227地址保存10号控制器发送的第3路PDO(ID=0X38A)%IW228~%IW231地址保存10号控制器发送的第4路PDO(ID=0X48A)7号控制器CANOPEN初始化程序为:7号控制器发送4路PDO数据,发送的数据分别为第1路PDO,ID为0X187,发送%QW200~%QW203地址里的数据第2路PDO,ID为0X287,发送%QW204~%QW207地址里的数据第3路PDO,ID为0X387,发送%QW208~%QW211地址里的数据第4路PDO,ID为0X487,发送%QW212~%QW215地址里的数据7号控制器接收4号控制器发送的4路PDO数据和10号控制器发送的4路PDO数据%IW200~%IW203地址保存4号控制器发送的第1路PDO(ID=0X184)%IW204~%IW207地址保存4号控制器发送的第2路PDO(ID=0X284)%IW208~%IW211地址保存4号控制器发送的第3路PDO(ID=0X384)%IW212~%IW215地址保存4号控制器发送的第4路PDO(ID=0X484)%IW216~%IW219地址保存10号控制器发送的第1路PDO(ID=0X18A)%IW220~%IW223地址保存10号控制器发送的第2路PDO(ID=0X28A)%IW224~%IW227地址保存10号控制器发送的第3路PDO(ID=0X38A)%IW228~%IW231地址保存10号控制器发送的第4路PDO(ID=0X48A)10号控制器CANOPEN初始化程序为:10号控制器发送4路PDO数据,发送的数据分别为第1路PDO,ID为0X18A,发送%QW200~%QW203地址里的数据第2路PDO,ID为0X28A,发送%QW204~%QW207地址里的数据第3路PDO,ID为0X38A,发送%QW208~%QW211地址里的数据第4路PDO,ID为0X48A,发送%QW212~%QW215地址里的数据10号控制器接收4号控制器发送的4路PDO数据和7号控制器发送的4路PDO数据%IW200~%IW203地址保存4号控制器发送的第1路PDO(ID=0X184)%IW204~%IW207地址保存4号控制器发送的第2路PDO(ID=0X284)%IW208~%IW211地址保存4号控制器发送的第3路PDO(ID=0X384)%IW212~%IW215地址保存4号控制器发送的第4路PDO(ID=0X484)%IW216~%IW219地址保存7号控制器发送的第1路PDO(ID=0X187)%IW220~%IW223地址保存7号控制器发送的第2路PDO(ID=0X287)%IW224~%IW227地址保存7号控制器发送的第3路PDO(ID=0X387)%IW228~%IW231地址保存7号控制器发送的第4路PDO(ID=0X487)如果数据没有改变,则控制器每隔300毫秒发送一次数据,如果数据改变了,则控制器会马上将改变的数据发送到总线上。

canopen华茂教程

canopen华茂教程

华茂技术部CANopen实现1.简介从OSI网络模型的角度来看,现场总线网络一般只实现了物理层、数据链路层和应用层,CAN现场总线仅仅定义了物理层和数据链路层,实际设计中,这两层完全有硬件来实现。

但是CAN没有规定应用层协议,无法定义CAN报文中11/29位标示符和8字节数据的使用。

因此需要一个开放的、标准化的高层协议,使得协议支持各种CAN厂商设备。

CANopen是基于CAN的一个应用广泛的应用层协议,它提供了网络管理服务和报文传送协议,在保证网络节点互用性的同时允许节点的功能随意扩展。

下面这张图可以简要的描述CAN标准和CANopen协议之间的关系:CAN和CANopen在OSI网络模型中的位置2.CANopen通讯CANopen的核心概念是设备对象字典(OD:Object Dictionary),在其它现场总线(Profibus,Interbus-S)系统中也使用这种设备描述形式。

下面先介绍对象字典(OD:Object Dictionary),然后再介绍CANopen通讯机制。

2.1对象字典OD对象字典包含了描述一个设备和它的网络行为的所有参数。

对象字典是一个有序的对象组,每个对象采用一个16位的索引值来寻址,为了允许访问数据结构中的单个元素,还定义了一个8位的子索引,下图为对象字典的索引表:CANopen协议定义的通用对象字典结构表在表中可以看出,索引值从0x0000至0xFFFF,其中0x0000-0x0FFF区域和0x2000-0x5FFF区域是定义好的区域,不能用来开发,可以用来建立设备对象字典的区域为通讯子协议区域和标准的设备子协议区域,例如用于描述运动控制的设备子协议DS402中定义了索引项0x6072为max_torque, 索引项0x6073为max_current, 索引项0x60F8为max_slippage,等等。

CANopen网络中每个节点都有一个对象字典,用来描述当前节点的设备信息、网络行为和参数,在主从网络结构中,主站通过从站的对象字典来查询修改从站的参数或者对从站的网络行为进行指示。

canopen 字典 使用方法

canopen 字典 使用方法

canopen 字典使用方法(原创实用版5篇)《canopen 字典使用方法》篇1CanOpen 字典是一种用于描述CanOpen 设备及其属性的数据结构。

以下是一个CanOpen 字典的使用示例:```pythonimport can# 创建一个CanOpen 字典canopen_dict = {"device_id": "0x1234","mode": "OPMODE1","master_clock": 10000,"driver_reset": 1,"enable": 1,"select": "slot 0","secondary_reset": 0,"power_supply": "6V","output_status": 0,"load_status": 0,"command": "TEST_PATTERN","command_value": 0x5A,"master_clear": 0,"position": 0,"limit": [0, 0, 0],"home": [0, 0, 0],"target": [0, 0, 0],"run_state": 0,"tacho_count": 0,"temperature": -45,"velocity": 0,"actual_velocity": 0,"distance": 0,"actual_distance": 0,}# 发送CanOpen 数据帧data = can.Message(canopen_dict)data.arbitration_id = 0x55data.dlc = len(canopen_dict) - 1data.data = canopen_dict.values()send_can(data)```在上面的示例中,我们首先创建了一个名为`canopen_dict` 的CanOpen 字典,其中包含了设备的属性信息。

(完整word)CANopen协议讲解

(完整word)CANopen协议讲解

根据DS301的内容进行介绍1、CAN总线CAN标准报文2、CANopen应用层协议CANopen 协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。

同时,CANopen 完全基于CAN 标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。

一个标准的CANopen 节点(下图),在数据链路层之上,添加了应用层。

该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。

一个标准的CANopen 节点CANopen 应用层协议细化了CAN 总线协议中关于标识符的定义。

定义标准报文的11 比特标识符中高4 比特为功能码,后7 比特为节点号,重命名为通讯对象标识符(COB-ID)。

功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:网络命令报文(NMT)同步报文(SYNC)紧急报文(EMERGENCY)时间戳(TIME)过程数据对象(PDO)服务数据对象(SDO)节点状态报文(NMT Err Control)7 位的节点号则表明CANopen 网络最多可支持127个节点共存(0 号节点为主站)。

下表给出了各报文的COB-ID 范围。

NMT 命令为最高优先级报文,由CANopen 主站发出,用以更改从节点的运行状态。

SYNC 报文定期由CANopen 主站发出,所有的同步PDO 根据SYNC报文发送。

EMERGENCY报文由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。

TIME 报文由CANopen 主站发出,用于同步所有从站的内部时钟。

PDO 分为4 对发送和接收PDO,每一个节点默认拥有4对发送PDO 和接收PDO,用于过程数据的传递。

SDO 分为发送SDO 和接收SDO,用于读写对象字典。

MT Error Control报文由从节点发出,用以监测从节点的运行状态。

状态机CANopen 的每一个节点都维护了一个状态机。

CANopen教程全解

CANopen教程全解

/cgibin/forum/topic.cgi?forum=2&topic=767&show=250
(3楼) 总结一下: 主结点定时每隔2毫秒访问一个结点,假如:主结点上挂接 有4个结点,分别为DI、DO、AI、AO,则再次访问一个结点需要 8毫秒的时间。 (2)、AO 主结点定时每隔8毫秒给AO结点发送输出数据 (3)、DO 主结点定时每隔8毫秒给DO结点发送输出数据 (4)、DI 主结点定时每隔8毫秒读取DI结点的数据 同时DI结点自身发生变化时,会定时每隔1毫秒给主结点 “主动”的发送数据。 (4楼) 你没有利用到CAN总线的冲突检测机制,主节点定时查询是 可以广播的,每个从节点收到查询广播就可以上传数据,而不会 引起冲突,这个和485是有区别的。你这种做法只是把CAN当成了 高速485. DI的1ms主动发送数据也是不科学的,除非是高速DI,一般 PLC的DI都有1ms的防抖滤波。
(1)PDO过程数据对象
功能:用来传输8字节或更少数据(数据内容已预先定 义)用于实时传输数据 通讯方式:生产者/消费者 3种消息触发模式: ①事件触发模式(一个对象特定事件出现而触发) ②时间触发模式(如:一规定时间内无事件发生) ③远程请求触发(接受到任何其他设备发出的一个远程 请求)
③时间标记对象

通信方式:生产者/消费者模式 功能:为应用设备提供公共的时间帧参 考。
三、主/从节点通信机制




主节点与从节之间的主要区别在于主节点具有管理报 文(NMT)以及服务数据客户端(client)等功能,有了这 些功能,主节点就可以管理CANopen网络。 对于开发主节点和从节点设备来说有着较大的区别, 主节点主要负责整个网络的管理并且能加载所有节点 的EDS(Electronic Data Sheet)文件,例如主节点可 以管理任意一个从节点进入特定的工作状态、配置从 节点的参数、完成与从节点的数据交换等功能。 从网络结构来说从节点属于被动设备,受主站管理, 从节点只需要支持PDO、SDO服务器、预定义或特殊 功能对象。 关于COB-ID,不论是主发给从,还是从发给主的消息, COB-ID都是从站的NODE_ID号

Kinco伺服CANOPEN通讯使用说明(一)

Kinco伺服CANOPEN通讯使用说明(一)

Kinco 伺服CANopen通讯使用说明1.介绍支持CANopen通讯的Kinco系列伺服驱动器,允许通过CANopen总线对驱动器内部参数进行设置并驱动电机的转动,kinco伺服的所有工作模式都支持通过CANopen操作。

2.属性Kinco伺服在CANopen总线网络(参考“CIA Draft Standard 301”)中做为从站使用,设计符合“CANopen Profile for Drivers and Motion Control”(参考“CiA Draft Standard Proposal 402”)。

其它的功能通过使用“制造商指定数据”区实现。

对设备的操作基于所称的“Object Dictionary”。

所有的参数、参数值和功能都是通过index和sub-index组成的地址来访问和存取。

3.硬件由于该接口的GND和Kinco伺服的housing之间电气隔离,该接口必须外部提供电源,在使用时需要在针脚9和6之间提供电源,根据CAN标准定义,在总线的两个末端都必须提供终端电阻(120Ω)。

常见控制器和Kinco伺服之间的硬件连接:4.波特率Kinco伺服的CANopen通讯波特率由2F8100和2F8200对象设置,出厂时波特率预设为5.数据协议CANopen总线提供两种重要的数据交互格式。

1种是Service Data Objects, SDO, 数据交互按照DS301标准执行。

1种是Process Data Objects, PDOs, 数据交互不执行该标准。

除了PDO和SDO这两种数据传输协议外,还有一些其它的信息被定义用于更多的应用5.1 标识定义所有信息(通讯对象,COB)通过标识(COB-ID)后由主站传递到从站,然后返回。

具有最低COB-ID的信息有着最高的总线优先级。

下表列出了一些重要的COB-ID内容,这些ID 配合节点地址使用。

在对象2F80,00(Node_Offset)中值被加到节点地址值(伺服驱动器面板商的DIP开关)中,做为设备的节点地址。

CANopen的程序员手册2

CANopen的程序员手册2

第二章7:您当前的位置,速度和转矩模式下操作本章介绍了操作的放大器配置文件的位置,轮廓速度,轮廓转矩模式。

内容包括:7.1:您当前的位置模式操作 (164)7.2:速度曲线模式操作 (172)7.3:个人转矩模式操作 (173)7.4:个人模式对象 (174)7.1:您当前的位置模式操作点至点的运动曲线在轮廓位置模式中,一个放大器接收从该轨迹发生器的设定点来定义一个目标位置,并在指定的速度和加速度的轴移动到该位置。

这被称为一个点至点移动。

放大器进行配置文件的位置移动配置文件中的位置模式(操作模式[索引0x6060,第59页] = 1)。

过冲在点至点的移动,被称为过冲的加速度变化率。

在某些应用中,高速率的过冲可能会导致过度的机械磨损或材料损坏。

梯形和S形曲线的运动曲线为了支持不同级别的混蛋性,轮廓位置模式支持两种运动模式:梯形的个人主页上,有无限的混蛋,冲击有限的S-曲线(正弦)资料。

在梯形配置,过冲是无限的档案(开始的移动,当达到目标速度时,开始减速时,并在端部的举动)在角部。

S-曲线分析限制猛拉或“平滑”的议案。

需要注意的是S型曲线移动不支持独立的减速率。

相反,被施加的加速度率的加速和减速的举动。

此外,梯形和配置文件的位置特殊速度模式下的配置文件都支持改变当前移动的参数,而S型曲线不。

在处理一系列的点至点的移动,对这种差异进行了讨论。

165。

运动曲线类型的对象(索引0x6086,第178页)控制使用的是哪种类型的配置文件。

选择梯形或S曲线的指导,请阅读以下章节,然后梯形与S曲线的一些设计注意事项,P。

171。

(科普利控制,CANopen总线放大器还支持配置文件位置的特殊速度模式。

此配置文件类型类似于梯形的轮廓,但没有指定目标位置。

运动服从加速,减速和速度的限制,但继续移动,仿佛目标位置是无限的。

)相对与绝对运动在相对的移动目标位置被添加到的瞬时指令位置,其结果是在移动目的地。

以绝对移动,目标位置的偏移量从起始位置处理一系列的点至点移动一系列的点至点的移动处理的方法有两种:•作为一系列离散的配置文件(支持梯形和S型曲线移动)•作为一个连续的轮廓(梯形剖面支持移动)按照这两种方法的一般描述。

M340与ATV71的CANopen通信(CANopen通信给定速度、数字量输出控制启停)_快速操作指南

M340与ATV71的CANopen通信(CANopen通信给定速度、数字量输出控制启停)_快速操作指南

4,禁止电机缺相故障
图形显示终端的设置如下:
RDY Term
+0.0Hz
1 变频器菜单
1.5 输入/输出设置
1.6 命令
1.7 应用功能
1.8 故障管理 1.9 通讯
0.0A
Code
<<
>>
QUICK
按 ENT 进 入,并旋转导 航键选择 电机缺相
RDY HMI
+0.0Hz
1.8 故障管理 自动重起动
CAn
2
CTL-CHCF
Sep
3 4
CTL-Cd1 Flt-OPL
控制方式
tEr No
5
IO-rrS
LI2
6
FLt-rSF
LI3
7 8
CON-AdC0 CON-bdC0
通信参数
3 500
变频器上电后,即可根据以下的 8 个图快速完成相关参数的设置:
集成显示终端的设置如下:
1,配置给定 1 为 can
10
施耐德技术服务中心 TSC
集成显示终端的设置如下:
8,CANopen 通信速率设为 500bits/s
图形显示终端的设置如下:
RDY HMI
+0.0Hz
1 变频器菜单
1.5 输入/输出设置
1.6 命令
0.0A
1.7 应用功能 1.8 故障管理 1.9 通信
Code
<<
>>
QUICK
RDY HMI
2.《完全通信指导》---Know Why, 满足了客户“系统学习通信知识”的需求。
知识全---不仅给出了详细的调试步骤和详细解释,还使客户在完成通信的同时系统学习相关 的产品和通信知识

CANopen教程全解

CANopen教程全解

七、CANopen与DeviceNet区别
1.传输距离 CANopen网络可实现远距离传输 (≤10 km),工作速率可调(1 Mb/s≥ 通讯 速率≥ 5 kb/s)。 DeviceNet最大传输距离为500 m。 因此,在实际应用中,要考虑到传 输距离的限制而选择总线协议。
七、CANopen与DeviceNet区别
五、仲裁机制
(2)网络中的节点检测到硬件或软件的错误可 将其通过紧急对象通知其它节点。内部的任何 错误都将被编码为定义好的错误代码传送给其 他节点,如果错误全部被纠正,则节点将发送 一个带有代码“无错误”的报文。
六、差分传输

CAN总线采用差分信号传输,通常情况下只需要两根信 号线(CAN-H和CAN-L)就可以进行正常的通信。在干 扰比较强的场合,还需要用到屏蔽地即CAN-G(主要功 能是屏蔽干扰信号),CAN协议推荐用户使用屏蔽双绞 线作为CAN总线的传输线。在隐性状态下,CAN-H与 CAN-L的输入差分电压为0 V(最大不超过0.5 V),共模输 入电压为2.5 V。在显性状态下,CAN-H与CAN-L的输入 差分电压为2 V(最小不小于0.9 V),如图 1所示。
(1)、AI 主结点定时每隔8毫秒读取AI结点的数据
四、状态机

(1)一个从节点可以实现一个NMT状态机,NMT状态 机如下图:
四、状态机



该状态机将在上电复位后自动运行,进入预运行状态, 通过SDO配置参数,但不可以实现PDO通信。 NMT主节点可以控制所有的从节点进入“运行状态”。 在“运行状态”PDO的通信才被允许。 如果一个节点被转换到“停止状态”,那么它将不能 实现PDO和SDO通信,但可以执行NMT命令。
(2楼)1.要结合网络节点数据吞吐量来看,DI、AI变化 发送(触发)方式实时性好,而且比主节点定时查询 方式占用网络资源少,缺点是万一触发发送失败,没 有第二次机会让主节点知道变化,只能等到下一次变 化,而且触发发送还有个变化多大幅度才触发发送的 问题,幅度小了可能是场数据灾难,大了可能灵敏度 有下降。定时申请数据的查询方式优点就是触发的缺 点,缺点也就是触发的优点。两种方式结合着来,一 般AI采用查询方式,DI就要综合考虑了。 2.AO和DO一般采用触发方式

CANOPEN协议详解

CANOPEN协议详解

一、CAN-BUS介绍1.CAN的基本概念、特点CAN 是 Controller Area Network的缩写(以下称为 CAN),是 ISO*1国际标准化的串行通信协议。

CAN 协议如表 3 所示涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层。

CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体有哪些定义如图所示。

. ISO/OSI 基本参照模型【注】*1 OSI:Open Systems Interconnection (开放式系统间互联)CAN的特点CAN 协议具有以下特点。

(1) 多主控制在总线空闲时,所有的单元都可开始发送消息(多主控制)。

最先访问总线的单元可获得发送权。

(2) 消息的发送在 CAN 协议中,所有的消息都以固定的格式发送。

总线空闲时,所有与总线相连的单元都可以开始发送新消息。

两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。

ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。

两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。

仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

(3) 系统的柔软性与总线相连的单元没有类似于“地址”的信息。

因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

(4) 通信速度根据整个网络的规模,可设定适合的通信速度。

在同一网络中,所有单元必须设定成统一的通信速度。

即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。

不同网络间则可以有不同的通信速度。

(5) 远程数据请求可通过发送“遥控帧”请求其他单元发送数据。

(6) 错误检测功能·错误通知功能·错误恢复功能所有的单元都可以检测错误(错误检测功能)。

CANopen协议介绍(讲义)

CANopen协议介绍(讲义)

CANopen协议介绍(讲义)2010-10-12 15:58:28| 分类:技术文档| 标签:|举报|字号大中小订阅很长一段时间以来,很多人问我CANopen 总线优势到底在什么地方,我也大体的给了口头的讲述,但是比较笼统,没办法做到详细解释,加上纯技术的话语比较晦涩,遇上内行还能多聊几句,如果是刚接触的,那就是云里雾里了。

这次正好要进行公司业务员培训,要讲讲CANopen,在整理过程中把我的讲义贴出来,希望能帮到大家,以下内容是我讲课的口述内容,比较白话,不能作为资料,大家见谅,鉴于我整理也比较辛苦,也算个小小的知识产权,所以PPT我就不贴出来了。

^-^讲义内容:通常CANopen协议相关的一些资料相对来说比较晦涩,非专业人士看起来比较困难。

我尽量以浅显易懂的方式将CANopen 协议的框架和它在实际应用中存在的优缺点展示给大家。

我按照最先接触的内容由浅入深的讲解,直接讲CANopen协议会有点跳跃的感觉,所以,我以产品作为切入点,分析一下如何使用,在这个过程中,让大家理解什么是CANopen协议。

首先,我们拿到一个产品,比方说是编码器,它的用途是作为位置传感器,那我们就需要将编码器送出的数据进行采集。

一般自然界中存在的信号有多种形式,大多以模拟量形式存在,类似于人感觉到温度的高低、水流的快慢、风力的大小等等。

但这是很模糊的概念,今天热了还是冷了,风大风小,没有比较是很难界定的,为了规范这些量,方便描述时的统一性,温度计量标准有华氏和摄氏、水流有每秒多少立方、风力有级数。

这些,就是数字量。

数字量在人与人之间传递时,可以通过嘴和耳,语言和听力,在设备之间如何来传递呢?学过数电的人知道,灯泡有两种状态,亮和暗,在最基础的电路回路里,“通”和“断”是两个最基本的状态,我们可以把他理解为“1”和“0”,这样,就有了表述的方法。

但是单独使用这两种状态是无法传递信息的,如何把编码器的数据传递出去,就需要使用到协议,下面我就讲讲协议。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档