当前位置: 首页 > news >正文

IO-Link通信笔记(十七)——可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈与接口代码生成和监控上位机与便携式通信主站

 一、可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈

        图形化界面与驱动代码库生成功能,是现如今几大半导体芯片供应商选择向广大开发人员推荐的主流开发方式,例如意法的cube-mx。开发人员可以通过这些软件针对所使用芯片的相关外设资源,快速生成相关代码,并在生成后仅仅通过有限的检查和修改就能达到顺畅使用的目的。这几大方便了广大开发人员,降低了开发人员在不同芯片间学习的经历与时间投入,极大缩短了开发周期,让产品软件可以更快速梗便捷的部署。

        经过我个人的不断开发与优化,我个人的IOL协议栈运行库也来到了全新版本。秉持着将面向对象程序设计思想发展到极致的想法,目前已经真正实现了MCU资源外设驱动库、IOL协议核心运行库、PHY芯片运行库三个部分代码的模块化设计,MCU资源外设驱动库包含了通信所需的串口、定时器、GPIO、中断等资源,将其命名为func_drives;IOL协议核心运行库包含了一个IOL从站协议栈,实现基本的IOL通信功能,将其命名为IOL_protocol;PHY芯片运行库包含了若干种PHY芯片的运行API,开发人员可以通过调用API完成PHY芯片相关动作,将其命名为IOL_PHY。

        三个模块内部完全不包含其他代码,只包含自己内部运行所需代码,所需要的外部函数与变量均为指针接口,使用接口结构体的形式完成各个模块的对接,如图1。这里PHY芯片会使用到串口与若干GPIO,在实例化时将外部驱动函数链接到接口结构体上,内部在调用所需指针再进一步去执行对接函数,例如,运行过程中需要TXEN引脚电平进行切换时,经由指针调用的就是图1中IOL_PHY_TXEN_Set_Level_H与IOL_PHY_TXEN_Set_Level_L两个函数,当更换了MCU平台时,仅仅针对新MCU运行库做出相对应的驱动函数的改变并更新接口函数即可完成代码的移植。此种方式将各个模块的连接性降到最低,实现面向对象程序设计中“高内聚,低耦合”的思想,既避免了原来面向过程程序设计中因为切换了MCU平台而引起的大量代码报错修改费时费力的问题;又允许不同专业领域的开发人员分布式维护模块代码,降低代码维护成本;更可以利用Git等分布式代码管理软件进行分布式管理,极大降低维护成本。此后如需要功能的更新,仅需要对模块内部进行修改,再生成更新运行库,那么应用工程中也仅仅替换掉新生成的运行库即可完成功能的更新,方便快捷省时省力。

图1        PHY芯片所需MCU外设资源驱动函数对接接口

二、接口代码生成与监控上位机

        在介绍完协议栈运行库后,在介绍一下目前对上位机功能的设计。在第16期文章中我已经介绍了我个人IOL协议栈的软件结构与一部分上位机功能,那么各位读者也就会知道标题所说接口代码生成功能的含义,既生成上述所说的模块对接接口,在与IOL_Lib对接的interface接口中还生成出IODD翻译成C代码的相关信息与动作函数,让开发人员在这方便的时间投入降到最小,加开开发速度。

        新版本上位机中,更进一步的加入了芯片选型与配置后的运行库生成的功能,使用此功能,即可生成上述完整的运行库工程,结合我个人提供的demo IODD,即可完成一些简单的测试工作。

图2    数据监控功能展示

        此外,上位机进一步集成了IOL通信的监控功能,见图2。上位机在选择IODD文件后,自动生成IODD内规划的人机交互菜单和哥哥参数相对应的操作控件,包括参数名称、参数值、多选菜单、默认值、参数范围、读写交互命令等,虽然目前仍有些许bug,但是主体功能完备,修bug仅是时间问题。这里放上演示视频:视频未经过加速处理,可以去详情页进行倍速播放接口与运行库与数据监控上位机展示

个人IO-Link从站方案代码库生成功能上位机演示

