分类目录:摩登3官网注册

摩登3平台首页_吐血整理的万字Linux内核源码规范

从编码风格错误开始 快速修改编码风格的工具 scripts/checkpatch.pl scripts/Lindent astyle Linux 内核代码风格 1 缩进 2 把长的行和字符串打散 3 大括号和空格的放置 4 命名 5 Typedef 6 函数 7 集中的函数退出途径 8 注释 9 你已经把事情弄糟了 10 Kconfig 配置文件 11 数据结构 12 宏,枚举和RTL 13 打印内核消息 14 分配内存 15 内联弊病 16 函数返回值及命名 17 不要重新发明内核宏 18 编辑器模式行和其他需要罗嗦的事情 19 内联汇编 20 条件编译 从编码风格错误开始 曾经在开发Linux内核驱动的时候,创建了一个补丁文件,但是在把补丁打到主分支的时候提示很多编码风格的错误问题,后来重做了补丁才解决了问题,这也是没有严格按照的Linux编码风格从而导致的问题。因为当时代码量不大,所以解决问题的时间相对较少。在代码量增大的情况下可以借助工具进行自动修改。 快速修改编码风格的工具 scripts/checkpatch.pl 这是一个检查patch是否符合内核编码规范的脚本。默认的调用也确实如此。如果用来检查原文件,需要加上-f的选项。 scripts/Lindent 源码路径下的scripts目录中的工具Lindent可以用来自动修改缩进问题。不过使用Lindent要求系统安装indent这个工具。Ubuntu系统下可以使用apt-get install indent进行「安装」。 astyle 比较推荐使用这个工具,因为比较相当方便,可以一键式转换成linux,java,gnu等等风格。 下载地址项目地址文档说明 如何使用,可以参考具体文档说明,写的比较详细。 总而言之,应该顾全大局,在进行内核开发和驱动开发的时候,严格遵守Linux的编码规范,避免由于编码不规范带来的种种问题,可以参考内核路径下Documentation/CodingStyle文档,以下转自Linux内核文档,最权威的文档路径,很全很强大,原来在这个网站上已经有中文版了,感谢万分,具体的更新可以跳转到你懂的网址。 「来自 Documentation/process/coding-style.rst 的中文翻译」 Linux 内核代码风格 这是一个简短的文档,描述了 linux 内核的首选代码风格。代码风格是因人而异的, 而且我不愿意把自己的观点强加给任何人,但这就像我去做任何事情都必须遵循的原则 那样,我也希望在绝大多数事上保持这种的态度。请 (在写代码时) 至少考虑一下这里 的代码风格。 首先,我建议你打印一份 GNU 代码规范,然后不要读。烧了它,这是一个具有重大象征性意义的动作。 不管怎样,现在我们开始: 1 缩进 制表符是 8 个字符,所以缩进也是 8 个字符。有些异端运动试图将缩进变为 4 (甚至 2!) 字符深,这几乎相当于尝试将圆周率的值定义为 3。 理由:缩进的全部意义就在于清楚的定义一个控制块起止于何处。尤其是当你盯着你的 屏幕连续看了 20 小时之后,你将会发现大一点的缩进会使你更容易分辨缩进。 现在,有些人会抱怨 8 个字符的缩进会使代码向右边移动的太远,在 80 个字符的终端 屏幕上就很难读这样的代码。这个问题的答案是,如果你需要 3 级以上的缩进,不管用 何种方式你的代码已经有问题了,应该修正你的程序。 简而言之,8 个字符的缩进可以让代码更容易阅读,还有一个好处是当你的函数嵌套太 深的时候可以给你警告。留心这个警告。 在 switch 语句中消除多级缩进的首选的方式是让 switch 和从属于它的 case 标签对齐于同一列,而不要 两次缩进 case 标签。比如: switch (suffix) {case 'G':case 'g':        mem <<= 30;        break;case 'M':case 'm':        mem <<= 20;        break;case 'K':case 'k':        mem <<= 10;        /* fall through */default:        break;} 不要把多个语句放在一行里,除非你有什么东西要隐藏: if (condition) do_this;  do_something_everytime;…

摩登3测速代理_在SMT32程序HEX文件中加入固件版本信息

本文内容转自阿莫论坛,作者icode 整理排版:单片机爱好者 分享一个小技巧,使用MDK编译器,让STM32程序HEX文件中加入固件版本信息,估计很多老手都已经在使用(你有好的方法欢迎分享,希望我的砖能引来你的玉),该方法献给新手或初学者。 代码如下: //------------------------------------------------------------------------------#include //------------------------------------------------------------------------------#define VERINFO_ADDR_BASE   (0x8009F00) // 版本信息在FLASH中的存放地址const char Hardware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x00)))  = "Hardware: 1.0.0";const char Firmware_Ver[] __attribute__((at(VERINFO_ADDR_BASE + 0x20)))  = "Firmware: 1.0.0";const char Compiler_Date[] __attribute__((at(VERINFO_ADDR_BASE + 0x40))) = "Date: "__DATE__;const char Compiler_Time[] __attribute__((at(VERINFO_ADDR_BASE + 0x60))) = "Time: "__TIME__;//------------------------------------------------------------------------------ 写入到程序中: 选项配置中:Flash地址与大小不用做任何修改! HEX文件: 串口打印输出: xiaomu: 这样可以, 但是有一个缺点,就是生成的bin文件都是满flash大小的, 造成每次烧录都是整个flash读写。 其实这个可以把存放地址放到前面,比如偏移1K的地方,都不用改指定地址 icode: 是的, 程序末尾 到 VERINFO_ADDR_BASE地址这一段会被填充成0x00, 根据需要可以修改 VERINFO_ADDR_BASE 减小地址 或者说 不强制指定地址,  由编译器自动分配, 但这样就要去找相应的版本标识字符串了。 不想前面这一段被大量填充0x00,让HEX文件体积小一点的话, 可以把选项配置中Flash的Size改小一点,把VERINFO_ADDR_BASE设置成从FlashSize后面的空间开始,这样生成的HEX文件就小了,且未用空间就不会被大量填充0x00了。 方法如下: 免责声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。 猜你喜欢 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台注册登录_国内罕见,半导体“双翼”龙头

