技术咨询 我要提问

CAV-1553B 系列产品常见应用问题解答



1.    1553B板卡驱动安装完成后,设备管理器中有黄叹号,提示错误代码10?

答:出现此问题一般是由于驱动不是在超级管理员模式下进行的安装。解决方案:先打开超级管理员权限,然后在超级管理员权限下安装驱动。打开超级管理员权限的方法见驱动文件路径下的文档《Win7旗舰版激活超级管理员权限.pdf》。安装驱动时双击《1553B驱动安装.bat》文件,不要通过在设备管理器中搜索相应的CAV_1553B_Driver.inf文件安装。驱动安装完成后需要重启操作系统。


2.    系统中安装了低版本windriver(版本低于11.50)开发的板卡驱动。然后在安装石竹公司的1553B板卡驱动时,驱动显示安装成功,但是程序访问板卡时打开设备失败?

答:这是windriver驱动安装冲突问题。解决方案:先安装高版本驱动,再安装低版本驱动,先运行和第一个安装的windirver版本驱动相对应的板卡程序。


3.    1553B板卡对应的驱动版本安装问题,装PCI的驱动还是安装PCIE-R2的驱动?

答: 板卡安装的驱动版本说明见下表。

板卡类型

板卡图片

驱动安装版本

CAV-1553B-PCIB

\

PCI

CAV-1553B-PXI(e)

\

PCIE-R2

CAV-4M1553B-PXI/cPCI/PXIe

\

PCIE-R2

CAV-1553B-cPCI

\

PCI

CAV-1553B-PMCB

\

PCI

CAV-1553B-USB

\

USB

CAV-1553B-PC104

\

PC104

CAV-1553B-PC104p

\

PCI

CAV-1553B-MPCIE

\

PCIE-R2


4.    USB 1553板卡驱动安装正常,程序找不到卡。有的口能识别,有的口不能识别。

解决方案:USB 1553板卡的配套的线缆连接机箱端有两个USB端口,其中有一个USB端口是专门用来供电的,需要将两个USB口都接到电脑上。

5.    CAV-1553B板卡的单功能卡,全功能卡之间的区别?拿到板卡如何确认是单功能卡还是全功能卡?

答:CAV-1553B单功能卡每个通道同一时刻只能工作在BC、RT、BM的一种模式。全功能卡的每个通道可以同时工作在BC、RT、BM模式下。

每个板卡上贴的都有板卡型号。

举例说明:

CAV-1553B-PCIB-1M-C: 单通道全功能板卡

CAV-1553B-PCIB-1S-C: 单通道单功能板卡

CAV-1553B-PCIB-2M-C: 双通道全功能板卡

CAV-1553B-PCIB-2S-C: 双通道单功能板卡


6.    CAV-1553B单功能卡使用可以用FlightPack-1553B软件吗?

答:FlightPack-1553B主要是用于全功能CAV-1553B板卡。单功能卡只能用BC、RT、BM的一种功能,可以选择只运行BC,RT或BM其中的一个。由于FlightPack-1553B软件上所有的数据和状态都是通过BM的数据解析显示的,如果单功能卡运行在BC或RT状态,是看不到状态信息的,但是不影响BC或者RT收发数据。


7.    CAV-1553B同一板卡多通道之间可以通信吗?

答:可以通信。通道外部线缆和耦合器相连就可以。


8.    FlightPack-1553B软件上RT图标显示黄色是什么意思?

答:黄色代表RT没有响应。RT图标各种颜色代表意义如下表所示。


RT图标颜色

代表意义

\

灰色代表RT未使能,板卡不仿真此RT

\

蓝色代表RT已使能,板卡仿真此RT

\

绿色代表RT工作正常

\

黄色代表RT无响应

\

红色代表RT有错误



9.    FlightPack-1553B软件RT怎么配置发送的数据?

答:参照FlightPack-1553B软件使用手册的第7章《软件测试例子流程》里的介绍。


10.   FlightPack-1553B多板卡支持问题。

答:FlightPack-1553B 2020 版本支持多板卡,以前的版本支持第一个块板卡。API二次开发支持多板卡。


11.   如果机器上有多板卡,怎么区分板卡号?

答:只有一张卡的时候设备号用0,如果是多张卡的话设备号依次是0,1,2…。具体哪块卡识别出来的是第0块卡和主机的控制器有关系,有的是离0槽控制器近的是板卡0,有的是离0槽控制器最远的是板卡0。确定了第0块板卡之后,其余板卡依次是1,2…。


