文|周立功
日期|2021年11月29日
ZLG致远电子创始人周立功
你用的mcu涨价了,这还不是最坏的结果。过去20多年里芯片涨价,半年后基本上都会缓和下来。今年不一样,接近年底了,还没有任何迹象表明明年何时恢复供应,很多企业损失惨重。
现在的情况是很多型号的mcu,原厂直接告诉你一句话“断供”,有钱都买不到。资本同样是逐利的,仅有的产能肯定转做利润更丰厚的芯片。
某些替代的芯片能买到,虽然无法完全兼容,但功能上可以实现100%替代,而切换平台基本上等于重新开发和测试。
坏消息越来越多,市场传言莫衷一是。转换mcu的产品成了企业最大的危机,不仅腾不出人员开发新产品,而且很有可能原产品软件工程师已经离职了,那怎么迭代维护升级呢?老板想哭都没人理,但危机却让人更加懂得珍惜人才,而从某种意义上来说,关键还是创始人是否能够从危机中看到未来的机会。
这次大缺货的教训,让很多创始人意识到供应链的重要性,深刻地认识到一个朴素的道理,如何让代码高度复用?这是降低开发成本,快速应对危机最有效的软件开发管理策略。
虽然看起来都是软件,但开发(电子产品的)嵌入式软件和计算机软件依然差别巨大。尽管IT技术高速发展了30多年,软件开发技术已经有了很大的进步,但电子领域的专家与计算机软件专家还是没有很好地跨界整合,从而导致企业普遍缺乏科学的软件工程技术管理方法。不仅软件难以重用,而且扩展和维护难度很大,长期以来开发成本居高不下。
从软件开发来看,软件工程与计算机科学(站在电子技术领域的角度来看,可以归类为嵌入式计算机科学)是完全不同的两个领域的知识。其主要区别在于人,因为软件开发是以人为中心的过程。如果考虑人的因素,软件工程更接近经济学,而非计算机科学,所以如果不改变思维方式,则很难开发出既好卖成本又低的好产品。
那到底如何才能实现软件高度复用呢?其实计算的本质和共性就是数据流(Flow),显然数据存储、数据传输……所以可以将各种软件按照分类抽象为节点(代码块),通过AWFlow Design设计器实现拖拽式编程。如下图所示,程序块间通信如同水流管道,每个程序块间的关系一目了然。尤其是虚拟设备接口,已经不是单个设备的业逻辑软件开发,而是设备与设备之间的软件开发,而是整个系统与网络的软件开发,真正实现物与物之间的Flow开发。
节点的连接软件,通常称为业务逻辑软件,既可以使用广州致远电子定义的fscript脚本编程,更方便的使用AWBlock积木式图形化卡盒设计器编程,如同少儿编程软件Google的Blockly、微软的MakeCode那样编程,而AWBlock是广州致远电子使用c语言设计的,可以直接运行在各种mcu上的软件设计器,因此AWBlock开发方式结束了多变的用户需求问题。
说句实在话,再丰富的节点、组件资源,也无法满足所有的应用场景和用户需求,不可避免地会出现用户定制化的内容。无休止地投入研发资源定制开发成本极高,这是不现实的。而由用户自行二次开发,无论是底层的C/C++开发,或是Lua、JS、Python等通过脚本语言开发,甚至是将业务收缩,仅保留行业相关配置,比如,AT命令、运动控制命令等,学习这些知识始终是有门槛,需要有较强的专业背景。
AWBlock拼图式软件开发,无需懂得相关的软件知识,开发者可以将自己想要表达的内容和想法,很自然地通过AWBlock描述出来。
当将这些软件都集成在一起时,就是EsDA嵌入式软件设计自动化工具,还包括AWorksLP(或Linux等操作系统)、AWTK图形用户界面和ZWS PaaS IoT云服务。
EsDA可以使应用程序框架变得非常清晰,彻底解决程序块间通信容易混乱的现象,而且也能解决状态机复杂的状态管理和事件处理。
下面示例的流图实现了一个Modbus-RTU与MQTT之间的一个协议转换应用,其中主要分为两条数据流。
Modbus至MQTT
modbus_master_poll:Modbus主机轮询节点,该节点运行Modbus主栈功能,可添加多个目标从设备,以及每个从设备所需要轮询读取的寄存器。节点根据配置参数,周期性读取所管理的从设备寄存器值,并传递至fscript处理节点。
fscript:脚本节点,将modbus寄存器数据转换成MQTT数据定制化边缘计算(对数据进行相关计算和封装处理)。
mqtt_out:MQTT上报节点,将数据上传至用户指定的云服务器。
MQTT至Modbus
mqtt_in:MQTT下行节点,监听并接收云端请求,并将请求消息传递至fscript处理节点。
fscript:脚本节点将MQTT命令转换成对应Modbus从机寄存器值定制化业务逻辑(如可组合多个命令触发系统事件等)。
modbus_master_out:Modbus主栈从机寄存器修改节点,负责上级节点传递的寄存器值写入到对应从机设备中。
modbus_master_out 、modbus_master_poll均为本地自定义的非云端库的节点,紫色代表本地加载节点。aw-flow节点库已有可用的Modbus主栈节点,由于已有的节点设计适用于从机数量和寄存器数量固定不变的情况,当从机设备或对应寄存器数量发生变化时,需要重新拖拽相关节点才能实现。而在此应用中,从机设备和每个从机寄存器的数量是可变的,所以当前节点并不适用,需要一个可以支持设备和寄存器数量动态变化的节点。基于此,需要将这样的Modbus应用场景,重新抽象为一个新节点,但该节点与原节点并不冲突,适合相应场景的另一种形式,同样是通用Modbus应用节点。后续可以标准化,添加到节点库中。
EsDA的开发始于2006年,自始至终围绕 “帮助用户解决非核心域的问题,让用户专注于自身产品核心域的算法、行业需求、用户体验、市场营销、工艺创新和生产制造”的思路而展开的,因为所有与底层相关的差异化软件,以及各种通信协议等软件的开发,则是我们的核心域。
在产品开发中,如果你是一个有很多好的idea,且热衷于创造的人。但又由于缺乏更专业的软件开发功能,可能一时难以编写复杂的软件代码,最终无法将自己的想法转变成现实,那么选择EsDA则是最佳的捷径。
回头再来看硬件设计存在的问题,一个简单电路的器件,通常来源于几个不同的厂家。焊接到pcb,不仅占用加工时间,而且多个器件组合而成的电路,其可靠性具有很大的离散性,因此使用分立器件设计电路不如使用模块。
显然,需求一旦确定,则很容易几个小时之内焊接好原型机。如果空间不受限,则立即可以批量制造。我们设计了两种底板,分别为8/12个扩展槽,其中一个插电源模块,另一个插通信模块,其它的扩展槽可以任意插入数字输入输出和模拟数据采集模块。需要编程吗?不需要!这是一个独立的边缘计算控制器。
边缘计算芯片预置了通用代码,通过配置即可实现所需要的功能。方法一是烧录功能配置文件,方法二是通过主机发送命令绑定数据,就可以配置为任意功能的控制器,比如,3路输入、5路输出、2路热电偶温度采集和1路4-20mA的接口,即可实现柔性化硬件设计和任意电路扩展,从而极大地降低了设计成本。
企业在发展中,竞争是十分残酷的,总会遇到重重困难和各种各样的竞争者。比如,公司离职的员工会拉走你的人,和你做一样的产品;也有竞争者模仿生产和你兼容的产品,他们采取低价销售的方法和你争夺客户,怎么办?人都是从青涩的年纪走向成熟的,多少都会有无奈的抱怨。但随着时间的推移,很多人却没有被打倒,而是愈挫愈勇越做越好,是什么原因?成功者深刻地认识到,困难是最好的恩人,对手是最好的老师。因为凡事都有对立面,要有反对你的人,你才能将事情做得更好。如果你做什么都很顺利,就很容易失败。有人反对你,有人和你竞争,你应该感到高兴,因为绝好的机会来了。所以一定要知道,尽管对手能够通过模仿加入竞争,却无法偷到你明天的创新。因为最好的防御就是进攻,要敢于打破自己原有的优势形成新的优势,用开阔的胸怀看待世界,那世界慢慢就是你的。