连续聊了2天无线通信模组,今天又回到半导体板块。昨天留言区有两位小伙伴对赛微电子产生疑问,原因是8英寸晶圆产能吃紧,是否有利赛微电子? 确实利好赛微电子,但赛微电子主要针对MEMS的晶圆,并非涉及处理器、其他芯片的其他晶圆。 华叔Tips:MEMS芯片其实一个微电子加工的机械装置,比如将马达、陀螺仪、反射镜面都做成MEMS芯片的大小。有多小?比螨虫还要小,可以说巧夺精工。 MEMS优点在于有更低功耗、更轻重量、更好量产和一致性。我们手机摄像头的光学防抖模组,就是用MEMS技术做成驱动芯片制造。 而赛微电子旗下子公司瑞典Silex,是全球10大MEMS代工厂,营收全球排第3,超越台积电、索尼,仅次于意法半导体、TELEDYNE。 而且,全球光刻机龙头都是用Silex提供的透镜系统MEMS部件。最近赛微电子在北京建设的8英寸MEMS项目已经投产,产能1万片/月(带来7~8亿元营收),最终目标是3万片/月。而瑞典Silex从6英寸提升至8英寸,产能升至7000万片/月。 其实,8英寸吃紧不仅仅对赛微电子有利,涉及晶圆代工的厂商还包括:台积电、中芯国际、华虹半导体、华润微。 中芯国际之前我们聊过了,今天不打算讲单项专业选手的赛微电子,重点放在十项全能的华润微,它的晶圆代工产品更广泛,不仅限于MEMS,还有其他领域。 我们先看看为何8英寸晶圆会吃紧? 现在许多分立器件、功率器件、MEMS、模拟芯片都切换至8英寸晶圆,加重了8英寸产能负荷,导致这一年8英寸晶圆产能吃紧。 8英寸(200mm)晶圆厂还是主流,但随着12英寸(300mm)每年新建数量的增加,已成当前主流。根据IC Insights预计,2021年全球12英寸晶圆厂将增长至123座,到2023年全球12英寸晶圆厂总数将达到138座。 由于龙头都将重心放置12英寸晶圆,8英寸晶圆厂数量在持续下滑。另外, 8英寸晶圆厂的设备有限,二手设备昂贵又流通量少,导致8英寸晶圆新产能增长有限。 其实,8英寸晶圆吃紧从今年二季度就有传,这样会影响哪些公司?首先,IC设计厂商成本提升,面板驱动、触控等零组件升价。 说完大环境后,华叔重点聊聊华润微,它是国资委的华润集团旗下子公司。另外,华润电力、华润置地、华润水泥控股、华润燃气、华润医药、华润啤酒在港股上市,华润三九、华润双鹤、东阿阿胶、江中药业在A股上市。 华润微拥有芯片设计、晶圆制造、封装测试等全产业链的半导体龙头,这种也叫IDM模式,即包办:芯片设计、制造、封装和测试等环节。也是国内10大半导体企业中,唯一一家拥有IDM模式的企业,也是国内最大的功率器件厂商,国内营收最大、技术最领先的MOSFET厂商。 讲真,华润微涉及业务真的太多太多了,这里包括两大块:产品与方案(IDM模式,即全产业链模式,全部自己从设计到生产、销售包办)、制造与服务(即代工模式)。 产品与方案包括:功率半导体、智能控制、智能传感器。这里收入占比最高是功率器件,约占该产品与方案业务的90%收入,传感器、控制器业务规模尚小。 看到这一块是否似曾相似,对,之前我们聊过的圣邦股份、芯海科技、思瑞浦就是做模拟IC,也就是包含信号链IC、电源管理IC、MCU微控制器,只是华润微主要是做电源管理IC。 制造与服务包括:晶圆制造、封装测试、掩模制造。 一、商业模式 产品与方案—— 功率器件占该业务营收最大,而MOSFET又是占功率器件中收入最多的业务,华润微国内拥有全部MOSFET产品研发、制造能力的主要厂商,华润微的低压MOS市占率超70%。 2019年,MOSFET占该业务62%收入、功率IC占14%、传感器占6%、IGBT和MCU控制器占7%。IDM模式利于积累工艺经验提升竞争优势、利于技术沉淀、提供差异化产品、缩短产品周期、提升产品附加值,形成经营闭环。 华润微成长逻辑中,最关键是3点: 1、MOS行业高景气增长。 2、国产替代实现份额提升。 3、产能、先进工艺不断优化。 今年上半年,MOS产品技术迭代,不断创新丰富产品线,收入同比+21.43%。主要原因是电动车对低压MOS需求、园林工具、4G\5G基站储能、电机驱动等需求带动,还有高压MOS,如手机快充和电源等。 IGBT累积多项自主知识产权核心技术,为UPS、逆变器、变频器等领域客户丰富产品,收入同比+49.9%。IGBT主要是工业焊机和跑步机驱动,可能是由于疫情导致大家在家运动。 疫情带动下,MCU在额温枪、额温枪、电子体温计等产品需求强劲,同比+598%,光电传感产品同比+45%。而烟雾报警器产品成功导入品牌客户,电源产品导入国内品牌空调客户。MEMS传感器增速快,主要是医疗电子驱动,还有汽车的胎压检测等领域。 制造与服务—— 华润微除了晶圆自给自足,还提供晶圆代工,包含6、8英寸的代工服务,是国内前3的本土晶圆代工企业。 另外,在内资企业中市占率第1,是国内最大的本土掩模制造企业。 这里主要看下游需求,最近需求旺盛,产能吃紧,上面也说了,这里就不再重复了。 二、基本面 制造及服务,及晶圆类等业务收入依然占比最高,超一半以上。产品与方案即半导体、控制器、传感器业务在这几年收入不断攀升,已经上涨至45%左右。 华润微国内业务依然是大头,收入超80%,国外业务不到20%。 产品业务受到国产替代、产品结构改善,毛利率持续稳步上升,有一定原因是传感器毛利率带动,疫情导致传感器毛利率达到50%,同比+50%,对毛利增长贡献较大,三季度欧洲第二波疫情爆发,即使不会再快速上升,至少目前毛利率会持续一段时间。 前面内容都写了业绩增长的原因,主要是因为疫情带动,还有新能源车、快充需求带动。 三季度,华润微营收同比+18.32%,净利润同比+154.59%,扣非净利润同比+355.8%。 华润微流动资金非常充足,负债率32%,存货12.82亿元,净资产96.67亿元,存货占净资产13.26%。这些数据都看不出有华润微有资金风险和存货计提风险。 另外,华润微还要关注它的折旧问题,上半年减少4000万,今年减少6000~7000万,预计要到2023年才能进入折旧稳定期,明年折旧额大概减少5000万。还有,华润微产能利用率很满,导致没有多余的产能用于做研发,三季度会有改善空间。 三、前景 上面说过,华润微很看重MOS的行业景气度,根据Yole,2017年全球IGBT、MOS规模为104亿美元,预计2023年,功率半导体规模会增长至132亿美元,IGBT占63%、预计5G建设会拉通信对MOS需求,实现5年8.3%的复合增长。 尤其疫情影响下,MOS更加缺货严重,全球龙头的英飞凌高压MOS交货期超16周,其他厂商交期超20周,导致目前行业产线饱满、供不应求。 而在晶圆代工8英寸未见扩张,导致2020年产能吃紧持续。根据IC Insights, 2019年全球仅有720万片8寸,预计2020年全球晶圆产能将新增1790万片,2021年新增产能将创新高2080万片。 另外,华润微还布局第三代半导体,打开成长空间。 受新能源车庞大需求的驱动,以及光伏风电、充电桩等领域,对于效率和功耗要求提升,预计到2027年碳化硅功率器件市场规模将超100亿美元,18~27年9年的复合增速接近 40%。 IDM模式这一块优势就不再重复了,上面也说过。 四、风险 1、半导体行业景气度不及预期。 2、产品研发不及预期。 3、未来持续巨额资金投入风险。 4、行业竞争风险。 5、与国际领先厂商存在技术差距的风险。 五、投资逻辑 券商预计2021年华润微净利润为11.32亿元,考虑明年可能疫情会逐步受控,疫情带来的红利将减退,华叔给出明年预计净利润在10.5亿元,预计PE在50~55倍,对应合理市值区间是525~577.5亿,目前华润微的市值691.38亿元已经透支未来业绩增长。 其他重点资讯—— 1、先导智能:近期中标宁德时代32.28亿元(不含税)锂电池生产设备项目,约占公司2019年经审计营收总额的68.92%。此次中标有利于公司及子公司在新能源电池领域的业务拓展,提高公司收入规模及盈利能力。 2、歌尔股份:筹划控股子公司歌尔微电子分拆上市。歌尔微电子主要从事公司MEMS麦克风、MEMS传感器、微系统模组等相关产品的设计、制造和销售,产品主要应用于智能手机、智能无线耳机、可穿戴产品、汽车电子等领域。 这两天下跌都是受到这消息影响,华叔会抽时间写相关推文,市场有可能跟之前星网锐捷解读一样,这样是否影响母公司利润? 3、荣耀买家基本敲定:渠道商组合深圳星盟接盘,华为高管留守。从消息人士处获悉,华为出售荣耀一事基本敲定,本月晚些时候将正式对外宣布。从股东名单看,星盟信息都是手机渠道商。新公司第一大股东北京松联科技有限公司原本就是荣耀的代理商。此外,普天、中邮器材等都是国资背景的手机代理商分销商。天音通信有限公司经营范围包括通信产品的购销及技术服务,是A股上市公司天音控股的全资子公司。 路透社消息称,荣耀此次出售价格为150亿美元,即1000亿人民币。但另有知情人称,对照小米的市值,荣耀出售价格可能定在2000亿元。 来抄作业了,价格换算回到华叔聊5G首页,点击“估值查询”进入股价换算器,教程在对话框输入“估值”获取。 最后提醒,投资有风险,数据仅为跟踪记录。 在华叔聊5G首页回复“5G”获取5G科技指数。 微信每次改版都让华叔非常揪心,小伙伴都说找不到华叔,,微信怎么改版也能找到华叔。 企业推文快速查询方法: 方法一:回到“华叔聊5G”首页,点入“”即可查阅。 方法二:在华叔聊5G首页右上角点击“”,进入历史消息页面点击右上角的“”,,回车后即可获取相关推文。 顺便在历史消息中点击“”,星标华叔聊5G,这样找华叔更方便哦。 最全的5G信息就在这里▼ 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3测速登陆_11月程序员工资统计出炉!平均14327元

