今日头条
虚拟总线
每个虚拟设备的所有虚拟通道都被预设为连接到一个私用虚拟总线上 (通常为虚拟总线 #0)。当生成两个有 5 个通道的设备 , 每个设备的所有 5 个通道都被连接到虚拟总线 #0。然而,这两个虚拟设备之间没有连接,尽管它们被连接到同一个编号的虚拟总线上,虚拟通道只能和接在同一个虚拟设备上的其他通道联系。
注意:每个虚拟设备可以生成一套数量为 32 个的私用虚拟总线!
私用虚拟总线
如上图所示的错误,通道 2(Channel 2)不能和通道 5(channel 5)联系, 通道 3 不能和通道 4 联系, (通道 0 可以和通道 1 联系)。注意:虚拟适配器不能共享虚拟总线!用CANLib操作虚拟设备,可以在 CANLib 里打开虚拟通道, 同样使用你在操作物理 CAN 适配器时所用的命令,唯一不同之处是我们必须加一个旗标 FLAG。
在使用命令 canOpenChannel() 时,我们必须加旗标canOPEN_ACCEPT_VIRTUAL。你可以把旗标保留在软件里,它不妨碍你打开普通总线。每个虚拟设备有 32 个虚拟总线, 在同一个虚拟设备上,你可以将任何一个虚拟通道跟任何虚拟总线相联接。
将一个虚拟通道和一个虚拟总线断开
通过用命令 canIoCtl() 来断开一个通道的联接。
这里看上去不需要 BusOff() 和 BusOn(),但是如果在修改它们之前使用它们,会更好一些,尽管它们是虚拟的。另外,必须知道虚拟总线数量! 如果你忘记了总线数量,可以使用下面操作(断开所有连接):
现在可以确定虚拟通道已和虚拟总线断开了。将一个虚拟通道和一个虚拟总线联接起来,通过用命令 canIoCtl() 来联接一个通道 (总是要先断开通道, 有时可能会联接到多个总线),如图,联接到了虚拟总线 no 7。
注意:非常重要! 你必须断开一个通道!
当联接到一个 ‘新’ 虚拟总线时,通道并没有与 ‘旧’ 总线断开,所有联接和断开都是由你的软件发起控制。
示例:有五个虚拟通道的两个虚拟设备
建立各有五个通道的两个设备 (以下列出的编码不是完整版)。
虚拟设备 0。通道 CH0 和 通道 CH1 可以在 VB1 (虚拟总线 1 ) 上联系。通道 CH2, CH3 和 CH4 可以在 VB3 (虚拟总线3 ) 上联系。
虚拟设备1/b>。通道 CH5-Ch9 可以在虚拟总线 VB1 上联系。但是 CH0 和 CH1 不能和 CH5-CH9 联系, 尽管它们似乎在同一个总线上,因为它们在不同的虚拟设备上,每个虚拟设备生成一套私用虚拟总线。
问题:能用LINUX操作虚拟设备吗?是的, 在Linux里你要在源代码上做一个修改(virtualcan.h):
并且输入下面的命令打开该设备:/usr/sbin/virtualcan.sh start
fqj
全部0条评论
快来发表一下你的评论吧 !