12.   板卡的信号采集功能是否支持多个通道?

答:板卡的信号采集功能仅板卡的第一个通道支持,其余通道不支持。


13.   BC子帧模式和消息模式的区别?

答:BC支持子帧模式和消息模式。默认是子帧模式,可以通过CORE_BC_ModeSet函数设置使用消息模式。

(1)       子帧模式下每个子帧的周期是固定的,同一个子帧里的消息周期是相同的,子帧模式下子帧周期的最小设置单位是us。子帧开始的消息的bc_block.bc_control_wd上设置BC_BLOCK_FRAME_BEGIN标志,子帧结束的消息bc_block.bc_control_wd消息上设置BC_BLOCK_FRAME_END标志。子帧消息的周期通过CORE_BC_Init函数的第三个参数frame_us进行设置。

(2)       消息模式下每个消息可以单独设置周期,周期的最小单位是1ms。消息模式下每条消息的周期是通过CORE_BC_BLOCK的成员msg_tx_period来设置。如果msg_tx_period参数设置为0,代表是非周期消息;如果不是0,就是周期消息,该条消息的发送周期就是msg_tx_period,单位ms。


14.   BC周期消息发送的同时,非周期消息如何发送?

答:利用CORE_BC_Aperiodic_Send函数来发送非周期消息时必须要求周期消息同时在发送,否则CORE_BC_Aperiodic_Send函数不能正常工作。

1)  子帧模式下,非周期消息的下一条消息的编号指向0xFFFF。调用非周期发送函数CORE_BC_Aperiodic_Send进行非周期消息的发送。

2)  消息模式下,CORE_BC_BLOCK的msg_tx_period设置为0时代表该消息是非周期消息,调用非周期发送函数CORE_BC_Aperiodic_Send进行非周期消息的发送。

非周期发送分为高优先级和低优先级。其中高优先级消息发送的时机是当前正在发送的周期消息发完之后立即发送出去,低优先级消息发送的时机是等子帧周期里的最后一条消息发出去之后才发送低优先级消息。


15.   CORE_BC_Aperiodic_Send函数调用后,函数返回失败?

答:CORE_BC_Aperiodic_Send函数的第五个参数WaitFlag代表的是是否等待非周期消息发送完成的标志,如果设置为1,则第6个参数WaitTime有效。WaitTime的单位是ms。如果WaitFlag设置为1,那么WaitTime设置的时间要求不小于BC周期消息发送的最小周期,否则有可能会出现函数返回非周期消息发送超时的错误。

在调用CORE_BC_Aperiodic_Send函数发送之前,建议最好先调用CORE_BC_AperiodicTest函数判断一下上一次的非周期消息是否发送完,等上一次的非周期消息发送完成之后,再进行本次的非周期消息发送。

板卡配套的光盘里提供了非周期消息发送的例程。

Ø  example_bc5.c:子帧周期模式下,发送非周期消息。

Ø  example_bc7a.c:消息周期发送模式下,非周期消息发送设置和发送。


16.   BC不用周期消息,怎么实现单次发送消息?

答:可以采用BC子帧模式,除了正常分配BC BLOCK之外,多分配一个BC_BLOCK_TYPE_STOP类型的消息,让最后一个有效的BC BLOCK的下一条消息的编号指向BC_BLOCK_TYPE_STOP的BC BLOCK块。每次BC发送指令之前,先调用函数 CORE_BC_Is_Running判断一下BC是否停止工作,如果BC已经停止工作,调用CORE_BC_Start开始一次消息的发送,消息执行到BC_BLOCK_TYPE_STOP块就会自动停止。具体的使用方式可以参照板卡配套光盘里的例程example_core_bc_stop.c。


17.   BC命令字、状态字定义?

答:如下图所示。1553B的命令字、数据字和状态字在总线是20位传输。前三位是同步头,最后一位是奇偶校验位。软件上看到的数据都是16位的,对应下图的4~19,其中4对应的是数据最高位,19对应的是数据最低位。


\



18.   消息模式下,发送周期消息过程中发送非周期消息,非周期消息发送用的时间很长?

答:周期消息运行过程中发送非周期消息,非周期消息发送有时机的问题。可以采用高优先级进行发送。消息模式下如果有非周期发送时,加一条1ms类型的NOOP消息,保证非周期消息可以在短时间内发出去。


19.   BM监控到的消息不全?

