道路运输车辆卫星定位系统:事件设置与报告协议详解

需积分: 46 48 下载量 99 浏览量 更新于2024-08-10 收藏 313KB PDF 举报
本资源主要关注的是道路运输车辆卫星定位系统的终端通讯协议,具体针对的是中华人民共和国交通运输行业标准JT/T808—2011《道路运输车辆卫星定位系统终端通讯协议及数据格式》。这份标准详细规定了车载终端与监管/监控平台之间的通讯流程,涉及的关键功能和数据交换。 1. 事件设置:这部分介绍了两种重要的事件管理操作,包括消息ID 0x8301的事件设置,用于删除终端现有的所有事件或更新、追加、修改特定事件,以及事件内容的格式。设置了类型字段,如删除事件(类型0)、更新事件(类型1)等,事件内容需按照指定的字节结构进行编码,如GBK编码。 2. 事件报告:消息ID 0x0301的事件报告功能用于向平台发送终端收集到的事件信息,如事件ID的报告,包含了事件的具体内容。 3. 提问下发:消息ID 0x8302的提问下发功能可能是用于控制终端执行某些查询或者操作,但具体内容未在提供的部分详述。 4. 数据格式:文档强调了数据通信链路的异常处理,即当链路出现问题时,如何确保数据的有效传输和错误处理。此外,数据格式的规范性是协议设计的核心,它涉及到字节序、字段定义、数据类型和长度的要求。 5. 规范性引用:标准引用了多个相关文件,确保了通信协议的兼容性和一致性,例如GB/T2260用于行政区划代码,JT/T415-2006则可能涉及编目编码规则,而JT/T794则给出了终端技术的基本要求。 6. 术语和定义:文档中定义了关键术语和缩略语,如“数据通信链路异常”等,这些都是理解协议工作原理的基础。 这个标准对道路运输车辆卫星定位系统的终端开发、运营和维护具有指导意义,确保了终端与监控平台之间的高效且可靠的数据交互。了解和遵循这些规定对于确保车辆追踪、安全监控和运营效率至关重要。

请逐行注释下面的代码:class riscv_instr_base_test extends uvm_test; riscv_instr_gen_config cfg; string test_opts; string asm_file_name = "riscv_asm_test"; riscv_asm_program_gen asm_gen; string instr_seq; int start_idx; uvm_coreservice_t coreservice; uvm_factory factory; uvm_component_utils(riscv_instr_base_test) function new(string name="", uvm_component parent=null); super.new(name, parent); void'($value$plusargs("asm_file_name=%0s", asm_file_name)); void'($value$plusargs("start_idx=%0d", start_idx)); endfunction virtual function void build_phase(uvm_phase phase); super.build_phase(phase); coreservice = uvm_coreservice_t::get(); factory = coreservice.get_factory(); uvm_info(gfn, "Create configuration instance", UVM_LOW) cfg = riscv_instr_gen_config::type_id::create("cfg"); uvm_info(gfn, "Create configuration instance...done", UVM_LOW) uvm_config_db#(riscv_instr_gen_config)::set(null, "*", "instr_cfg", cfg); if(cfg.asm_test_suffix != "") asm_file_name = {asm_file_name, ".", cfg.asm_test_suffix}; // Override the default riscv instruction sequence if($value$plusargs("instr_seq=%0s", instr_seq)) begin factory.set_type_override_by_name("riscv_instr_sequence", instr_seq); end if (riscv_instr_pkg::support_debug_mode) begin factory.set_inst_override_by_name("riscv_asm_program_gen", "riscv_debug_rom_gen", {gfn, ".asm_gen.debug_rom"}); end endfunction function void report_phase(uvm_phase phase); uvm_report_server rs; int error_count; rs = uvm_report_server::get_server(); error_count = rs.get_severity_count(UVM_WARNING) + rs.get_severity_count(UVM_ERROR) + rs.get_severity_count(UVM_FATAL); if (error_count == 0) begin uvm_info("", "TEST PASSED", UVM_NONE); end else begin uvm_info("", "TEST FAILED", UVM_NONE); end uvm_info("", "TEST GENERATION DONE", UVM_NONE); super.report_phase(phase); endfunction virtual function void apply_directed_instr(); endfunction task run_phase(uvm_phase phase); int fd; for(int i = 0; i < cfg.num_of_tests; i++) begin string test_name; randomize_cfg(); riscv_instr::create_instr_list(cfg); riscv_csr_instr::create_csr_filter(cfg); asm_gen = riscv_asm_program_gen::type_id::create("asm_gen", , gfn); asm_gen.cfg = cfg; asm_gen.get_directed_instr_stream(); test_name = $sformatf("%0s_%0d.S", asm_file_name, i+start_idx); apply_directed_instr(); uvm_info(gfn, "All directed instruction is applied", UVM_LOW) asm_gen.gen_program(); asm_gen.gen_test_file(test_name); end endtask virtual function void randomize_cfg(); DV_CHECK_RANDOMIZE_FATAL(cfg); uvm_info(`gfn, $sformatf("riscv_instr_gen_config is randomized:\n%0s", cfg.sprint()), UVM_LOW) endfunction endclass

2023-05-24 上传