2020年11月全国招收程序员340579人。2020年11月全国程序员平均工资14327元,工资中位数12500元,其中96%的人的工资介于3000元到85000元。 排名 city 平均工资 最低工资 中位数 最高工资 招聘人数 百分比 1 北京 17716 5250 16000 47500 26127 8.47% 2 深圳 17041 5250 15000 45000 49849 16.16% 3 上海 17000 5250 16000 45000 56069 18.18% 4 杭州 15707 5250 14000 45000 17234 5.59% 5 南京 13881 5250 12500 30000 17316 5.61% 6 广州 13819 5000 12500 35000 33709 10.93% 7 东莞 13296 5000 12500 35000 3950 1.28% 8 苏州 13133 5250 12500 30000 9997 3.24% 9 成都 12563 3750 12000 32500 16545 5.36% 10 厦门 12535 5000 12150 26500 1946 0.63% 11 合肥 12441 5000 11500 30000 5529 1.79% 12 武汉 12210 4750 11500 30000 18298 5.93% 13 长沙 11946 5000 11500 30000 6665 2.16% 14 大连 11912 4250 10500 31000 5715…

摩登3登录网站_中国研制的“空中出租车”在韩试飞,可垂直起降

日前,据媒体报道,韩国首尔市政府11日在首尔汝矣岛上空开展了“空中出租车”无人试飞活动,一款中国研制的自动驾驶飞行器参加试飞。 -End- 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册平台官网_Linux系统中,为什么需要区分内核空间与用户空间?

