列车tcn网络mvb从站接收代码流程解析

news2024/9/21 7:29:51

TCN-列车通信网络概述

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

mvb板卡设置需求

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

MVB从站源代码实现过程

1、板卡初始化
2、过程数据初始化
3、传输存储与新鲜度初始化
4、源端口初始化 PD_SOURCE_PORT
5、设备地址初始化
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             \
            );

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文件

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

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

mvb从站接收源代码需求:mvb板卡从站配置地址0x002,源端口0x500,端口大小32字节Makefile编译方式资源-CSDN文库

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

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

相关文章

免费https证书申请及部署教程

目前随着https访问的普及度逐渐提高&#xff0c;https证书的使用率也与日俱增&#xff0c;多数网站都会通过实现https来保障自身网站的数据传输安全&#xff0c;这时候就离不开SSL证书了&#xff0c;如何获取SSL证书&#xff0c;又如何将SSL证书部署在域名上&#xff0c;今天为…

外贸客户开发有用的软件

外贸客户开发过程中&#xff0c;选择合适的软件工具能够显著提升效率和效果。以下是一些对外贸客户开发非常有用的软件&#xff1a; CRM系统&#xff1a; Salesforce&#xff1a;全球领先的CRM平台&#xff0c;提供强大的客户关系管理、市场分析、销售自动化等功能&#xff0c;…

关于RS485通信失败的问题(忽视了使能引脚)

问题 如图&#xff0c;使用485进行串口通信时&#xff0c;程序一直卡在接收这句。 解决 检查串口引脚配置都没问题&#xff0c;因此怀疑是硬件的原因。 在RS485通信中&#xff0c;通常需要一个使能信号来控制半双工总线上的发送和接收状态&#xff0c;这个信号经常被标记为&…

ProbeManager:一款功能强大的入侵检测系统集中化管理工具

关于ProbeManager ProbeManager是一款功能强大的入侵检测系统集中化管理工具&#xff0c;该工具旨在简化检测探针的部署任务&#xff0c;并将其所有功能集中在一个地方。 一般来说&#xff0c;很多入侵检测系统&#xff08;IDS&#xff09;包括其软件及规则都不会定期更新&…

C++ | Leetcode C++题解之第43题字符串相乘

题目&#xff1a; 题解&#xff1a; class Solution { public:string multiply(string num1, string num2) {if (num1 "0" || num2 "0") {return "0";}int m num1.size(), n num2.size();auto ansArr vector<int>(m n);for (int i …

Java 网络编程之TCP(一):基于BIO

环境&#xff1a; jdk 17 IntelliJ IDEA 2023.1.1 (Ultimate Edition) Windows 10 专业版 22H2 TCP&#xff1a;面向连接的&#xff0c;可靠的数据传送协议 Java中的TCP网络编程&#xff0c;其实就是基于常用的BIO和NIO来实现的&#xff0c;本文先讨论BIO&#xff1b; BIO…

Pytorch 学习路程 - 1:入门

目录 下载Pytorch 入门尝试 几种常见的Tensor Scalar Vector Matrix AutoGrad机制 线性回归尝试 使用hub模块 Pytorch是重要的人工智能深度学习框架。既然已经点进来&#xff0c;我们就详细的介绍一下啥是Pytorch PyTorch 希望将其代替 Numpy 来利用 GPUs 的威力&…

STM32F103ZET6 封装 LQFP-144 ST意法 单片机芯片

STM32F103ZET6 是意法半导体&#xff08;STMicroelectronics&#xff09;生产的一款基于 ARM Cortex-M3 内核的 32 位微控制器。它具有高性能、低功耗的特点&#xff0c;广泛应用于各种嵌入式系统和工业应用中。STM32F103ZET6 的主要特点如下&#xff1a; 内核&#xff1a;ARM…

【每日力扣】41. 缺失的第一个正数 238. 除自身以外数组的乘积 189. 轮转数组

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为…

一个 Java 项目最多定义多少个线程池比较合理,有哪些限制因素需要考量?