答:一般出现这种问题都是BM分配的空间太小,查询的时间太长,BM缓存的数据发生了覆盖导致的。建议BM分配msgbuffer不小于2000个,查询周期10ms。


20.   RT 如果主动给BC发送数据?矢量字使用问题?

答: 1553中所有的消息控制都是通过BC端控制的。BC端可以发出BCRT、RTBC、ModeCode、RTRT类型消息。实际应用中经常会出现RT需要主动给BC端上报信息,这种情况下可以通过发送矢量字来实现(Mode Code 16)。

具体流程:

1)        BC端周期性发送 Mode Code 16 消息(发送矢量字),RT端周期的接收矢量字指令。RT端默认发送的矢量字设为0,BC端检测到RT发送的矢量字是0的时候,不做任何操作。

2)        如果RT端需要主动发送数据给BC,RT端先准备好数据,然后将矢量字对应位置位(对应位写1)。

3)        BC端检测到RT端发送过来的矢量字有位为1,BC根据事先约定的对应关系,发送对应的指令(比如RTBC指令)。

4)        RT接到RTBC指令后,发送数据给BC,数据发送消息结束后,RT端将矢量字对应位清0。

5)        如果RT有新的数据要发送给BC,重复2)到4)。

矢量字对应位和RT 子地址常用的对应关系如下表所示。

表 矢量字对应位和RT子地址常用对应关系表

SA1对应矢量字第0

如果BC端检测到矢量字第0位置1,发送对应SA1RTBC指令

SA2对应矢量字第1

如果BC端检测到矢量字第1位置1,发送对应SA2RTBC指令

SA3对应矢量字第2

如果BC端检测到矢量字第2位置1,发送对应SA3RTBC指令

SA4对应矢量字第3

-----------------

SA5对应矢量字第4

-----------------

SA6对应矢量字第5

-----------------

SA7对应矢量字第6

-----------------

SA8对应矢量字第7

-----------------

SA9对应矢量字第8

-----------------

SA10对应矢量字第9

-----------------

SA11对应矢量字第10

-----------------

SA12对应矢量字第11

-----------------

SA13对应矢量字第12

-----------------

SA14对应矢量字第13

-----------------

SA15对应矢量字第14

如果BC端检测到矢量字第14位置1,发送对应SA15RTBC指令

SA16对应矢量字第15

如果BC端检测到矢量字第15位置1,发送对应SA16RTBC指令

注:上表只是一般常用的对应的关系,用户应根据实际需要使用矢量字功能。矢量字和RT SA对应关系是BC端和RT端通信之前双方约定好的,不限于RTBC指令。


         针对我们石竹公司的板卡,BC有两种模式,子帧模式和消息模式。子帧模式下每个子帧中的消息周期和子帧周期相同,消息模式下每条消息可以单独的设置周期。

子帧模式和消息模式都可以通过条件消息自动判断RT端发送过来的矢量字是否满足条件(矢量字对应位置1),如果满足条件,BC端发送对应的控制命令(比如RTBC指令)。

消息模式下除支持条件消息判断外,还支持BC自动判断接收到的矢量字,发送对应SA1-SA16的非周期消息(见例程example_bc8.c)。

RT端支持硬件自动清除矢量字(见例程example_rt1c_2.c),RT设置了自动清除矢量字后,如果硬件检测到对应子地址的数据发送数据完成之后,自动将矢量字的对应位清0。

注:BC端自动判断矢量字和RT端自动清除矢量字都是针对表1中的对应关系,如果是用户自定义的对应关系,不能用硬件BC自动判断适量字和RT自动清除矢量字功能。


光盘中对应矢量字操作的例程如下。

1)         example_bc6b1.c:另一个使用多条条件消息的例程。通过设置的矢量字决定运行哪些消息。

2)         example_bc7b_2.c:  example_bc7.c的扩展,主要演示BC消息模式下,周期消息发送,非周期消息发送,配置条件消息检测矢量字的值并根据矢量字的值自动发送对应SA的RT->BC消息、采用软件查询中断的方式获取RT发送到BC的数据、定期和不定期更新周期消息发送的数据。

3)         example_bc7b_1.c:  example_bc7.c的扩展,主要演示BC消息模式下,周期消息发送,非周期消息发送,配置硬件自动检测矢量字并根据矢量字的值自动发送对应SA的RT->BC消息、采用软件查询中断的方式获取RT发送到BC的数据、定期和不定期更新周期消息发送的数据。