本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。 内核空间和用户空间 对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。 操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作系统一般都强制用户进程不能直接操作内核。 具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间,另一部分为用户空间。针对 Linux 操作系统而言,最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF)由内核使用,称为内核空间。而较低的 3G 字节(从虚拟地址 0x00000000 到 0xBFFFFFFF)由各个进程使用,称为用户空间。 对上面这段内容我们可以这样理解:「每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空间。只有剩余的 3G 才归进程自己使用。」 「换句话说就是, 最高 1G 的内核空间是被所有进程共享的!」下图描述了每个进程 4G 地址空间的分配情况(此图来自互联网): 为什么需要区分内核空间与用户空间 在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。 所以,CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造成灾难的指令。 比如 Intel 的 CPU 将特权等级分为 4 个级别:Ring0~Ring3。其实 Linux 系统只使用了 Ring0 和 Ring3 两个运行级别(Windows 系统也是一样的)。 当进程运行在 Ring3 级别时被称为运行在用户态,而运行在 Ring0 级别时被称为运行在内核态。 内核态与用户态 好了我们现在需要再解释一下什么是内核态、用户态:「当进程运行在内核空间时就处于内核态,而进程运行在用户空间时则处于用户态。」 在内核态下,进程运行在内核地址空间中,此时 CPU 可以执行任何指令。运行的代码也不受任何的限制,可以自由地访问任何有效地址,也可以直接进行端口的访问。 在用户态下,进程运行在用户地址空间中,被执行的代码要受到 CPU 的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中 I/O 许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问。 对于以前的 DOS 操作系统来说,是没有内核空间、用户空间以及内核态、用户态这些概念的。可以认为所有的代码都是运行在内核态的,因而用户编写的应用程序代码可以很容易的让操作系统崩溃掉。 对于 Linux 来说,通过区分内核空间和用户空间的设计,隔离了操作系统代码(操作系统的代码要比应用程序的代码健壮很多)与应用程序代码。 即便是单个应用程序出现错误也不会影响到操作系统的稳定性,这样其它的程序还可以正常的运行(Linux 可是个多任务系统啊!)。 「所以,区分内核空间和用户空间本质上是要提高操作系统的稳定性及可用性。」 如何从用户空间进入内核空间 其实所有的系统资源管理都是在内核空间中完成的。比如读写磁盘文件,分配回收内存,从网络接口读写数据等等。 我们的应用程序是无法直接进行这样的操作的。但是我们可以通过内核提供的接口来完成这样的任务。 比如应用程序要读取磁盘上的一个文件,它可以向内核发起一个 “系统调用” 告诉内核:”我要读取磁盘上的某某文件”。 其实就是通过一个特殊的指令让进程从用户态进入到内核态(到了内核空间),在内核空间中,CPU 可以执行任何的指令,当然也包括从磁盘上读取数据。具体过程是先把数据读取到内核空间中,然后再把数据拷贝到用户空间并从内核态切换到用户态。 此时应用程序已经从系统调用中返回并且拿到了想要的数据,可以开开心心的往下执行了。简单说就是应用程序把高科技的事情(从磁盘读取文件)外包给了系统内核,系统内核做这些事情既专业又高效。 对于一个进程来讲,从用户空间进入内核空间并最终返回到用户空间,这个过程是十分复杂的。举个例子,比如我们经常接触的概念 “堆栈”,其实进程在内核态和用户态各有一个堆栈。 运行在用户空间时进程使用的是用户空间中的堆栈,而运行在内核空间时,进程使用的是内核空间中的堆栈。所以说,Linux 中每个进程有两个栈,分别用于用户态和内核态。 下图简明的描述了用户态与内核态之间的转换: 既然用户态的进程必须切换成内核态才能使用系统的资源,那么我们接下来就看看进程一共有多少种方式可以从用户态进入到内核态。 概括的说,有三种方式:系统调用、软中断和硬件中断。这三种方式每一种都涉及到大量的操作系统知识,所以这里不做展开。 整体结构 接下来我们从内核空间和用户空间的角度看一看整个 Linux 系统的结构。它大体可以分为三个部分,从下往上依次为:硬件 -> 内核空间 -> 用户空间。如下图所示(此图来自互联网): 在硬件之上,内核空间中的代码控制了硬件资源的使用权,用户空间中的代码只有通过内核暴露的系统调用接口(System Call Interface)才能使用到系统中的硬件资源。其实,不光是 Linux,Windows 操作系统的设计也是大同小异。 实际上我们可以将每个处理器在任何指定时间点上的活动概括为下列三者之一: 运行于用户空间,执行用户进程。 运行于内核空间,处于进程上下文,代表某个特定的进程执行。 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。 以上三点几乎包括所有的情况,比如当 CPU 空闲时,内核就运行一个空进程,处于进程上下文,但运行在内核空间。…

摩登3平台开户_架构设计:业务逻辑和技术分离

