列车tcn网络mvb主站发送代码流程解析

news2024/9/22 17:33:08

 TCN-列车通信网络概述

机车车辆通信网络(TCN-列车通信网络)的基本组件是在整个列车单元中提供数据通信的有线列车总线(WTB)和用于在车辆或固定连接车辆组(组成)内进行数据交换(通信)的多功能车辆总线(MVB)。每个要连接到WTB网络的组件都必须配备WTB通信节点(称为WTB网关)。MVB通信网络也可以通过该节点连接。这称为 TCN WTB/MVB 网关。 

mvb板卡设置需求

需求:mvb板卡主站配置地址0x001,源端口0x500,端口大小32字节。

MVB主站源代码实现过程

1、板卡初始化
2、过程数据初始化
3、传输存储与新鲜度初始化
4、源端口初始化 PD_SOURCE_PORT
5、设备地址初始化

5.1、主站权限初始化(比从站多了主站权限)


6、循环接收数据
7、交叉编译后生成arm64文件格式

1、板卡初始化

TCN_DECL_PUBLIC
AS_RESULT
as_init (void)
{
    LS_RESULT   ls_result = LS_OK;
    ENUM8       link_id;

    link_id = 0;
    while ((link_id < ls_max_links) && (LS_OK == ls_result))
    {
        ls_result = ls_init(link_id);
        /* ignore LS_UNKNOWN_LINK */
        if (LS_UNKNOWN_LINK == ls_result)
        {
            ls_result = LS_OK;
        } /* if (LS_UNKNOWN_LINK == ls_result) */
        link_id++;
    } /* while ((link_id < ls_max_links) && (LS_OK == ls_result)) */

    return((AS_RESULT)ls_result);

} /* as_init */

2、过程数据初始化

TCN_DECL_PUBLIC
AP_RESULT
ap_init (void)
{
    AP_RESULT   ap_result = AP_OK;
    LP_RESULT   lp_result = LP_OK;
    ENUM8       ts_id;

#if (TCN_AP_MUTEX_PORT == 1)
    /* initialise mutex for port access */
    if (FALSE == tcn_ap_mutex_status_port)
    {
        if (0 != pthread_mutex_init(&tcn_ap_mutex_object_port, NULL))
        {
            ap_result = AP_ERROR;
        } /* if (0 != pthread_mutex_init(&tcn_ap_mutex_object_port, NULL)) */
        else
        {
            tcn_ap_mutex_status_port = TRUE;
        } /* else */
    } /* if (FALSE == tcn_ap_mutex_status_port) */
    if (TRUE == tcn_ap_mutex_status_port)
    {
        if (0 != pthread_mutex_lock(&tcn_ap_mutex_object_port))
        {
            ap_result = AP_ERROR;
        } /* if (0 != pthread_mutex_lock(&tcn_ap_mutex_object_port)) */
        if (AP_OK == ap_result)
        {
            if (0 != pthread_mutex_unlock(&tcn_ap_mutex_object_port))
            {
                ap_result = AP_ERROR;
            } /* if (0 != pthread_mutex_unlock(&tcn_ap_mutex_object_port)) */
        } /* if (AP_OK == ap_result) */
    } /* if (TRUE == tcn_ap_mutex_status_port) */
#endif /* #if (TCN_AP_MUTEX_PORT == 1) */

    if (AP_OK == ap_result)
    {
        TCN_AP_MACRO_MUTEX_LOCK();

        ts_id = 0;
        while ((ts_id < lp_max_traffic_stores) && (LP_OK == lp_result))
        {
            lp_result = lp_init(ts_id, 0);
            /* ignore LP_UNKNOW_TS */
            if (LP_UNKNOW_TS  == lp_result)
            {
                lp_result = LP_OK;
            } /* if (LP_UNKNOW_TS  == lp_result) */
            ts_id++;
        } /* while ((ts_id < lp_max_traffic_stores) && (...)) */

        TCN_AP_MACRO_MUTEX_UNLOCK();

        ap_result = (AP_RESULT)lp_result;

    } /* if (AP_OK == ap_result) */

    return(ap_result);

} /* ap_init */

3、传输存储与新鲜度初始化

TCN_DECL_PUBLIC
AP_RESULT
ap_ts_config
(
    ENUM8       ts_id,
    UNSIGNED16  fsi
)
{
    LP_RESULT   lp_result;

    TCN_AP_MACRO_MUTEX_LOCK();

    lp_result = lp_init(ts_id, fsi);

    TCN_AP_MACRO_MUTEX_UNLOCK();

    return((AP_RESULT)lp_result);

} /* ap_ts_config */

4、源端口初始化 PD_SOURCE_PORT

        pd_port_address            = 0x500;
        pd_prt_attr.port_size      = 32;
        pd_prt_attr.port_config = PD_SOURCE_PORT;// PD_SINK_PORT;
        pd_prt_attr.p_bus_specific = NULL;
        ap_result =                 \
            ap_port_manage          \
            (                       \
                0,                  \
                pd_port_address,    \
                PD_PRT_CMD_CONFIG,  \
                &pd_prt_attr        \
            );

