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

news2025/1/10 23:33:19

 一、可任意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,该吃吃该喝喝该玩玩,闹心有什么用?闹心根本没有用!只要做了,总有一天机会会撞见!干就完了!本期文章结尾借着写文章的机会哔哔两句,也算是与诸君共勉!谢谢!


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缺失值处理方法:代数/统计/机器学习算法补全数据(附Python-sklearn代码精美可视化绘图)

注:本期的删除或插补方法主要针对连续数据,时间序列数据的插补在后续关于时间序列的博客中讲明。参考鸢尾花丛书,链接如下: 参考书籍及源代码链接https://github.com/Visualize-ML 博客是选出自己感觉用的到的精炼部分加自己的理…

春秋云境 | 文件上传 | CVE-2022-30887

目录 靶标介绍 开启靶场 上传一句话木马 蚁剑连接 找到 flag 靶标介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0…

eclipse无法使用jdk1.6编译老项目

主要修改两个地方的配置: 1、eclipse中配置的maven版本不能过高,亲测3.2.5版本是好使的。 2、修改eclipse安装目录下的eclipse.ini文件,将其中的-Dosgi.requiredJavaVersion更改为1.6即可,我得默认是1.7 最后附上maven安装包&…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展,AGV(自动导引车)作为一种重要的物流搬运设备,在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一,直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么? 认证协议都在认证些什么东西呢?认证一般要认证三个东西&#x…

防止老年痴呆的小学题

直角三角形的周长为16,斜边长为7,求三角形的面积(不使用勾股定理) 答案为(9*9-7*7)/4

aria2下载器在windows端的使用

一、下载aria2 aria2aria2 is a lightweight multi-protocol & multi-source command-linedownload utility. It supports HTTP/HTTPS, FTP, SFTP,BitTorrent and Metalink. …https://aria2.github.io/打开链接,点击要下载的版本,注意windows版本跟…

k8s持久化存储PV和PVC

一、PV和PVC 1.PersistentVolume (PV) PersistentVolume (PV) 是外部存储系统中的⼀块存储空间,由管理员创建和维护。与 Volume⼀样, PV 具有持久性,⽣命周期独⽴于 Pod; 2.PersistentVolumeClaim (PVC) PersistentVolumeClaim…

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log 1. Bin Log(二进制日志)2. Redo Log(重做日志)3. Undo Log(回滚日志) ) 💖The Begin💖点点关注,收藏不迷…

8.6 Day14 匿名用户访问ftp位置

vsftpd的端口号:tcp 20、21 vsftpd的配置文件:/etc/vsftpd/vsftpd.conf LInux系统防火墙默认不允许开启20、21端口访问 使用不同用户访问FTP 1.使用匿名用户访问FTP 匿名用户登录时,用户名为ftp,没有密码 测试匿名用户文件上传…

20240806---特征选择与稀疏学习笔记---pptp61-p92---奇异值分解/压缩感知、字典学习

一.奇异值分解 2.要进行特征分解,则矩阵A为方阵,如果矩阵 𝐴A 不是方阵(即行数和列数不同),我们仍然可以对其进行分解,这就是奇异值分解(SVD)的强大之处。 二.压缩感知 …

力扣面试经典算法150题:移除元素

移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目:移除元素 题目链接:https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…

cpu问题排查——mpstat

mpstat是sysstat包中用于linux下排查、监控cpu的一个工具。可从该工具体现出程序中断情况、cpu负载情况等。 用法 mpstat [ options ] [ <interval> [ <count> ] ] 命令参数 -P { <cpu_list> | ALL } : ALL表示所有cpu的平均损耗信息&#xff0c;<cpu_…

PXE 服务器搭建——启动界面设计实验

环境准备&#xff1a; 前期准备&#xff1a; 解决 kickstart 实验出现的 DHCP 的问题-CSDN博客 http://t.csdnimg.cn/5vZP0 当前准备&#xff1a; 两台虚拟机&#xff1a;RHEL7 OpenEuler(作为测试机器使用) ip&#xff1a;172.25.254.100 yum install syslinux.x…

Go语言标准库中的双向链表的基本用法

什么是二分查找区间&#xff1f; 什么是链表&#xff1f; 链表节点的代码实现&#xff1a; 链表的遍历&#xff1a; 链表如何插入元素&#xff1f; go语言标准库的链表&#xff1a; 练习代码&#xff1a; package mainimport ("container/list""fm…

如何在Python中诊断和解决内存溢出问题

python的内存溢出即程序在申请内存后未能正确释放&#xff0c;导致随着时间推移占用的内存越来越多&#xff0c;以下是一些可能导致内存溢出的原因&#xff1a; 1、循环引用&#xff1a;当对象之间形成循环引用&#xff0c;并且这些对象定义了__del__方法时&#xff0c;Python…

证券行业容器云平台建设之GPU池化建议

随着分布式微服务化技术的广泛使用&#xff0c;用户对于容器系统的需求急剧增加。证券行业在近几年开始着手引入企业级容器云平台。在AIGC的大环境下&#xff0c;证券行业正以数据中台、智能中台为核心&#xff0c;在营销、投顾、投研、风控等多个领域进行智能化升级&#xff0…

MYSQL主库切换binlog模式后主从同步错误

MYSQL主库切换binlog模式后主从库同步错误的问题 在使用FlinkSQL的mysql-cdc连接器来监听MySQL数据库时&#xff0c;通常需要将MySQL的binlog模式设置为ROW模式。然而&#xff0c;在实际项目中&#xff0c;可能会遇到如下问题&#xff1a; 当我们将MySQL主库的binlog模式从STA…

计算机网络408考研 2018

1 计算机网络408考研2018年真题解析_哔哩哔哩_bilibili

【sdk】- 对接阿里云抠图

文档地址&#xff1a;https://help.aliyun.com/zh/viapi/use-cases/general-image-segmentation?spma2c4g.11186623.0.0.3814173cenldIs java对接阿里云的通用分割&#xff0c;将代码原封不动复制进来&#xff0c;执行结果失败&#xff0c;咨询阿里云的人员之后&#xff0c;由…