架构 1. 什么是架构? 关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。 硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。 架构始于建筑,是因为人类发展(原始人自给自足住在树上,也就不需要架构),分工协作的需要,将目标系统按某个原则进行切分,切分的原则,是要便于不同的角色进行并行工作。 2. 为什么需要架构? 有系统的地方就需要架构,大到航空飞机,小到一个电商系统里面的一个功能组件都需要设计和架构。 我很喜欢《系统架构:复杂系统的产品设计与开发》里面的一句话:结构良好的创造活动要优于毫无结构的创造活动。 与之相对应的,现在很多敏捷思想提倡 no design,只要 work 就好。期待好的架构可以在迭代中自然涌现。这个想法有点太理想化了,在现实中,只要能 work 的代码,工程师是很少有动力去重构和优化的。 3. 架构师的职责 作为架构师,我们最重要的价值应该是“化繁为简”。但凡让事情变得更复杂,让系统变得更晦涩难懂的架构都是值得商榷的。 架构师的工作就是要努力训练自己的思维,用它去理解复杂的系统,通过合理的分解和抽象,使哪些系统不再那么难懂。我们应该努力构建易懂的架构,使得在系统上工作的其他人员(例如设计者、实现者、操作员等)可以较为容易地理解这个系统。 软件架构 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通信。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用、指导构件集成的模式以及这些模式的约束组成。软件架构不仅显示了软件需求和软件结构之间的对应关系,而且指定了整个软件系统的组织和拓扑结构,提供了一些设计决策的基本原理。 软件架构的核心价值应该只围绕一个核心命题:控制复杂性。他并不意味着某个特定的分层结构,某个特定的方法论(贫血、DDD 等)。 软件架构分类 在介绍应用架构之前,我们先来看一下软件架构的分类。 随着互联网的发展,现在的系统要支撑数亿人同时在线购物、通信、娱乐的需要,相应的软件体系结构也变得越来越复杂。软件架构的含义也变得更加宽泛,我们不能简单地用一个软件架构来指代所有的软件架构工作。按照我个人理解,我将软件架构划分为: 业务架构:由业务架构师负责,也可以称为业务领域专家、行业专家。业务架构属于顶层设计,其对业务的定义和划分会影响组织结构和技术架构。例如,阿里巴巴在没有中台部门之前,每个业务部门的技术架构都是烟囱式的,淘宝、天猫、飞猪、1688 等各有一套体系结构。而后,成立了共享平台事业部,打通了账号、商品、订单等体系,让商业基础实施的复用成为可能。 应用架构:由应用架构师负责,他需要根据业务场景的需要,设计应用的层次结构,制定应用规范、定义接口和数据交互协议等。并尽量将应用的复杂度控制在一个可以接受的水平,从而在快速的支撑业务发展的同时,在保证系统的可用性和可维护性的同时,确保应用满足非功能属性要求(性能、安全、稳定性等)。 分布式系统架构:分布式系统基本是稍具规模业务的必选项。它需要解决服务器负载,分布式服务的注册和发现,消息系统,缓存系统,分布式数据库等问题,同时架构师要在 CAP(Consistency,Availability,Partition tolerance)之间进行权衡。 数据架构:对于规模大一些的公司,数据治理是一个很重要的课题。如何对数据收集、数据处理提供统一的服务和标准,是数据架构需要关注的问题。其目的就是统一数据定义规范,标准化数据表达,形成有效易维护的数据资产,搭建统一的大数据处理平台,形成数据使用闭环。 物理架构:物理架构关注软件元件是如何放到硬件上的,包括机房搭建、网络拓扑结构,网络分流器、代理服务器、Web 服务器、应用服务器、报表服务器、整合服务器、存储服务器和主机等。 运维架构:负责运维系统的规划、选型、部署上线,建立规范化的运维体系。 典型应用架构 1. 分层架构 分层是一种常见的根据系统中的角色(职责拆分)和组织代码单元的常规实践。常见的分层结构如下图所示: 2. CQRS CQS(Command Query Separation,命令查询分离),最早来自于 Betrand Meyer(Eiffel 语言之父,OCP 提出者)提出的概念。其基本思想在于,任何一个对象的方法可以分为两大类: 命令(Command): 不返回任何结果(void),但会改变对象的状态。 查询(Query): 返回结果,但是不会改变对象的状态,对系统没有副作用。 3. 六边形架构 六边形架构是 Alistair Cockburn 在 2005 年提出,解决了传统的分层架构所带来的问题,实际上它也是一种分层架构,只不过不是上下,而是变成了内部和外部(如下图所示)。 六边形架构又称为端口-适配器架构,这个名字更容器理解。六边形架构将系统分为内部(内部六边形)和外部,内部代表了应用的业务逻辑,外部代表应用的驱动逻辑、基础设施或其他应用。 适配器分为两种类型(如下图所示),左侧代表 UI 的适配器被称为主动适配器(Driving Adapters),因为是它们发起了对应用的一些操作。而右侧表示和后端工具链接的适配器,被称为被动适配器(Driven Adapters),因为它们只会对主适配器的操作作出响应。 4. 洋葱圈架构 洋葱架构与六边形架构有着相同的思路,它们都通过编写适配器代码将应用核心从对基础设施的关注中解放出来,避免基础设施代码渗透到应用核心之中。这样应用使用的工具和传达机制都可以轻松地替换,可以一定程度地避免技术、工具或者供应商锁定。 不同的是洋葱架构还告诉我们,企业应用中存在着不止两个层次,它在业务逻辑中加入了一些在领域驱动设计的过程中被识别出来的层次(Application,Domain Service,Domain model,Infrastructure 等)。 另外,它还有着脱离真实基础设施和传达机制应用仍然可以运行的便利,这样可以使用 mock 代替它们方便测试。 在洋葱架构中,明确规定了依赖的方向: 外层依赖内层 内层对外层无感知 COLA 应用架构 COLA 架构是我团队自主研发的应用架构,目前已经开源。在 COLA 的设计中,我们充分汲取了经典架构的优秀思想。除此之外,我们补充了规范设计和扩展设计,并且使用 Archetype 的方式,将架构固化下来,以便可以快速的在开发中使用。 COLA 开源地址:https://github.com/alibaba/COLA 1. 分层设计 COLA 的分层是一种改良了的三层架构。主要是将传统的业务逻辑层拆分成应用层、领域层和基础实施层。如下图所示,左边是传统的分层架构,右边是 COLA 的分层架构。 其每一层的作用范围和含义如下: 1)展现层(Presentation Layer) 负责以 Rest 的格式接受 Web 请求,然后将请求路由给 Application 层执行,并返回视图模型(View Model),其载体通常是 DTO(Data Transfer Object)。 2)应用层(Application Layer) 主要负责获取输入,组装上下文,做输入校验,调用领域层做业务处理,如果需要的话,发送消息通知。当然,层次是开放的,若有需要,应用层也可以直接访问基础实施层。 3)领域层(Domain Layer) 主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Entities)的函数对外部提供业务逻辑的计算和处理. 4)基础实施层(Infrastructure…