5、设备地址初始化

        mvb_control.device_address  = 0x002;
        mvb_control.reserved1       = 0x00;
        mvb_control.t_ignore        = 0x00;
        mvb_control.reserved2       = 0x00;
        mvb_control.command         = SV_MVB_CTRL_CMD_BIT_SLA;
        mvb_control.command        |= SV_MVB_CTRL_CMD_BIT_SLB;
        mvb_control.reserved3       = 0x0000;
        as_result =                             \
            as_service_handler                  \
            (                                   \
                0,                              \
                SV_MVB_SERVICE_WRITE_CONTROL,   \
                (void*)&mvb_control             \
            );

5.1、主站权限初始化(比从站多了主站权限)

    if (0 == result)
    {
        TCN_OSL_PRINTF \
            ("- as_service_handler(SV_MVB_SERVICE_WRITE_CONTROL)\n");
        /* enable BA */
        mvb_control.command |= SV_MVB_CTRL_CMD_BIT_AON;
        as_result =                             \
            as_service_handler                  \
            (                                   \
                0,                              \
                SV_MVB_SERVICE_WRITE_CONTROL,   \
                (void*)&mvb_control             \
            );
        if (as_result != AS_OK)
        {
            TCN_OSL_PRINTF("ERROR: as_result=%u\n", as_result);
            TCN_DEMO_ON_ERROR(as_result);
            result = (UNSIGNED16)as_result;
        } /* if (as_result != AS_OK) */
    } /* if (0 == result) */

6、循环接收数据

        if (0 == result)
        {
            ds_name.traffic_store_id = 0;
            ds_name.port_address     = 0x500;
            ap_result = ap_put_dataset(&ds_name, &pd_port_data[0]);
            if (ap_result != AP_OK)
            {
                TCN_OSL_PRINTF("ERROR: ap_result=%u\n", ap_result);
                TCN_DEMO_ON_ERROR(ap_result);
                result = (UNSIGNED16)ap_result;
            } /* if (ap_result != AP_OK) */
        } /* if (0 == result) */

7、交叉编译后生成arm64文件格式

make 编译Makefile文件

file master
master: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.7.0, BuildID[sha1]=0fff7c0696c3b32a2c41342733bf1fb454fc58a2, with debug_info, not stripped

8、mvb主站实测源代码下载地址

mvb主站发送源代码:mvb板卡主站配置地址0x001,源端口0x500,端口大小32字节Makefile编译方式资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1616764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公钥密码学Public-Key Cryptography

公钥或非对称密码学的发展是整个密码学历史上最伟大的&#xff0c;也许是唯一真正的革命。The development of public-key, or asymmetric, cryptography is the greatest and perhaps the only true revolution in the entire history of cryptography. 公钥算法基于数学函数…

aardio - 【库】图片转字符画

库文件及例程下载&#xff1a;https://aardio.online/thread-261.htm

【linux】Bad owner or permissions on

在root用户下执行scp操作向另外一个节点拷贝文件时发生了如下错误&#xff1a; Bad owner or permissions on /etc/crypto-policies/back-ends/openssh.config 我们查看他的权限时发现它所链接的文件权限为777 解决方法就是&#xff1a; chmod 600 /etc/crypto-policies/back-e…

组装一台FPV穿越机无人机,小白级保姆教程!

穿越机是无人机的一种类型&#xff0c;但与常见的无人机相比&#xff0c;它更倾向于被归类为航模。穿越机通常没有自主巡航能力&#xff0c;并且许多玩家喜欢自己购买配件进行组装。它的最高时速可以达到120km/h至230km/h。 配件清单 DJI O3 天空端&#xff0c;DJI Goggles 2&…

[柏鹭杯 2021]试试大数据分解?

题目&#xff1a;&#xff08;NSSCTF | 在线CTF平台&#xff09; 题目就是如此&#xff0c;我没看到有5个不同的文本&#xff0c;其中最后一个文本以pem后缀&#xff0c;所以我们先来了解一下什么是pem格式。 PEM 格式 PEM格式通常用于数字证书认证机构&#xff08;Certifica…

如何在window系统中安装Mysql

先简单来说说MySQL是什么&#xff1f; MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 MySQL 由瑞典 MySQL AB 公司开发&#xff0c;目前属于…

关于主流电商数据采集技术:电商API数据采集接口|

引言 随着时代的进步&#xff0c;电商数据采集技术正以前所未有的速度和规模发展&#xff0c;它已经深刻地改变了我们的生活和工作方式。在这个激动人心的时刻&#xff0c;我司也积极跟随时代的步伐&#xff0c;不断探索创新&#xff0c;努力实现与AI技术的融合&#xff0c;以提…

Python自动化系列3

常用数据类型:列表、元祖、字典、集合 1、列表&#xff08;list&#xff09;&#xff1a;[] 1.1、元素可以是任意的数据类型&#xff1a;int float bool str list … list1 [20,3.14,True,“七木”&#xff0c;“荷花鱼”&#xff0c;[1,2,3,4]] #空列表 1.2、收值:素引取值…

