游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

用AWTK和AWPLC快速开发嵌入式应用程序(4)自定义功能

  AWPLC目前还处于开发阶段的早期,写这个系列文章的目的,除了用来验证目前所做的工作外,还希望得到大家的指点和反馈。如果您有任何疑问和建议,请在评论区留言。1。背景
  AWTK全称ToolkitAnyWhere,是ZLG开发的开源GUI引擎,旨在为嵌入式系统、WEB、各种小程序、手机和PC打造的通用GUI引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的GUI引擎
  AWPLC是ZLG自主研发的PLC系统(兼容IEC611313),其中AWPLC的运行时库(Runtime)基于ZLGTKC开发,可以移植到到任何主流RTOS和嵌入式系统。AWPLC的集成开发环境(IDE)基于AWTK开发,可以运行在Windows、MacOS和Linux系统之上。AWPLC的主要目标之一是把PLC中低代码开发方法引入到嵌入式软件,从而提高嵌入式软件的开发效率和可靠性。2。简介
  在前一篇文章中,我们说过,AWPLC的重要特色之一就是高度可扩展,而且会内置ZLG多年在嵌入式系统开发中积累的功能块,包括各种算法、协议和实用功能,这将大大简化嵌入式软件的开发。
  那怎么去开发自定义的功能块呢?本文以ZTIMER为例介绍一下开发自定义功能块的方法。ZTIMER是一个带计数功能的定时器,在前一篇文章中,我们用它实现了一个走马灯的演示,其使用方法如下:
  编辑切换为居中
  添加图片注释,不超过140字(可选)
  在AWPLC中,自定义功能块和内置功能块具有同等待遇,因为它们都是按同样的方式加入进来的。在进入正题前,我们先聊一下,系统的可扩展性以及实现方法。2。1可扩展性的好处
  在设计一个复杂软件的架构时,可扩展性是必须考虑的因素。可扩展性至少带来以下几个好处:可扩展性将软件的框架与具体的实现分离开来,有助于降低系统的复杂度。系统的复杂性太高,会带来一系列的问题,比如让可理解性、可维护性和可靠性的降低,很多项目因此陷入无法挣脱的焦油坑里,最后士气低落,人员流失,项目取消,公司蒙受巨大损失。在设计复杂软件时,一定要存有敬畏之心。可扩展性将软件变化的部分隔离开来,不但可以让扩展的功能独立变化,也可以方便的扩展新功能。在AWPLC中,以后会扩展各种协议和算法的功能块,必须保证AWPLC框架和这些扩展的功能块是独立的,才能让开发工作顺利进行。可扩展性有利于团队的协作。不同的通讯协议和算法,需要不同团队的专家去开发,可扩展性让大家只要按相应的接口去实现,就可以方便的集成起来,不需要太多跨团队的交互。2。2如何保证可扩展性
  让软件系统具有可扩展性,通常并不是什么难事,只要做到下面两点就可以了:针对接口编程。这个是大家都知道的,在《软件设计模式》等书里,都反复强调了,这里不再赘述。利用工厂模式隔离组件的创建。工厂模式也是人人都知道的,而且大家都觉得很简单。但是能把工厂模式用好的程序员其实并不多见,一个主要原因就是很多人只会套用《软件设计模式》的工厂模式,而《软件设计模式》里几个工厂模式在现实中并不实用。利用这些这些工厂模式,无法满足SOLID原则中的开放封闭原则,增加一个新的扩展时,仍然需要修改对应的工厂。3。AWPLC功能块的接口
  要让AWPLC支持扩展各种自定义的功能块,首要条件条件是定义好功能块的接口。3。1功能块的基类
  在面向对象的C语言编程中,我们用结构(struct)来模拟类和接口。这里所说的接口是广义的接口,而不是C或其它语言中只包含纯虚函数的interface,因为除了虚函数指针外,这里还有一些数据成员。classawplcfbtAWPLC功能块接口。structawplcfbt{property{boolt}en是否启用。uint8ten:1;property{boolt}eno是否启用输出。uint8teno:1;privateconstawplcfbvtabletvt;};3。2功能块的虚函数
  在功能块的虚函数表中,还定义了一些描述性的常量,让对象具有一点反射的能力,方便在运行时查询它的一些状态。顺便说一下,在定义接口的虚函数时,通常不会有创建函数,因为创建之前对象之前,是拿不到这个虚表对象的。但也不是绝对的,有时为了方便clone,也可能提供一个clone函数或者create函数。
  任何接口都要定义析构函数(destroy),在对象需要销毁时,框架可以以统一的方式销毁它。typedefstructawplcfbvtablet{功能块的类型名constchartype;输入参数名称列表,以NULL结束的字符串数组constcharconstins;输出参数名称列表,以NULL结束的字符串数组constcharconstouts;输入输出参数名称列表,以NULL结束的字符串数组constcharconstinouts;执行函数awplcfbexectexec;执行函数(带参数)awplcfbexecextexecex;获取属性(输入输出参数)的值awplcfbgetproptgetprop;获取输出的值awplcfbgetoutputtgetoutput;设置输出的值awplcfbsetinputtsetinput;析构函数awplcfbdestroytdestroy;}awplcfbvtablet;
  这个虚函数表和AWTKTKC中的object虚函数表很相似,考虑到object为了做得通用,有点臃肿了,所以决定重新定义一套。4。AWPLC功能块的工厂
  前面我们说过,可扩展性除了针对接口编程外,离不开工厂模式的支持。功能块的工厂其任务当然是创建功能块了,所以提供了一个创建功能块的函数。参数type指定功能块的类型,函数返回对应类型的功能块:methodawplcfbfactorycreatefb创建fb。param{constchar}type类型。return{awplcfbt}返回fb对象。awplcfbtawplcfbfactorycreatefb(constchartype);
  有了这个创建函数,确实把创建任务与功能块的实现分开了。但是请想一下,如果每次增加新的功能块,都要修改这个创建函数,而这个函数又属于框架的一部分,框架是不是还是依赖于具体实现了呢?为了解决这个问题,我们需要提供一种注册机制来实现依赖倒置,让功能块的实现者主动将创建函数注册进来:methodawplcfbfactoryregister注册创建函数。param{constchar}type类型。param{awplcfbcreatet}create创建函数。return{rett}返回RETOK表示成功,否则表示失败。rettawplcfbfactoryregister(constchartype,awplcfbcreatetcreate);
  这种机制非常好用,真正满足了SOLID原则中的开放封闭原则(OCP):扩展新的功能无需修改框架代码。在ZLG开源GUI引擎中,也大量使用了这种带注册功能的工厂模式,有兴趣的朋友可以去看看AWTK的代码。5。ZTIMER5。1ZTIMER的结构
  在C语言中,一般用结构来模拟类,把基类作为结构的第一个成员来模拟继承。这里必须让awplcfbt作为awplcfbztimert的第一个成员。classawplcfbztimertparentawplcfbtannotation〔fb〕循环定时器。当输入IN为TRUE时,开始计时,输出Q为FALSE,ET开始记录过去的时间。定时时间到时,COUNT增加1,输出Q在本次循环为TRUE,ET重置为0。输入IN为FALSE时重置定时器。typedefstructawplcfbztimert{awplcfbtfb;property{boolt}inannotation〔in〕为TRUE开始计时,为FALSE时重置定时器。booltin:1;property{iectimet}ptannotation〔in〕预设时间(ms)。iectimetpt;。。。}awplcfbztimert;
  这里的API注释采用了AWTK中定义的格式,但是对annotation做了一点扩展,增加了3个新的取值:fb表示这是一个功能块。in表示这是一个输入参数。out表示这是一个输出参数。5。2ZTIMER的实现
  每个功能块必须提供虚函数表中定义的函数,不过主要代码集中exec函数里(其它函数可以自动生成出来):staticrettawplcfbztimerexec(awplcfbtfb){awplcfbztimertztimerAWPLCFBZTIMER(fb);if(awplcfbbeforeexec(fb)RETOK){ztimercurrenttimeawplcnowms();if(ztimerstate0!ztimerprevinztimerin){ztimerstate1;ztimerqFALSE;ztimeret0;ztimercount0;ztimerstarttimeztimercurrenttime;}else{if(!ztimerin){ztimerqFALSE;ztimerstate0;ztimeret0;ztimercount0;ztimerstarttimeztimercurrenttime;}elseif(ztimerstate1){if((ztimerstarttimeztimerpt)ztimercurrenttime){ztimerqTRUE;ztimeret0;ztimercount;ztimerstarttimeztimercurrenttime;}else{ztimerqFALSE;ztimeretztimercurrenttimeztimerstarttime;}}}ztimerprevinztimerin;}returnRETOK;}5。3注册ZTIMER
  功能块需要注册到前面介绍的功能块工厂:awplcfbfactoryregister(AWPLCFBTYPEZTIMER,awplcfbztimercreate);
  坦白的讲,本文只是介绍了实现自定义功能块的关键步骤,实际工作要麻烦很多。如果手工去做这些工作,开发一个功能块还觉得好玩,而开发几十个甚至几百个功能块,人不会变疯就会变傻。下一篇文章会我们介绍一下,如何用代码生成器来完成这些单调的工作,让开发自定义功能块成为一项快乐的工作。