摩登3测试路线_最强干货!CAN总线看不懂是不可能的!

CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。 想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel) CAN有很多优秀的特点,使得它能够被广泛的应用。 比如: 传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。 近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。现在每一辆汽车上都装有CAN总线。 一个典型的CAN应用场景: CAN总线标准 CAN总线标准只规定了物理层和数据链路层,需要用户自定义应用层。不同的CAN标准仅物理层不同。 CAN收发器负责逻辑电平和物理信号之间的转换。 将逻辑信号转换成物理信号(差分电平),或者将物理信号转换成逻辑电平。 CAN标准有两个,即IOS11898和IOS11519,两者差分电平特性不同。 高低电平幅度低,对应的传输速度快; *双绞线共模消除干扰,是因为电平同时变化,电压差不变。 物理层 CAN有三种接口器件 多个节点连接,只要有一个为低电平,总线就为低电平,只有所有节点输出高电平时,才为高电平。所谓”线与”。 CAN总线有5个连续相同位后,就插入一个相反位,产生跳变沿,用于同步。从而消除累积误差。 和485、232一样,CAN的传输速度与距离成反比。 CAN总线,终端电阻的接法: 为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线 数据链路层 CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。 数据帧用来节点之间收发数据,是使用最多的帧类型;远程帧用来接收节点向发送节点接收数据;错误帧是某节点发现帧错误时用来向其他节点通知的帧;过载帧是接收节点用来向发送节点告知自身接收能力的帧;用于将数据帧、远程帧与前面帧隔离的帧。 数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B) 帧起始 帧起始由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始; 帧结束由7个隐形位(高电平)组成。 仲裁段 CAN总线是如何解决多点竞争的问题? 由仲裁段给出答案。 CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。 帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。 控制段 共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。 数据段 为0-8字节,短帧结构,实时性好,适合汽车和工控领域; CRC段 CRC校验段由15位CRC值和CRC界定符组成。 ACK段 当接收节点接收到的帧起始到CRC段都没错误时,它将在ACK段发送一个显性电平,发送节点发送隐性电平,线与结果为显性电平。 远程帧 远程帧分为6个段,也分为标准帧和扩展帧,且RTR位为1(隐性电平) CAN是可靠性很高的总线,但是它也有五种错误。 CRC错误:发送与接收的CRC值不同发生该错误; 格式错误:帧格式不合法发生该错误; 应答错误:发送节点在ACK阶段没有收到应答信息发生该错误; 位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误; 位填充错误:通信线缆上违反通信规则时发生该错误。 当发生这五种错误之一时,发送节点或接受节点将发送错误帧 为防止某些节点自身出错而一直发送错误帧,干扰其他节点通信,CAN协议规定了节点的3种状态及行为 过载帧 当某节点没有做好接收的”准备”时,将发送过载帧,以通知发送节点。 帧间隔 用来隔离数据帧、远程帧与他们前面的帧,错误帧和过载帧前面不加帧间隔。 构建CAN节点 构建节点,实现相应控制,由底向上分为四个部分:CAN节点电路、CAN控制器驱动、CAN应用层协议、CAN节点应用程序。 虽然不同节点完成的功能不同,但是都有相同的硬件和软件结构。   CAN收发器和控制器分别对应CAN的物理层和数据链路层,完成CAN报文的收发;功能电路,完成特定的功能,如信号采集或控制外设等;主控制器与应用软件按照CAN报文格式解析报文,完成相应控制。 CAN硬件驱动是运行在主控制器(如P89V51)上的程序,它主要完成以下工作:基于寄存器的操作,初始化CAN控制器、发送CAN报文、接收CAN报文; 如果直接使用CAN硬件驱动,当更换控制器时,需要修改上层应用程序,移植性差。在应用层和硬件驱动层加入虚拟驱动层,能够屏蔽不同CAN控制器的差异。 一个CAN节点除了完成通信的功能,还包括一些特定的硬件功能电路,功能电路驱动向下直接控制功能电路,向上为应用层提供控制功能电路函数接口。特定功能包括信号采集、人机显示等。 CAN收发器是实现CAN控制器逻辑电平与CAN总线上差分电平的互换。实现CAN收发器的方案有两种,一是使用CAN收发IC(需要加电源隔离和电气隔离),另一种是使用CAN隔离收发模块。推荐使用第二种。 CAN控制器是CAN的核心元件,它实现了CAN协议中数据链路层的全部功能,能够自动完成CAN协议的解析。CAN控制器一般有两种,一种是控制器IC(SJA1000),另一种是集成CAN控制器的MCU(LPC11C00)。 MCU负责实现对功能电路和CAN控制器的控制:在节点启动时,初始化CAN控制器参数;通过CAN控制器读取和发送CAN帧;在CAN控制器发生中断时,处理CAN控制器的中断异常;根据接收到的数据输出控制信号;   接口管理逻辑:解释MCU指令,寻址CAN控制器中的各功能模块的寄存器单元,向主控制器提供中断信息和状态信息。 发送缓冲区和接收缓冲区能够存储CAN总线网络上的完整信息。 验收滤波是将存储的验证码与CAN报文识别码进行比较,跟验证码匹配的CAN帧才会存储到接收缓冲区。 CAN内核实现了数据链路的全部协议。 CAN协议应用层概述 CAN总线只提供可靠的传输服务,所以节点接收报文时,要通过应用层协议来判断是谁发来的数据、数据代表了什么含义。常见的CAN应用层协议有:CANOpen、DeviceNet、J1939、iCAN等。 CAN应用层协议驱动是运行在主控制器(如P89V51)上的程序,它按照应用层协议来对CAN报文进行定义、完成CAN报文的解析与拼装。例如,我们将帧ID用来表示节点地址,当接收到的帧ID与自身节点ID不通过时,就直接丢弃,否则交给上层处理;发送时,将帧ID设置为接收节点的地址。 CAN收发器 SJA1000的输出模式有很多,使用最多的是正常输出模式,输入模式通常不选择比较器模式,可以增大通信距离,并且减少休眠下的电流。 收发器按照通信速度分为高速CAN收发器和容错CAN收发器。 同一网络中要使用相同的CAN收发器。 CAN连接线上会有很多干扰信号,需要在硬件上添加滤波器和抗干扰电路   也可以使用CAN隔离收发器(集成滤波器和抗干扰电路)。 CAN控制器与MCU的连接方式 SJA1000可被视为外扩RAM,地址宽度8位,最多支持256个寄存器 #define REG_BASE_ADDR 0xA000 // 寄存器基址unsigned char *SJA_CS_Point = (unsigned char *) REG_BASE_ADDR ;// 写SJA1000寄存器void WriteSJAReg(unsigned char RegAddr, unsigned char Value) {*(SJA_CS_Point + RegAddr) = Value;return;}// 读SJA1000寄存器unsigned char ReadSJAReg(unsigned char RegAddr) { return (*(SJA_CS_Point + RegAddr));}…