4)         example_bc8.c: 演示BC消息周期发送模式下,BC自动判断接收到的矢量字,发送对应SA1-SA16的非周期消息。

5)         example_rt1c.c:Example_rt1.c的扩展,分配了响应模式代码发送矢量字的内存。

6)         example_rt1c_2.c:example_rt1c.c的扩展,演示了RT 硬件自动清除矢量字的对应位。


21.   1553B 板卡中断使用问题。什么时候用中断?硬件中断和软件中断的区别?

答:1553B 板卡中断分为硬件中断和软件中断。USB 1553B板卡仅支持软件查询中断队列,不支持硬件中断方式。

1)       BC的每个msgbuffer上都可以设置中断,将CORE_BC_MSG_BUFFER 的int_enable设置为0x00010000。常用的是BC在接收数据的msgbuffer上设置中断,及时将RT发送过来的数据读走。

2)       RT的每个msgbuffer上都可以设置中断,将CORE_CORE_RT_SA_BUFFER的int_enable设置为0x00010000。常用的是RT端在接收的msgbuffer上设置中断,及时将收到的数据读走。

3)       BM支持中断但是不建议用中断方式。BM最好是采用软件定时查询的方式获取新的数据。

上述的1),2),3)是软件中断的设置方式。硬件中断设置时除了设置int_enable之外还要调用硬件服务程序注册函数SetInterruptHandler和中断使能的函数CORE_INT_Enable_HW_Interrupt。具体的可以参照光盘中提供的例程。

1)       example_bc_hwint.c(CAV-1553-USB不支持):主要演示 BC 的硬件中断处理操作。

2)       example_bc1_int_poll.c: Example_bc1.c的扩展,每个BC消息块设置多个数据缓冲区,并且使用软件查询的方式。

3)       example_core_bc_rt_bm.c:主要演示了BC、RT、BM同时运行,BC、RT、BM均演示了软件中断的设置方式。


22.   1553B 运行过程中可以修改发送数据的内容吗?如果可以,怎么修改?

答:运行过程中可以修改BC或者RT发送的数据内容。

Ø  BC端修改发送的数据内容,先设置 CORE_BC_MSG_BUFFER,将数据准备好,然后调用 CORE_BC_Write_Buffer函数将数据更新。

Ø  RT端修改发送的数据内容,先设置CORE_RT_SA_BUFFER,将数据准备好, 同时设置legal_wc = 0xFFFFFFFF,然后调用CORE_RT_Write_SA_Buffer函数将数据更新。注意如果RT的msgbuffer上设置了中断使能,更新的时候也需要将中断使能位重新设置后再写入。

 BC运行过程中不要修改BC Block的内容,强行修改可能会导致出错。


23.   调用CORE_BC_Write_Buffer函数返回失败?

答:仅以下4种消息类型可以调用CORE_BC_Write_Buffer 函数。

1)        BC_BLOCK_TYPE_MSG_BCRT

2)        BC_BLOCK_TYPE_MSG_RTBC

3)        BC_BLOCK_TYPE_MSG_RTRT

4)        BC_BLOCK_TYPE_MSG_MODE

上面4消息类型需要分配msgbuffer,可以调用CORE_BC_Write_Buffer函数设置。其余的消息类型不需要分配msgbuffer,不能调用CORE_BC_Write_Buffer函数。


24.   RT端配置了发送数据,数据没有发出去?

答:RT msgbuffer设置的时候需要将CORE_RT_SA_BUFFER的legal_wc = 0xFFFFFFFF。


25.   BC自动总线切换功能是什么?和重试的区别?

答: 一般厂家提供的都是BC重试功能,需要自定义重试总线和重试次数。石竹科技的1553B支持BC重试,同时支持BC自动总线切换。

BC自动总线切换指的是如果硬件逻辑判断出当前总线上数据通信有问题,会自动切换到另一条总线上发送,后续的消息发送都在另一条总线上发送。和BC重试相比,BC自动总线切换可以减少总线上很多不需要的消息传输。

如果使用BC自动切换功能,调用函数CORE_Auto_BusChange_Enable设置一下即可。


26.   错误状态是什么意思?

答:下面是BC消息状态字的说明,RT和BM的类似。RT和BM的Message Status可以查看《CAV-1553B API使用手册Vx.x.pdf》的附录B和附录C。

\

图E-1 BC中断使能字、消息状态字