三、便携式通信主站

        有了从站有了上位机,就需要有主站。工业用主站想必大家都了解过,一个长条形金属盒,可以连接若干IOL从站。但是这种主站毕竟是工业实际应用的产品,要使用这样的主站必须要搭建一个控制系统,即系统包含从站、主站、控制器、PC机;或者某些主站产品具备webserver功能将主站通过网线连接电脑,通过供应商提供的网页上位机进行操作,但是这仍然需要主站和PC机,并且主站要具备对应功能,而且整个系统也不甚便捷。

        在现场操作环节中,方便快捷移植都是各大供应商追求的目标之一,越是快速的完成部署,越是可以让生产线早早投入生产,节省成本。尤其是梗下游的产品,出于自身不生产上层监控设备或其他原因,很多设备供应商不具备完善的产品测试与检查手段,再加上PC机或复杂系统并不够便捷,大大影响了工作效率。也因此,很多自动化设备生产商,都会给设备匹配一个小巧的可操作控制器——手操器。通过手操器,工作人员可以快速查看设备运行状态,迅速做出判断与响应,完成设备的维护,而这些是PC机锁做不到的,更甚至一些狭窄环境,PC机都难以抵达。手操器的出现,针对性完成特定设备的操作,完全可以替换很多环节。

        我个人提出的IOL设备监控手操器的方案,不仅仅可以实现上述数据监控功能,还兼顾设备参数管理与程序下载功能。在现场部署环节中,可以对设备的不同状态进行规划。手操器的开发,这是我个人工作的第三步,为何?这些人机交互设备,很多都是要跑在操作系统中,比如linux系统。在开发出来上位机后,对所使用的硬件针对性设计,结合交叉编译工具,即可实现上述上位机软件在linux系统内的运行,第二步的上位机开发就可以为这第三步做应用基础。

四、结语

        目前我个人方案代码仍然有一些逻辑错误之处,部分功能也不是很完善。但是只要脚踏实地一步一步走一步一步做,总有完善的那一天。当然我个人也是希望我的努力可以得到认可,可以得到支持,让我的理想实现。然千里马常有而伯乐不常有,但我热爱钻研,也热爱开发,既然选择做就要坚定做到底,哪怕最终没有开花结果,我也享受了这个拼搏的过程。很多人在生活中多迷茫,哀叹自己做了这做了那会不会有好结果,甚至求仙问卦,结果事也没做好,自己的心情也乱糟糟。“你只管去做,剩下一切交给天意。”既然做了就不要担心结果是好的还是坏的,做了就都是好的,不做那就连得到好的机会都没有。最近我也是有很多迷茫,工作啊,家庭啊,未来发展啊,在辗转难眠几夜之后,爆了个粗口,去他MD,该吃吃该喝喝该玩玩,闹心有什么用?闹心根本没有用!只要做了,总有一天机会会撞见!干就完了!本期文章结尾借着写文章的机会哔哔两句,也算是与诸君共勉!谢谢!


以上是本节的全部内容,如果各位读者仍然存在疑惑可以私信发送问题,笔者会一一解答并积累一期文章的内容更新出来。

笔者内容也许会存在错误,欢迎志同道合的开发者一起讨论。我们共同进步!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前缀和专题
  • 什么是云边协同?
  • 考研数一|极限的计算(笔记)
  • OGG转MP3音频格式转换:6种免费音频转换器推荐
  • Linux网络协议.之 tcp,udp,socket网络编程(三).之多进程实现并发demon
  • 通过java.netHttpURLConnection类实现java发送http请求
  • 【拓扑排序topsort】——启动!!!
  • 高清无水印视频素材哪里找?分享几个热门的高清无水印素材网站
  • html语法
  • mysql源码编译启动debug
  • 东方博宜24年8月-C组 - 屋顶
  • C++ | Leetcode C++题解之第328题奇偶链表
  • unity草体渲染方案 GPU Instaning
  • 数据结构(学习)2024.8.6
  • 数据库原理之多表查询——使用Mysql进行内连接和外连接
  • 08.Android之View事件问题
  • java8 Stream Pipelines 浅析
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL数据库运维之数据恢复
  • PHP的类修饰符与访问修饰符
  • Python利用正则抓取网页内容保存到本地
  • Vim Clutch | 面向脚踏板编程……
  • Vue.js 移动端适配之 vw 解决方案
  • 程序员该如何有效的找工作?
  • 初识MongoDB分片
  • 给Prometheus造假数据的方法
  • 观察者模式实现非直接耦合
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 什么是Javascript函数节流?
  • 微信小程序实战练习(仿五洲到家微信版)
  • 学习Vue.js的五个小例子
  • 转载:[译] 内容加速黑科技趣谈
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 移动端高清、多屏适配方案
  • ​低代码平台的核心价值与优势
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #传输# #传输数据判断#
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $jQuery 重写Alert样式方法
  • (23)Linux的软硬连接
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (转)Linq学习笔记
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .Net 路由处理厉害了
  • .so文件(linux系统)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @JsonSerialize注解的使用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [1204 寻找子串位置] 解题报告