怎样实现SDO服务
SDO是CANopen协议中最复杂的一部分,带有应答机制,有多种传输方式,并且完整的SDO功能节点需提供1个SDO server和多个SDO client,因此SDO的实现异常困难,协议多种传输方式的解析处理还有迹可循,多个SDO client服务和多个对SDO server的访问的协调就不容易了,这里介绍一种方法——SDO线程来解决。
注意,这里的线程可不是操作系统提供的多线程技术,况且为保证协议栈良好的移植性,在CANopen协议栈核心代码里中也不好去调与操作系统相关的库函数。我们这里的SDO线程只是借鉴了操作系统多线程机制的一套SDO服务处理方法,每个SDO线程表示的是与网络上其他节点建立的一个SDO链接,相当于在两个节点间建立一个SDO通讯路径,其中每个节点都拥有一个对这个路径的描述,在该节点看来好像建立了一个线程来负责这个路径(但决不会真的创建一个系统线程),在通讯过程中双方通过这个路径来交流,SDO通讯结束则释放该线程,每个节点可以同时与多个节点建立多个这样的路径和互不影响,就如同操作系统的线程机制一样的效果。我们知道每建立一个线程都会生成一个描述线程属性的参数表和一些私有数据,类似的,SDO线程的建立也会初始化一个对应的参数和数据结构体——SDO线程参数表,以之来描述这个SDO链接的属性并提供私有通讯数据的存储。
SDO线程参数表可以说是SDO线程的核心,所有SDO线程的建立、删除和SDO通讯都要涉及到这个参数表。参数表内容包括能够描述一个SDO访问过程的所有参数,这里不详述。
一次SDO访问是这样完成的。首先SDO发起节点(SDO client)收集足够的信息,建立一个SDO线程,说白了就是初始化SDO线程参数表,将收集的信息以特定格式放入参数表,形成一帧SDO请求,发送出去。SDO服务节点(SDO server)收到这帧请求,为它建立一个SDO线程,将这帧请求分析分解以获得足够信息来初始化这个SDO线程对应的参数表,然后程序就会按照参数表的描述去执行server的功能收集数据来满足这个SDO请求,然后将收集到的数据形成SDO应答帧返回给SDO client,如果此次请求结束则释放该线程,否则等待下一帧请求到来;SDO client在收到应答后判断该请求是否还有后续请求,无则释放此SDO线程。如果在这个过程中,SDO server 和SDO client所在节点有收到其他节点的SDO请求或需要通过SDO请求其它节点,则新建SDO线程来实现,跟上面的步骤一样,这样就可以实现多个SDO server和SDO client服务都得到实现而互不干扰,相当于双向多线铁路,可比单线爽多了。
该方法已在单片机下实现,效果还不错。
怎样实现SDO服务的更多相关文章
- 旧文备份: 怎样实现SDO服务
SDO是CANopen协议中最复杂的一部分,带有应答机制,有多种传输方式,并且完整的SDO功能节点需提供1个SDO server和多个SDO client,因此SDO的实现异常困难,协议多种传输方式的 ...
- 旧文备份:CANopen协议中SDO服务
SDO是服务数据对象接口(Service Data Obiect)的缩写,顾名思义提供服务数据的访问接口,服务数据就是一些实时性要求不高的数据,一般是指节点配置参数,因此,SDO一般用来配置和获得节点 ...
- CANopen笔记1
CAN现场总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层) ,而这两层一般已被CAN硬件完全实现了.由于没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29 ...
- ESB概述
ESB概念的提出: 企业有大量的异构的业务系统,这些系统之间需要通过web service来交互数据,这样的话可以想象系统直接的交互关系是蜘蛛网状的,是难以维护的.这时候提出了ESB,每个业务系统只需 ...
- 旧文备份:简单CANOpen 协议说明
(十年前的旧文,不舍等扔) 创建日期:2005-11-17 修改日期:2005-11-17 文件名称:简单CANOpen 协议说明.doc 作者:winshton 版本:V1.0 (注:本文以24in ...
- CANopenNode drvTemplate/CO_driver.h hacking
/************************************************************************ * CANopenNode drvTemplate/ ...
- CANopen的相关学习
CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线. ...
- 面向服务架构(SOA)和企业服务总线(ESB)
http://www.cnblogs.com/shanyou/archive/2008/04/19/1161452.html 学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点 ...
- 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介
构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...
随机推荐
- R语言数据结构一
R是面向对象的语言,它跟其他编程语言的数据类型差不多,有四种,分别为:数值型,复数型,逻辑性和字符型 数值型:即数字,分为整数型和双精度型.数字可以用科学技术法表示,形式为Xe+m,意为x乘10的m次 ...
- 天天沉迷于皇上本宫的都是sb
天天沉迷于皇上.本宫.奴才.太后的都是sb,时不时还要被某王和某平民的爱情感动的落泪.这是病,要治,最有效的治疗方法是38度的夏天去搬砖. 拍这些电视的人真不傻,知道真sb多,这种电视剧才能爆款.
- c++ 条件判断
if语句 认识算术比较 运算符表达式用法 关系运算符表达式 一. 基本的if语句 if (条件成立) { 则执行此语句 }; // ) printf("条件成立"); 二.认识算术 ...
- 3- 功能2:基于forms组件和ajax实现注册功能
1.forms组件的注册页面 url from django.urls import path, re_path from blog import views from django.views.st ...
- 2 CRM 讲师与学生,highcharts应用
一.讲师与学生简介 1 初始化 course_record,studyrecord, 2 考勤 3 录入成绩 4 显示成绩 ajax 查询 5 上传作业(os模块) 6 下载作业 二. 初始化 ,st ...
- 【HNOI2014】江南乐
题面 题解 知识引入 - \(SG\)函数 任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个"有向图游戏".下面我们就在有向无环 ...
- UWP 卡片视图 Card View
上一篇 提到了 UWP 轨道视图Orbit View,这次就说一下卡片视图,毕竟两个差不多. 卡片视图,效果如其名,卡片一样,左右滑动,当然能翻牌最好了. 嗯,我这个可以的额(⊙﹏⊙)... 看下效果 ...
- MergeSort 归并排序(java)
MergeSort 归并排序 排序思想:1,分解待排序的n个元素为两个子列,各为n/2个元素 2,若子列没有排好序,重复1步骤,每个子列继续分解为两个子列,直至被分解的子列个数为1 3,子列元素个数为 ...
- SpringCloud 学习(二) :服务注册与发现Eureka
Spring Cloud应用中可以支持多种的服务治理框架,比如Eureka.Consul.Zookeeper等,现在我们用的是consul,本文以SpringCloud Dalston.SR5版本介绍 ...
- Datawhale MySQL 训练营 Task5
数据导入导出 导入table http://www.runoob.com/mysql/mysql-database-import.html 导出table http://www.runoob.com/ ...