【linux】mobaterm如何kill pycharm进程

【linux】mobaterm如何kill pycharm进程 【先赞后看养成习惯】求点赞关注收藏&#x1f600; 使用云服务器时&#xff0c;pycharm在打开状态下&#xff0c;不小心关了mobaxterm&#xff0c;然后再输入pycharm.sh就会打不开pycharm&#xff0c;显示已经打开报错&#xff1a;Com…

Python 全栈体系【四阶】(三十三)

第五章 深度学习 六、PaddlePaddle 图像分类 1. 概述 1.1 什么是图像分类 图像分类就是将不同的图像划分到不同类别&#xff0c;实现最小分类误差、最高精度。手写体识别就是一个经典的图像分类问题&#xff0c;它将输入图像分为 0~9 某个数字中&#xff0c;实际就是将输入图…

《Vid2Seq》论文笔记

原文链接 [2302.14115] Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning (arxiv.org) 原文笔记 What&#xff1a; 《Vid2Seq: Large-Scale Pretraining of a Visual Language Model for Dense Video Captioning》 作者提出一种多…

idea连接远程服务器并同步代码

idea连接远程服务器并同步代码 打开我们的idea。 tool -> deployment -> configuration 新建连接 -> sftp host输入你的远程服务器ip&#xff0c;输入用户名、密码、测试连接 连接成功 选择服务器根目录 web链接&#xff08;无需要不用&#xff09; 点击mappin…

【MySQL 数据宝典】【磁盘结构】- 006 bin log 二进制日志的基本模式和参数设置

一、基本概念 binlog是一个二进制格式的文件&#xff0c;用于记录用户对数据库更新的SQL语句信息&#xff0c;例如更改数据库表和更改内容的SQL语句都会记录到binlog里&#xff0c;但是不会记录SELECT和SHOW这类操作。 1.1 特点 binlog在MySQL的Server层实现(引擎共用)binlo…

clickhouse数据去重函数介绍(count distinct)

非精确去重函数&#xff1a;uniq、uniqHLL12、uniqCombined 精确去重函数&#xff1a;uniqExact、groupBitmap 测试数据量&#xff1a;2000w 结论&#xff1a; 1.整形值精确去重场景&#xff0c;groupBitmap 比 uniqExact至少快 2x 2.groupBitmap仅支持无符号整形值去重&#x…

JavaAgent的agent与attach

文章目录 简介agent与attachagentattach如何attachpom.xml 简介 javaagent是什么&#xff1f; 从名字agent也可以看出&#xff0c;是一种代理。 javaagent用来做什么&#xff1f; 本质上是对class的一种增强&#xff0c;用来实现一些通用功能&#xff0c;例如链路追踪等。 …

日语里「直す」和「治す」的区别,柯桥日语考级培训

「直す(なおす)」 「直す(なおす)」是指纠正错误或人的性格&#xff0c;将坏掉的东西恢复原状。 例如&#xff1a;以「テレビを直す」为例&#xff0c;就是把坏掉的电视恢复到原来的正常状态。 「直す」可以加在动词后面&#xff0c;表现出主动改善的意愿。 例如:「写真を撮…

产品推荐 | 基于XILINX VERSAL的XW-NVME-X16-2SAS智能FPGA加速卡

01 产品概述 XW-NVME-X16-2SAS智能存储加速卡基于XILINX VERSAL ACAP MPSOC&#xff0c;EP侧提供1路PCIe GEN4 x16接口&#xff0c;RP侧最大可支持2路PCIe GEN4 x8&#xff0c;或4路PCIe GEN4 x 4&#xff0c;板载DDR4-3200MHz缓存&#xff0c;具有低延迟、高性能、低能耗、低…

智慧灯杆sip广播可视对讲解决方案

智慧灯杆sip广播可视对讲解决方案 智能路灯以城市公共设施的全面高效利用为出发点&#xff0c;根据路况加载智能照明、新能源汽车充电桩、城市广播、视频监控、WIFI热点、LED/LCD信息发布、环境监测、微型基站、停车场管理、井盖等。监控和USB手机充电灯功能&#xff0c;不仅能…

图像哈希:QDFT篇

这个领域的背景 相关性质 QDFT和IQDFT的公式&#xff1a; F ( u , v ) 1 M ∑ x 0 M − 1 ∑ y 0 M − 1 e − 2 μ π ( u x M v y M ) f ( x , y ) f ( x , y ) 1 M ∑ u 0 M − 1 ∑ v 0 M − 1 e − 2 μ π ( u x M v y M ) f ( u , v ) 注&#xff1a;如果是 …

05_Qt资源文件添加

Qt资源文件添加 Qt 资源系统是一个跨平台的资源机制&#xff0c;用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源&#xff08;图标、文本翻译等&#xff09;&#xff0c;那么&#xff0c;将其放置在资源文件中&#xff0c;就…