中断使能字的每一位所表示的含义如图E-1所示。软件设置中断使能字中某一位为1,当条件满足时硬件产生相应的中断,并记录到中断队列中。软件可以通过读取中断队列的方式检测到相应的中断信息。如果将int_enable的多个位设置为1,则只要满足其中任意一种类型的条件,硬件就会产生中断。举例:若设置消息满足“End of message”时产生中断,则int_enable 设置为0x00010000;若设置消息满足“No Response”时产生中断,则int_enable 设置为 0x00001000。

msg_status由用户初始化为0,后由硬件进行相应的状态更新。msg_status记录消息的状态信息。如果消息发送完成,则“End of message”位置1,如果消息完成并且RT没有响应,则“End of message”和“No Response”两位同时置1。

下表中详细介绍了msg_status的具体位含义。红色位置1代表消息上有错误,黄色代表的是消息有响应。其余指示的消息的类型或总线的状态。

0:多字错误

1:无效的数据字错误

2:少字错误

3:同步头反转错误

4:曼彻斯特编码错误

5:在两条总线上同时检测到信号

6:奇偶校验错误

7:不连续的数据错误

8:早响应错误

9:晚响应错误

10:错误的RT地址错误。

11:反映消息传输的总线,反映消息是在总线A或者总线B上传输。

12:消息没响应

13:错误的总线上响应

14:位个数错误

15:无消息间隔或消息间隔过短(<4us

16:消息结束

17:广播消息

18RTRT消息

19:保留

20:保留

21ModeCode消息

22:总线上发生了重试

23:消息超时

24BC消息的状态字的Message Error位置1

25~31:保留。


27.   1553B板卡的BC的BLOCK和msgbuffer的关系是什么?

答:BC BlOCK 主要用来设置消息传输类型(BC->RT,RT->BC,Mode Code ,RT->RT等),传输总线(BUSA 或BUSB),命令字,消息间隔、子帧开始或子帧结束等。msgbuffer主要是定义BlOCK定义的消息对应的数据缓冲区,同时可以根据需要在msgbuffer上设置中断条件。可以理解为1个BLOCK + 1个msgbuffer对应的就是完整的一条1553B指令。


28.   1553B板卡的BC和RT的多buffer是什么意思?

答:BC端常用方式是一个BC Block配一个msgbuffer。RT端每个SA下分配一个发送和接收的buffer,发送buffer用来设置RT发送的数据,接收buffer用来接收数据。多buffer可以用来实现多个buffer依次发送或接收数据,buffer是循环链表控制的。

BC端BLOCK的多buffer数据发送方式是指令第一次发送时,发送第一个buffer里的数据或者将收到的数据存到第一个buffer里;指令第二次发送时,发送第二个buffer里的数据或者将接收的数据存到第二个buffer里,依次类推;最后一个buffer里的数据收发完了之后,下一条指令对应的第一个buffer。

RT端多buffer数据发送方式是收到第一个指令时,发送第一个buffer里的数据或者将收到的数据存到第一个buffer里;收到第二个指令时,发送第二个buffer里的数据或者将接收的数据存到第二个buffer里,依次类推;最后一个buffer里的数据收发完了之后,下一条指令对应的第一个buffer。


29.   FlightPack-1553B软件上RT的内部和外部是什么意思?

答:内部RT指的是用石竹的板卡仿真这个RT。外部RT指的是这个RT地址是外面板卡或设备来充当的,石竹板卡不仿真这个RT。


30.   RT端方式代码怎么配?用SA0还是SA31?

答:RT端发送或者接收方式代码对应是设置SA0和SA31下的发送和接收buffer。具体使用SA0还是SA31这个要看BC端发送的方式代码指令的命令字中用的是SA0还是SA31。RT端接收到的方式代码数据字或者发送方式数据字对应的都是相应msgbuffer的第一个数据字。


31.   RT 每个子地址下的buffer发送和接收是同一个吗?

答:RT SA下的buffer是区分接收和发送的,同一个SA可以有一个发送buffer和一个接收buffer,CORE_RT_Read_SA_Buffer和CORE_RT_Write_SA_Buffer函数中的t/r参数是针对接收或发送buffer的,0代表对接收buffer处理,1代表对发送buffer处理。


32.   BC自动生成.c代码功能怎么用?

答:FlightPack-1553B软件的BC设置界面提供了自动将BC配置信息生成.c代码的功能。具体使用方法参照板卡配套光盘里的文档《AN104 - FlightPack-1553B软件自动生成BC配置源代码_V1.3.pdf》。



2024-05-08

管理员   回答2024-05-08