在Java项目中&#xff0c;线程池是一种重要的并发机制&#xff0c;用于管理和执行多线程任务。然而&#xff0c;线程池的设计需要谨慎考虑&#xff0c;以确保系统的稳定性、性能和资源利用率。在决定一个Java项目中最多可以定义多少个线程池时&#xff0c;需要综合考虑多种因素…

IPRally巧用Google Kubernetes Engine和Ray改善AI

专利检索平台提供商 IPRally 正在快速发展&#xff0c;为全球企业、知识产权律师事务所以及多个国家专利和商标局提供服务。随着公司的发展&#xff0c;其技术需求也在不断增长。它继续训练模型以提高准确性&#xff0c;每周添加 200,000 条可供客户访问的可搜索记录&#xff0…

AI大模型探索之路-资料篇:大模型开发相关地址信息收藏

文章目录 前言一、OpenAI大模型二、LangChain开发框架三、RAGA评估框架四、GLM大模型五、搜索服务1. Tavily Search API 六、文本LLM大模型七、多模态LLM模型八、模型排行榜1.大模型评测体系&#xff08;司南OpenCompass&#xff09;2.大模型排行榜&#xff08;DataLearner AI&…

基于SSM的在线家教管理系统(含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的在线家教管理系统1拥有三种角色 管理员&#xff1a;学生管理、老师管理、发布管理、留言管理、回复管理、订单管理等教师&#xff1a;我的订单、我的关注、查看回复留言、登录注…

如何加盟共享wifi项目?了解套路有哪些?

自共享wifi项目推出在市场火爆后&#xff0c;各路资本都看到了该项目的广阔前景&#xff0c;纷纷开始研发程序&#xff0c;想要趁机分一杯羹。但对于普通人而言&#xff0c;独立研发程序显然不大现实&#xff0c;于是&#xff0c;共享wifi项目如何加盟便成为了绝大多数人最为关…

Sql Server 数据库:查询表结构脚本

查询脚本: SELECT CASE WHEN col.colorder 1 THEN obj.name ELSE END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[value], ) AS 列说明 , t.name AS 数据类型 , col.length AS 长度 , ISNULL(COLUMNPROPERTY(col.id, col.name, Scale), 0) AS 小数位数…

Python与数据库连接

新建表boss create table 创建表 Code import pymysqlcon pymysql.connect(hostlocalhost,\userroot,\password,\port3306,\dbbusiness) cursorcon.cursor() cursor.execute(create table if not exists boss(id int auto_increment primary key,name varchar(20)not null…

可持续发展:制造铝制饮料罐要消耗多少资源?

铝制饮料罐是人们经常使用的日常用品&#xff0c;无论是在购物、午休还是在自动售货机前选择喝什么的时候&#xff0c;很少有人会想知道装他们喝的饮料的罐子到底是如何制成的&#xff0c;或者这些铝罐的原材料是如何进出的。 虽然有化学品和一些合金进入铝饮料罐制造过程或成为…

成都直播产业园「天府锋巢」电商流量深度变现,助力企业降本增效

天府锋巢园区环境 天府锋巢直播基地 其他重点特色产业服务 等您来解锁&#xff01; 「锋巢资讯 聚焦天府 诚邀企业 敬请关注」

Java中的BIO、NIO与AIO

1.概述 I/O 模型简单的理解&#xff1a;就是用什么样的通道进行数据的发送和接收&#xff0c;很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式&#xff1a;BIO、NIO、AIO。 2.Java BIO Java BIO(Blocking I/O)&#xff1a;是传统的java io 编程&#…

java Web-Spring AOP

AOP的概念 AOP:面向切面编程&#xff0c;面向方法编程。简单理解就是对特定方法的扩充的思想 例如我们要在特定方法进行方法的执行时间判断&#xff0c;我们假如去使用在每个方法去进行业务逻辑扩充&#xff0c;这样就太繁琐了&#xff0c;而使用AOP就可以简化操作。Spring A…