tag 标签: matlab

相关帖子
相关博文
  • 热度 1
    2024-9-11 16:06
    151 次阅读|
    0 个评论
    前言 在基于模型的开发(MBD)领域,模型的质量对于最终产品的成功至关重要。通过阅读本文,您可了解如何提升模型质量,并在整个开发过程中确保模型的一致性和质量。 什么是更好的建模? 更好的建模,也被称为是创建卓越软件模型的方法,对于开发高质量的软件至关重要。这一方法的关键方面包括通过精心的布局和设计保持一致的外观,确保对象和信息不被隐藏或遮挡,并遵循结构化的方法。例如,信号流应当遵循从左到右的方向,应避免信号线交叉,所有模块名称的位置应当固定在特定位置以保持一致性。这种全面的方法可确保模型不仅在视觉上清晰明确,更能保证模型的健壮性和无误,最终提高代码质量。 如何让模型变得更好? 为了实现更好的模型,关注几个关键方面非常重要。以下是其中部分内容的详细解析: 1. 一致的布局和设计: 布局和设计对于模型具有良好的建模风格相当重要,有助于创建外观一致的更好的模型。例如,确定模型输入端口和输出端口的数量十分重要。随意的建模风格可能会对模型的可读性和可理解性有重大影响,这也是为什么需要通过通用风格指南来确保模型易于理解的原因,尤其是对于外部评审人员来说。 信号流:信号流应当遵循从左至右的方向,即从左侧的所有输入端口到位于右侧的所有输出端口。 信号线交叉:应避免或明确信号线交叉。 模块名称:所有模块名称的位置都应固定在一个特定的位置,比如模块下方。 图1: 从左至右的信号流 2. 可读性和可理解性: 为了确保模型易于理解,通用风格指南必不可少。模型的设计不应隐藏或遮挡相关对象和信息。例如,有些模块可能难以识别,这使得他们是否是常量或其数值的含义不够清楚。一个拥有良好设计的模型应当确保模块清晰可识别、大小合适,并对常量明确命名,以避免混淆。 魔法常量:"Magic constants(魔法常量)"是来源或含义不明确的值,应当避免。这些不明确的值可导致误解和错误。风格指南建议在工作区中对常量进行命名和定义,以此来增加可理解性和可维护性,帮助区分不同的常量并明确它们在模型中的作用。 信号命名:一致的信号命名可提升数据流的可理解性,并减少维护工作量。总体上讲,它还有助于提高整个模型的可理解性。 图2: 信号流的可读性和可理解性 3. 健壮性和避免错误: 除了确保模型布局的一致性和清晰的可读性,建模风格指南同样强调模型的健壮性,并避免易出错的建模模式。这些指南旨在提升生成代码的可测试性和质量。比如,一个设计不当的模型可能导致功能问题。此处考虑一个有三个操作数的乘积运算模块;根据信号流的顺序和数据类型,此操作可能会产生不同的结果,从而潜在地导致错误。为了避免这样的问题,应当采用级联(cascade)方式进行建模操作,即根据要求明确定义操作的步骤顺序。通过将以上所有推荐考虑在内并应用风格指南,最终的模型的健壮性和可靠性更加优秀,功能性显著提升,并且降低出错的可能性。 强数据类型:信号和接口的数据类型需强类型化,因为不一致的数据类型会导致代码效率低下、精度降低、或范围违规。 如何实现更好的模型? 在MBD流程中,提高模型质量对于交付成功的最终产品至关重要。MES Model Examiner® (MXAM)和MES Model & Refactor® (MoRe)是实现这一目标必不可少的工具。值得一提的是,现在MoRe已集成在所有MXAM用户许可证中,用户获得了使用高级建模功能的权限。 MXAM提供全面的静态分析,确保模型符合AUTOSAR和ISO 26262等标准。它评估模型结构和度量指标,并提供检查建模规范的最优方法。这有助于保持模型布局和设计的一致性,使模型在视觉上清晰易读。同时,MXAM还能自动修复违背建模规范的地方,避免”魔法常量“和确保命名惯例清晰明确,提升模型的可读性和可理解性。 MoRe与MXAM相辅相成,通过在Simulink中自动创建符合建模规范的模型布局,显著降低模型重构时间,并提升一致性。这样自动化帮助最大程度上减少手动错误,提高模型的健壮性和可靠性。通过确保以级联(cascade)方式进行建模操作,MoRe降低了功能问题出现的可能性,使模型健壮性提升,并且无错误。 MXAM和MoRe可共同简化开发流程,确保创建模型的设计一致、易于理解、健壮且不易出错。这样的集成最终会带来更高质量的软件开发和更高效的工作流程。 注:本文转载自MES模赛思,作者MES模赛思
  • 2024-8-19 09:50
    218 次阅读|
    0 个评论
    我们刚刚发布了最新的MES模赛思工具更新。MXAM、MoRe和MQC的最新版本已经为您下载安装做好了准备。 下面列出了工具亮点的简要概述和发行说明。同时也欢迎您前往官网查看我们的新功能演示视频,我们的工程师将会为您展示与讲解最新功能。 MES Model Examiner (MXAM) v.10.2功能亮点 通过新增检查,为查找表模块高效地生成TargetLink代码 通过在具有相同轴或表值的不同查找表中重用变量来优化查找表代码。 确保属性值的规格一致,并通过一致的配置实现表函数代码的重用。 许可证管理器版本2.3:简化的许可证配置检查 全新的CLI选项允许您设置并验证当前的许可证配置设置,而不再自动使用GUI。 现在,如果Flexera变量(LM_LICENSE_FILE, MES_LICENSE_FILE)已通过许可证管理器中的“Test Server(测试许可服务配置)”按钮定义,就可以对许可证配置进行测试。 MES Model Examiner (MXAM) v.10.2其他更新 ----更好的模型---- 使用新的dSPACE规范为查找表模块高效地生成TargetLink代码 适用于TargetLink和MXAM的新规范文件“Towards MISRA C:2012/MISRA C:2023可用 通过对模型元素的一致命名提高可维护性 在被控对象和控制器模型中符合MISRA AC SLSF规范的语言子集 使用MISRA AC SLSF规范加强了强类型的强制执行 简化了对使用Stateflow元素的审查 对模型编辑进行了简化和加速 ----自动化---- 使用许可证管理器2.3版进行简化的许可证配置检查 改进了批处理工作流程 ----性能---- 缩短了模型分析的运行时间 ----工作流程---- 提高了使用规范文档的可用性 更新了入门套装文档和默认项目 简化了安装过程中的许可证设置 对GUI工作流程的改进 兼容性注意事项 ----错误修复---- 框架的错误修复 规范和检查的错误修复 MES Model & Refactor (MoRe) v.4.21功能亮点 改进了“Auto Layout(自动布局)”以实现高质量布局 现在,“Auto Layout(自动布局)”生成的布局变得更加易读:大型子系统的线路走向更为清晰,与端口模块连接的线路交叉更少,且模块能更好地水平对齐。 “自动布局” :更好地将信号线传送到顶部端口 现在,连接到顶部端口的信号线的布线更加合理,可以最大限度地减少线路弯曲。以前,连接模块顶部端口的线路可能会出现不必要的弯曲。 “自动布局”和“优化布局” :更清晰的信号线路由 现在,通过保持信号线之间的一个最小距离,提高了信号线的可追溯性。以前,信号线有时走的太近,在极少数情况下,它们甚至重叠。 MES Quality Commander (MQC) v.7.5功能亮点 通过RESTful API连接器实现强大的数据源访问(beta) 通过Gitlab API等RESTful API,您可以灵活且高效地访问Gitlab项目中的数据。除了标准文件阅读器和git连接器,MQC现已增加新的API连接器。 这允许您使用Gitlab管道工件连接器直接从管道中检索工件。 改进了质量模型配置的验证 我们增加了更多检查,以确保质量模型配置在导入时保持一致。如果存在任何不一致,系统将发出警告,以便您修复配置。
  • 热度 11
    2022-9-8 11:20
    1198 次阅读|
    0 个评论
    Tips: 现阶段模型开发大部分采用Simulink,为了验证模型实现了相关功能,需要对模型进行测试。模型测试(MiL)有单元测试和集成测试之分。单元测试中模型复杂度低,信号参数数量少,测试用例数量少,用例时间短,通常为开环测试,测试用例运行总时长在可接受范围内。但是集成测试不同,由于模型结构复杂,信号参数数量庞大,加之测试用例时间长,导致需要处理大量信号数据(很多情况包含被控对象),测试运行总时间往往很长。 最近,有小伙伴向我们反馈,集成测试由于模型复杂度高,测试用例多,导致执行耗时非常长,TPT有没有加速测试的方法。 当然有了,有需求就会有解决方案。接下来向大家介绍TPT中加速运行的方法。 TPT结合Simulink自带的加速测试功能 1)TPT调用Simulink “Accelerator”或“Rapid Accelerator”模式 在TPT18中,可以指定Simulink的运行模式,分别为“Normal”、“Accelerator”和“Rapid Accelerator”,我们可以选择“Accelerator”或“Rapid Accelerator”模式,加速运行。 使用 Simulink 自带的demo集成模型进行演示,运行相同的用例,并统计不同模式的运行时间。 在TPT中选择运行模式。 以上结果可知,选择“Accelerator”或“Rapid Accelerator”模式后,运行速度有一定程度的提升。 2)TPT调用Simulink “Fast Restart” 我们也可以勾选“Fast restart”来提高运行速度。需要注意的是,“Rapid accelerator”模式不支持“Fast restart”。 Tips: Fast restart:即快速重启,可避免再次编译。当以迭代方式仿真模型时,开启“Fast restart”后无需每次迭代时编译模型,提高测试速度。 Rapid Accelerator:Rapid Accelerator模式会根据被测模型创建可执行文件,使用external mode与Simulink进行通讯。 TPT多核运行模式 默认情况下,TPT运行时只会选择一个CPU内核进行测试。当测试用例较多时,可以选择多核模式,开启多个MATLAB运行测试。 在运行配置中点击“Use one core”。 填写想要使用的数量,比如2核。 我们可以看到,同时有2条测试用例在执行。 可用核数取决于电脑配置,可以在设备管理器中的处理器查看。 合并报告 在集成测试时,测试用例执行总时间很长。当遇到某条测试用例出现问题时,为了获取完整的测试报告,修改测试用例之后还需运行全部的测试用例。这样做的时间成本很高,还有没有其他的方式呢?答案是肯定的。 在TPT中,支持合并报告,如下进行说明。 首次运行工程后,存在未通过测试用例。 修改“Test_Case_002”测试用例,并运行。 选择所有测试用例,在“Run”处点击“Generate overview report”即可生成包含所有测试用例的报告。 最后,可以看到,测试报告包含全部测试用例。 通过以上方法,TPT能够使得测试提速,减少时间成本。TPT提速测试并不局限于上述内容,如果着眼于整个测试过程,状态机测试用例的可视化、功能需求与测试用例和评估的双向追溯关系、适用于全局的评估等都能够加速测试。此外,TPT能够集成Jenkins部署CICT,实现自动化的测试流程。 PikeTec公司 是全球知名的基于模型的嵌入式系统测试工具TPT的软件供应商,总部位于德国柏林。北汇信息作为PikeTec在中国的独家合作伙伴,致力于帮助中国客户提升嵌入式控制系统的开发效率。目前,TPT已被众多国内知名主机厂和零部件企业认可,在新能源(VCU/BMS/MCU)以及ADAS等领域中被广泛应用。
  • 热度 5
    2021-3-15 12:11
    130200 次阅读|
    3 个评论
    需要将某一目录下的某一类型的数据文件进行批量处理,可以编写一个递归调用的函数。 function getdata(dirname) %dirname 为主目录名,字符串 d = dir(dirname) %使用dir 方法,获取dirname目录下所有的目录和文件信息 for i = 3:length(d) %目录文件信息包含有 . .. 当前目录和上级目录,所以从3号开始处理 if(d(i).isdir) %判断如果是属于目录 subdirname = strcat(dirname,'\',d(i).name); %生成新的目录信息 getdata(subdirname); %递归调用getdata函数 else f = strcat(dirname,'\'); %如果是需要处理的文件 dataprocess(f,d(i).name) %生成目录信息和文件信息,调用自定义的数据处理函数进行处理。 end end 这样只要指定主目录就能一次性处理完成 dirname = uigetdir('Pick a Dir'); getdata(dirname)
  • 热度 5
    2020-9-8 09:10
    3378 次阅读|
    0 个评论
    matlab 生成 测温电阻  Rt表
    由 B 值可以推导出不同温度 t 下的电阻值 R = R0 * exp(B*(1/t - 1/T0)); 其中 R 为温度 t 下的电阻值 R0 为 25 度时的电阻值 T0 为 25 度 注:上述温度值都应是开氏温度,也就是说,需要加上绝对零度值 273.15 下面是从 0~100 度,间隔 0.1 度生成的 Rt 表, B 值,上拉电阻值可以修改成所需要的。 K = 273.15; B = 3950; T0 = K + 25; R0 = 10000; % 25 度时的阻值 Ru = 5000; % 上拉电阻 i = 0:1023; outstr = sprintf(' /* B const %d */ \n const Rt = {'; %outstr = ; t = i / 10 + K; R = R0 * exp(B*(1./t - 1/T0)); Vo = 3.3 * R./(Ru+R) Rt = round( Vo / 3.3 * 4096); for j = 1:length(Rt) if mod(j,16) == 0 outstr = ; else outstr = ; end end outstr = plot(i/10,Rt) outstr = sprintf('B %d Rpu %d ',B,Ru); Title(outstr) /* B const 3950 Rpu 5000 */ const Rt[] = { 3566, 3563, 3561, 3558, 3556, 3553, 3551, 3548, 3546, 3543, 3541, 3538, 3536, 3533, 3531, 3528, 3526, 3523, 3520, 3518, 3515, 3513, 3510, 3507, 3505, 3502, 3500, 3497, 3494, 3492, 3489, 3486, 3484, 3481, 3478, 3475, 3473, 3470, 3467, 3464, 3462, 3459, 3456, 3453, 3451, 3448, 3445, 3442, 3439, 3437, 3434, 3431, 3428, 3425, 3422, 3419, 3417, 3414, 3411, 3408, 3405, 3402, 3399, 3396, 3393, 3390, 3387, 3384, 3381, 3378, 3376, 3373, 3370, 3367, 3363, 3360, 3357, 3354, 3351, 3348, 3345, 3342, 3339, 3336, 3333, 3330, 3327, 3324, 3320, 3317, 3314, 3311, 3308, 3305, 3302, 3298, 3295, 3292, 3289, 3286, 3282, 3279, 3276, 3273, 3270, 3266, 3263, 3260, 3257, 3253, 3250, 3247, 3243, 3240, 3237, 3233, 3230, 3227, 3224, 3220, 3217, 3213, 3210, 3207, 3203, 3200, 3197, 3193, 3190, 3186, 3183, 3179, 3176, 3173, 3169, 3166, 3162, 3159, 3155, 3152, 3148, 3145, 3141, 3138, 3134, 3131, 3127, 3124, 3120, 3117, 3113, 3110, 3106, 3102, 3099, 3095, 3092, 3088, 3085, 3081, 3077, 3074, 3070, 3066, 3063, 3059, 3055, 3052, 3048, 3045, 3041, 3037, 3033, 3030, 3026, 3022, 3019, 3015, 3011, 3008, 3004, 3000, 2996, 2993, 2989, 2985, 2981, 2978, 2974, 2970, 2966, 2962, 2959, 2955, 2951, 2947, 2943, 2940, 2936, 2932, 2928, 2924, 2920, 2917, 2913, 2909, 2905, 2901, 2897, 2893, 2889, 2886, 2882, 2878, 2874, 2870, 2866, 2862, 2858, 2854, 2850, 2846, 2843, 2839, 2835, 2831, 2827, 2823, 2819, 2815, 2811, 2807, 2803, 2799, 2795, 2791, 2787, 2783, 2779, 2775, 2771, 2767, 2763, 2759, 2755, 2751, 2747, 2743, 2739, 2735, 2731, 2727, 2723, 2719, 2714, 2710, 2706, 2702, 2698, 2694, 2690, 2686, 2682, 2678, 2674, 2670, 2666, 2661, 2657, 2653, 2649, 2645, 2641, 2637, 2633, 2629, 2625, 2620, 2616, 2612, 2608, 2604, 2600, 2596, 2591, 2587, 2583, 2579, 2575, 2571, 2567, 2563, 2558, 2554, 2550, 2546, 2542, 2538, 2533, 2529, 2525, 2521, 2517, 2513, 2508, 2504, 2500, 2496, 2492, 2488, 2483, 2479, 2475, 2471, 2467, 2463, 2458, 2454, 2450, 2446, 2442, 2437, 2433, 2429, 2425, 2421, 2417, 2412, 2408, 2404, 2400, 2396, 2391, 2387, 2383, 2379, 2375, 2370, 2366, 2362, 2358, 2354, 2349, 2345, 2341, 2337, 2333, 2329, 2324, 2320, 2316, 2312, 2308, 2303, 2299, 2295, 2291, 2287, 2283, 2278, 2274, 2270, 2266, 2262, 2257, 2253, 2249, 2245, 2241, 2237, 2232, 2228, 2224, 2220, 2216, 2212, 2207, 2203, 2199, 2195, 2191, 2187, 2182, 2178, 2174, 2170, 2166, 2162, 2158, 2153, 2149, 2145, 2141, 2137, 2133, 2129, 2124, 2120, 2116, 2112, 2108, 2104, 2100, 2096, 2091, 2087, 2083, 2079, 2075, 2071, 2067, 2063, 2059, 2055, 2050, 2046, 2042, 2038, 2034, 2030, 2026, 2022, 2018, 2014, 2010, 2006, 2002, 1998, 1993, 1989, 1985, 1981, 1977, 1973, 1969, 1965, 1961, 1957, 1953, 1949, 1945, 1941, 1937, 1933, 1929, 1925, 1921, 1917, 1913, 1909, 1905, 1901, 1897, 1893, 1889, 1885, 1881, 1877, 1873, 1870, 1866, 1862, 1858, 1854, 1850, 1846, 1842, 1838, 1834, 1830, 1826, 1823, 1819, 1815, 1811, 1807, 1803, 1799, 1795, 1791, 1788, 1784, 1780, 1776, 1772, 1768, 1765, 1761, 1757, 1753, 1749, 1745, 1742, 1738, 1734, 1730, 1726, 1723, 1719, 1715, 1711, 1708, 1704, 1700, 1696, 1693, 1689, 1685, 1681, 1678, 1674, 1670, 1666, 1663, 1659, 1655, 1652, 1648, 1644, 1641, 1637, 1633, 1630, 1626, 1622, 1619, 1615, 1611, 1608, 1604, 1600, 1597, 1593, 1590, 1586, 1582, 1579, 1575, 1572, 1568, 1565, 1561, 1557, 1554, 1550, 1547, 1543, 1540, 1536, 1533, 1529, 1526, 1522, 1519, 1515, 1512, 1508, 1505, 1501, 1498, 1494, 1491, 1487, 1484, 1480, 1477, 1474, 1470, 1467, 1463, 1460, 1456, 1453, 1450, 1446, 1443, 1440, 1436, 1433, 1429, 1426, 1423, 1419, 1416, 1413, 1409, 1406, 1403, 1400, 1396, 1393, 1390, 1386, 1383, 1380, 1377, 1373, 1370, 1367, 1364, 1360, 1357, 1354, 1351, 1347, 1344, 1341, 1338, 1335, 1331, 1328, 1325, 1322, 1319, 1316, 1312, 1309, 1306, 1303, 1300, 1297, 1294, 1291, 1287, 1284, 1281, 1278, 1275, 1272, 1269, 1266, 1263, 1260, 1257, 1254, 1251, 1248, 1245, 1242, 1239, 1236, 1233, 1230, 1227, 1224, 1221, 1218, 1215, 1212, 1209, 1206, 1203, 1200, 1197, 1194, 1191, 1188, 1186, 1183, 1180, 1177, 1174, 1171, 1168, 1165, 1163, 1160, 1157, 1154, 1151, 1148, 1146, 1143, 1140, 1137, 1134, 1132, 1129, 1126, 1123, 1120, 1118, 1115, 1112, 1109, 1107, 1104, 1101, 1099, 1096, 1093, 1090, 1088, 1085, 1082, 1080, 1077, 1074, 1072, 1069, 1066, 1064, 1061, 1058, 1056, 1053, 1051, 1048, 1045, 1043, 1040, 1038, 1035, 1032, 1030, 1027, 1025, 1022, 1020, 1017, 1015, 1012, 1010, 1007, 1005, 1002, 999, 997, 995, 992, 990, 987, 985, 982, 980, 977, 975, 972, 970, 968, 965, 963, 960, 958, 955, 953, 951, 948, 946, 944, 941, 939, 936, 934, 932, 929, 927, 925, 922, 920, 918, 916, 913, 911, 909, 906, 904, 902, 900, 897, 895, 893, 891, 888, 886, 884, 882, 879, 877, 875, 873, 871, 868, 866, 864, 862, 860, 858, 855, 853, 851, 849, 847, 845, 842, 840, 838, 836, 834, 832, 830, 828, 826, 824, 821, 819, 817, 815, 813, 811, 809, 807, 805, 803, 801, 799, 797, 795, 793, 791, 789, 787, 785, 783, 781, 779, 777, 775, 773, 771, 769, 767, 765, 763, 761, 760, 758, 756, 754, 752, 750, 748, 746, 744, 742, 741, 739, 737, 735, 733, 731, 729, 728, 726, 724, 722, 720, 718, 717, 715, 713, 711, 709, 708, 706, 704, 702, 700, 699, 697, 695, 693, 692, 690, 688, 686, 685, 683, 681, 680, 678, 676, 674, 673, 671, 669, 668, 666, 664, 663, 661, 659, 658, 656, 654, 653, 651, 649, 648, 646, 644, 643, 641, 640, 638, 636, 635, 633, 632, 630, 628, 627, 625, 624, 622, 621, 619, 617, 616, 614, 613, 611, 610, 608, 607, 605, 604, 602, 601, 599, 598, 596, 595, 593, 592, 590, 589, 587, 586, 584, 583, 581, 580, 578, 577, 575, 574, 573, 571, 570, 568, 567, 565, 564, 563, 561, 560, 558, 557, 556, 554, 553, 551, 550, 549, 547, 546, 545, 543, 542, 540, 539, 538, 536, 535, 534, 532, 531, 530, 528, 527, 526, 524, 523, 522, 521, 519, 518, 517, 515, 514, 513, 512, 510, 509, 508, 506, 505, 504, 503, 501, 500, 499, 498, 496, 495, 494, 493, 492, 490, 489, 488, 487, 486, 484, 483, 482, 481, 480, 478, 477, 476, 475, 474, };
相关资源