SDO使用对象字典的索引和子索引访问CAN节点的对象字典,可以读取或写入。
PDO不使用索引和子索引。它是两个can节点之间为传输数据内容而约定的对象字典索引。PDO接收到数据后,直接读写对应的对象字典索引中的值。
因为SDO(general)需要索引和子索引,所以它一次最多可以传输4个字节,而PDO一次最多可以传输8个字节。
例如,通过PDO映射,将0x201(节点ID为1)映射到传输索引为0x6040、子索引为0x00的数据字典对象,可以通过将cobOuID设置为0x201直接向节点1的0x60400x00对象发送数据,而不必使用SDO发送包括索引和子索引的数据。
扩展资料:
CANopen设备之间的通信可以分为以下三种通信模式。
在主/从模型中,CANopen设备是主设备,负责从其他设备(称为从设备)发送或接收数据。NMT协议使用主/从模型。
客户机/服务器模型在SDO契约中定义。SDO客户端将目标字典的索引和子索引发送到SDO服务器,从而生成一个或多个需求数据的SDO包(在目标字典中,索引和子索引的对应内容)。
生产者/消费者模型用于heartbeat和节点保护协议。一个生产者发送给消息制造者的数据,以及来自同一生产者的数据可以发送给多个消息制造者。
它也可以分为两种类型:推送模式:生产者会自动向消费者发送数据。拉模型:消费者需要在生产者发送数据之前发送请求消息。
删除字典表的时候,使用的语句应该是:DETACH Dictionary dmp_logods_product;
由于同事错误了使用了命令,导致重新创建字典表不成功,错误的命令如下(当成表来 *** 作了):
DETACH TABLE dmp_logods_product;
重新创建字典表报如下错误:
SQL 错误 [387]: ClickHouse exception, code: 387, host: 1723012592, port: 8124; Code: 387, edisplayText() = DB::Exception: Dictionary dmp_logods_product already exists (version 20866 (official build))
由于把字典表当成表卸载了。然后再加载的时候,又报语法错误。
ATTACH TABLE dmp_logods_product;
解决的方法:
总体思路:既然当成表来DETACH了,那么再当成表来ATTACH即可。
1、ClickHouse metadata的目录
/data/clickhouse/metadata/dmp_log
找到误 *** 作的表信息ods_product。
2、由于ods_product是字典表,语法与建表语句不一致。
所以需要将ods_product文件内容,修改为普通的建表语句,让ClickHouse能加载进去。
3、重启ClickHouse
3、执行删表语句
drop table odsods_product
4、新建字典表
CREATE DICTIONARY dmp_logods_product数据字典用来存储数据库中数据对象的描述信息和数据库管理系统需要的控制信息。
数据字典中存储了表的属性。
数据字典中存储了以下内容:①与关系模式有关的信息:关系名,属性名,属性数据类型,键属性等。(其实就是表的属性)
②与视图描述有关的信息
③与关系的存储结构和存储方法有关的信息。
④与完整性约束有关的信息
⑤与安全性有关的信息(各类用户对数据库的 *** 作权限)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)