三星S系列镜头从技惊四座到落寞退场Hi,我是溢图科技。提起S系列镜头,大家现在想到的应该都是尼康Z卡口高素质产品线。但在许多年以前,也有一家厂商用S命名旗下的高规格镜头:2014年1月2日,三星推出……人到中年,我悟了我的生活也是头条我们老祖宗的智慧高深莫测。子曰:三十而立。以前从老师那里学的是人到了30岁就成家立业了。但是当我真正过了30岁,我理解的是子可能曰的是:人到30岁就……明确了!有序恢复内地居民赴港澳旅游来源:【广东省卫生健康委员会】1月5日,国务院港澳事务办公室在其官方网站发布《关于优化内地与港澳人员往来措施的通知》。通知称,1月8日起,自香港入境人员凭行前48小……原地掉头平移比亚迪发布百万豪车赚足眼球11月8日,比亚迪官方微信公众号发布一则以仰望标题的海报,正式公布旗下高端汽车品牌,并定名为仰望。作为目前中国品牌TOP级的存在,比亚迪这一消息发出,立刻引起人们广泛热议。比亚……主持人海霞嫁大11岁清华教授,婚后生一女,结婚22年幸福如初央视主持人的工作受人尊敬,家庭生活受人祝福。主持人海霞也一样,一直在为事业奔波,在2020时,海霞首次公开幸福之事。4个最字足以证明海霞是多么的幸福,随后说出心里话……一次看完汤臣倍健财务分析202209汤臣倍健年度收入,2021期数据为74。3亿元。汤臣倍健年度收入同比,2021期数据为21。9。汤臣倍健年度利润,2021期数据为17。5亿元。汤臣倍健年度利润同比,20……2023艾山庙会来了!临近春节,年味渐浓处处洋溢着喜庆的气氛要说咱邳州过年必不可少的一项娱乐活动就是逛庙会告诉大家一个好消息今年的艾山庙会在大家的期盼……你有没有钱,一看便知越富有的人,越喜欢做以下几件事人生就像一副扑克牌,有人拿到了好牌,就有人拿到了坏牌。但是人生的意义并不在于拿到了什么,而是如何打好手中的牌。人,无法决定自己的出身,却可以选择走好脚下的路。……天翼云荣获2022年度边缘计算先锋企业分布式云先锋企业称号来源:【通信信息报社】2022年,中国信息通信研究院(以下简称中国信通院)发起了可信边缘计算推进计划分布式云扬帆计划,旨在通过搭建沟通合作平台,汇聚产、学、研、用各方力量……谁能想到?AppleMusic空间音频一加直接用!加油的意外国产TWS耳机在当下是比较火热的,毕竟随着手机品牌的进场让消费者有了更多亲民的选择,就比如最近一加发布的新耳机一加BudsPro2,在网络上有着很高的热度。而且作为国产千……全国人的宜宾,中央为宜宾市迁来6大总部,原驻成都泸州自贡北京宜宾,是一个拥有近460万常住人口规模的城市,被称为万里长江第一城,也是国家历史文化名城。2021年,宜宾实现GDP3100多亿元,是四川省一个正在冉冉升起的明星城市。罗马不是……特斯拉宣布降价后销量暴增!官网宕机线下门店挤爆【CNMO新闻】1月6日,特斯拉官网更新了Model3以及ModelY两款车型的最新售价,更新后Model3起售价下调至22。9万元,ModelY起售价下调至25。99万元,直……
当年修建三峡大坝,9位专家拒绝在同意书上签字,这是为何?我国自古时起,就是个水患频发的国家,所以在治理水患这一方面我国可是有着悠久的历史。从最开始的秦代的灵渠、战国时期的都江堰,再到隋唐时期的京杭大运河都是我国古代劳动人民的智慧结晶……吃鸡光子新联动,全服送出750套衣服,提醒玩家先到先得欢迎诸位小伙伴们来到天哥开讲的《和平精英》精英小课堂伴随着空投节的到来,光子放出的连招让玩家们目不暇接,不仅有游戏内的一系列福利奖励、专属返场,而且在场外同时开启了多次联动。……四大养肾之法,你要偷偷养肾,然后惊艳所有人1、睡眠是一味良药:白天的时候,上班工作,五脏六腑也在工作,到了晚上的时候,顺应天时,应当好好睡觉啊,给自己的脏腑一个休息的时间,中医认为肾藏精,每当你过度劳累,熬夜的时候,都……日本将从美国和阿曼进口更多天然气新华社北京12月28日电为保障本国能源供应,日本多家能源企业正在拓展液化天然气供应源,将从美国和阿曼进口更多液化天然气。据美国彭博新闻社26日报道,日本国际石油开发公司与……从不怕孤独,从不认输从不怕孤独,从不认输三年疫情随感记录20221225周日从不怕孤独,从不认输这段歌词,每每听起,我总会热血澎湃,尤其是发自心底的那份自豪感,让我是痛彻心扉、痛定思痛后的心……婴儿拉屎不成形是怎么回事?如果妈妈给婴儿购买的尿布或是尿片是没有进行卫生上的清洗,那么就会导致婴儿大便的臭味越来越多。甚至如果婴儿经常出现大便问题,妈妈就会很着急,不知道是什么原因导致的。婴……跟光磊学JavaIntelliJIDEA介绍目前绝大部分互联网公司的Java项目都是使用IntelliJIDEA来开发,因此IntelliJIDEA是每一个Java程序员必须熟练使用的工具1。JetBrains公司介绍……封面故事姊妹情深热爱隐士音响的亲姊妹原创文赖英智新音响NewAudiophile2022090216:55姊妹情深热爱隐士音响的亲姊妹一般我们家访对象都是音响发烧友,不管使用什么样的器材,发烧友……00,爆大冷!英超8亿豪门倒下,61控球无用,23射0球,争英超第六轮比赛,利物浦客场挑战埃弗顿,最终以00的比分打平对手,克洛普的球队爆出了大冷门。此役,利物浦全面占优,控球率达到61,全场狂轰23脚,依旧被埃弗顿零封,萨拉赫、努涅斯……9。1日更新,天狼狩猎者返场,新玩法上线,碎片商店更新大家好我是指尖,9。1日又到了例行维护更新的日子,这次更新同步了部分体验服的英雄调整,以及一些活动的上线,本文来说说活动的情况。天狼狩猎者返场上一篇文章指尖也跟大家……这三款手机兼顾性能屏幕及续航,轻松用四五年,向您诚恳推荐负责任地推荐这三款手机,口碑公认得好,关键价格还不贵第一款:一加ACEPro,3999起CPU型号:骁龙8Gen1影像素质:5000万像素三主摄IMX766传感器支持10倍数码……一个人的成功,离不开志同道合陌生人的相助不一样的正能量给你不一样的阅读1、现实生活中的小事也是这样,高高的堂叔到我家串门的时候,总会开着玩笑说:长的太高了也别扭,到了谁家里都得低着头才能进去。说着就低着头迈进了……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网