摩登3测速登录地址_关于使用单片机读取外部电压ADC阻抗匹配的问题

单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题。比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信号源输出阻抗较大,AD的输入阻抗较小,从而输入阻抗对信号源信号的电压造成分压,最终导致电压读取误差较大。 因此对于使用单片机读取外部信号电压,外接分压电阻必须选用较小的电阻,或者在对功耗有要求的情况下,可选用大阻值的电压分压后,使用电压跟随器进行阻抗匹配(电压跟随器输入阻抗可达到几兆欧姆,输出阻抗为几欧姆甚至更小)。如果信号源的输出阻抗较大,可采用电压跟随器匹配后再接电阻分压。 对于外置的ADC芯片,在选型时,要留意其类型(SAR型、开关电容型、FLASH型、双积分型、Sigma-Delta型),不同类型的ADC芯片输入阻抗不同—— 1、SAR型: 这种ADC内阻都很大,一般500K以上。即使阻抗小的ADC,阻抗也是固定的。所以即使只要被测源内阻稳定,只是相当于电阻分压,可以被校正; 2、开关电容型: 如TLC2543之类,其要求很低的输入阻抗用于对内部采样电容快速充电。这时最好有低阻源,否则会引起误差。实在不行,可以外部并联一很大的电容,每次被取样后,大电容的电压下降不多。因此并联外部大电容后,开关电容输入可以等效为一个纯阻性阻抗,可以被校正; 3、FLASH型(直接比较型): 大多高速ADC都是直接比较型,也称闪速型(FLASH),一般都是低阻抗的。要求低阻源。对外表现纯阻性,可以和运放直接连接; 4、双积分型: 这种类型大多输入阻抗极高,几乎不用考虑阻抗问题; 5、Sigma-Delta型: 这是目前精度最高的ADC类型,需要重点注意如下问题: 测量范围问题:SigmaDelta型ADC属于开关电容型输入,必须有低阻源。所以为了简化外部设计,内部大多集成有缓冲器。缓冲器打开,则对外呈现高阻,使用方便。但要注意了,缓冲器实际是个运放。那么必然有上下轨的限制。大多数缓冲器都是下轨50mV,上轨AVCC-1.5V。在这种应用中,共莫输入范围大大的缩小,而且不能到测0V。一定要特别小心!一般用在电桥测量中,因为共模范围都在1/2VCC附近。不必过分担心缓冲器的零票,通过内部校零寄存器很容易校正的; 输入端有RC滤波器的问题: SigmaDelta型ADC属于开关电容型输入,在低阻源上工作良好。但有时候为了抑制共模或抑制乃奎斯特频率外的信号,需要在输入端加RC滤波器,一般DATASHEET上会给一张最大允许输入阻抗和C和Gain的关系表。这时很奇怪的一个特性是,C越大,则最大输入阻抗必须随之减小!刚开始可能很多人不解,其实只要想一下电容充电特性久很容易明白的。还有一个折衷的办法是,把C取很大,远大于几百万倍的采样电容Cs(一般4~20PF),则输入等效纯电阻,分压误差可以用GainOffset寄存器校正。 运放千万不能和SigmaDelta型ADC直连: 前面说过,开关电容输入电路电路周期用采样电容从输入端采样,每次和运放并联的时候,会呈现低阻,和运放输出阻抗分压,造成电压下降,负反馈立刻开始校正,但运放压摆率(SlewRate)有限,不能立刻响应。于是造成瞬间电压跌落,取样接近完毕时,相当于高阻,运放输出电压上升,但压摆率使运放来不及校正,结果是过冲。而这时正是最关键的采样结束时刻。所以,运放和SD型ADC连接,必须通过一个电阻和电容连接(接成低通)。而RC的关系又必须服从datasheet所述规则。 差分输入和双极性的问题: SD型ADC都可以差分输入,都支持双极性输入。但这里的双极性并不是指可以测负压,而是Vi+ Vi-两脚之间的电压。假设Vi-接AGND,那么负压测量范围不会超过-0.3V。正确的接法是Vi+ Vi- 共模都在-0.3~VCC之间差分输入。一个典型的例子是电桥。另一个例子是Vi-接Vref,Vi+对Vi-的电压允许双极性输入 -END- 来源 | cnblogs | 整理文章为传播相关技术,版权归原作者所有 |  | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台首页_ZWS行业应用-照明管理系统方案

为实现照明智能化,节能且便捷的管理灯具,基于ZigBee模块和ZWS云平台,致远电子提供了一款软硬件结合的照明系统解决方案,实现对照明灯具的远程控制和管理。 ZWS云平台,全称为:ZLG Web Service云计算服务平台,是一个标准通用的物联网云端平台型服务系统,支持多种通信协议设备的接入管理,包括ZigBee、LoRaWAN、OPC UA、CAN、Modbus等协议,具有远程监控和管理设备、数据解析、数据分析、告警触发、数据推送等功能。 而照明管理系统是基于ZWS云平台衍生出来的专门管控照明设备的行业应用,具有以下功能特点: · 实时获取灯具状态信息; · 准确获取并统计灯具的能耗信息; · 远程控制单个灯具、分组灯具; · 设置定时任务(定时开关灯、定时调光等); · 当灯具出现欠压、过压、欠流等故障时,系统会第一时间发出告警通知。 照明管理系统通过无线ZigBee以及物联网技术,实现对照明灯的远程监测和维护,提高灯具管理效率,降低运维成本,是照明行业的典型应用。 一、照明智能化的需求 在快速发展的现代,使用照明的场所越来越广,小到家中的台灯,大到市政路灯、工业照明、港口照明等。但随着灯具数量的增多,灯的环境恶劣、安装位置高等客观原因,给维修和日常化管理灯具也增加了不少难度。此外,照明节能环保也是一个必须解决的问题。 传统照明方案存在的问题:1、管理问题:不能远程控制灯具,不能灵活分组管理。2、监测问题:无法及时获取灯具状态和能耗信息,且依靠人工巡检、市民报修等手段去排查故障,效率低下。3、节能问题:不能设定时间定时自动调光或关灯,在凌晨时段或可调暗时刻,仍全部开启灯具,造成用电浪费。为了解决这些问题,使照明灯更加智能化,致远提供了一个软硬件结合的照明系统解决方案。 二、照明系统方案的整体设计 照明管理系统方案包含通信硬件和应用软件两部分,如图1。 图1 照明管理系统方案 综合考虑灯具的分布距离以及使用数量等特性,系统的硬件部分选用了ZigBee协议的通信方案。ZigBee协议具有低功耗、近距离、网络容量大等优势,适用于照明场合的无线方式。 图2 ZigBee协议优势 而网关和云端的通信采用的是MQTT协议,MQTT是一种轻量级的消息传输协议,基于发布/订阅模式,可在网络受限设备、低宽带以及高延迟的网络上进行稳定传输。 图3 MQTT消息传输 三、通信硬件 照明管理系统的通信硬件采用了致远自主研发的ZigBee网关GZ32M-I-Pro和ZM32节点,网关与节点构成星型网络或网型网络,ZM32节点将灯具的数据透传给网关,网关再通过wifi/4G/以太网的方式将数据传送到云端。 GZ32M-I-Pro是基于ZM32透传模块开发的ZigBee网关,支持 WIFI、4G、双口以太网数据回传链路,支持自动切换网卡功能。还提供本地Web界面配置,可配置网络号、信道号等参数以及上云配置。 图4 ZigBee网关配置 ZM32节点体积小、功耗低、可嵌入到灯具内,且100秒内可完成节点自组网,是灯具智能化的首选。 图5 ZM32节点 四、应用平台 照明管理平台是基于ZWS云平台开发的行业应用,针对性的解决传统照明在管理、监测和节能上的弊端,具备的功能特点: · 支持能耗统计,可查看单灯的能耗信息; · 支持跨网关分组,可分组、分区监测和控制; · 支持设置定时任务,定时开关灯,节能减排; · 支持一键开关灯,快速处理应急情况; · 支持故障告警,第一时间通知告警信息。 是一个专门为管理照明行业各类灯(工业灯、场馆灯等)而设计的典型行业应用,用户只需简单配置,就可以实现远程开关灯、调光、一键控制、定时场景及跨网关分组控制灯等管理。 五、灯具如何接入照明管理平台? 首先,在线下配置好ZigBee网关,并将灯具加入自组网中,使它们能相互通信。然后登录照明管理平台,在控制平台上,添加网关、灯具,当灯具在线状态为绿色说明灯具在线,就可以正常与云端进行通信了。 图6 灯具接入 六、接入 照明场景中,大多都是对一片区域的灯进行控制,因此灯具分组很重要。为了能更好的管控灯具,第一步是要对灯具进行分组(可以基于网关分组,也可以跨网关进行分组)。 图7 分组设置 完成分组后,可从分组、网关的角度去查看灯的状态数据以及能耗信息,还可以一键控制多个灯具。 图8 查看实时数据 为了能监测灯具的故障,可以设置灯具告警阈值,当灯具发生故障触发阈值时,云端会实时推送欠压、过压等告警信息,用户能第一时间了解故障状态,及时进行处理。 图9 故障告警 还可以根据时间周期(每日、每周、每月)预设定时开关灯、定时调光等定时任务,减少人工控制的频次,解放用户双手。定时任务的执行方式,用户可以选择由云端执行,或者将定时任务下发给灯具,由灯具自动执行。 图10 定时任务