专业的编程技术博客社区

网站首页 > 博客文章 正文

用PLC的指针实现字符串转byte(Codesys平台)一文极简搞懂指针

baijin 2025-08-02 17:23:48 博客文章 4 ℃ 0 评论

德国设备通信卡死,转换指令全失效,程序员半夜拆解指针密码。

最近公司在搞个德国老设备改造,跟MES系统连不上。问题出在数据通信上,PLC只能发字节数据,而德国人原来的程序用了字符串,一运行就报错。本来以为有个现成的字符串转字节指令能用,结果发现这玩意只能转数字字符串。

比如把"ABCDEFG"扔进去,出来的全是0。改成"20"倒没问题,出来就是十进制20的字节码。明明看着是通用指令,关键时刻完全没用,气得我直跺脚。

后来只好研究指针。先定义个叫pKeyword的指针指向字符串地址,再定义pSendToMes指向要发出去的字节数组。然后循环次数等于字符串长度,每次循环把当前字符对应的字节复制过去,指针往后移一个位置。

具体操作就是先取地址赋给指针,循环里用pKeyword^取当前字符的值,赋给pSendToMes的位置。接着两个指针都加1,指向下一位。循环七次刚好把"ABCDEFG"七个字母转成对应ASCII码的字节。

试了下效果不错,七个字节显示41到47,正好是大写字母A到G的ASCII码。不过刚开始没搞懂指针偏移那步,调试了两小时才发现要每次循环都动指针。

原来字符串在内存里是连续存放的,指针就像游标一样一个个过。但第一次用指针操作数组时,总容易算错步长,多亏有调试器能看内存地址变化。

最后把转换后的字节数组发出去,MES那边正常接收到了。虽然过程绕了一大圈,但总算找到了靠谱方法。现在公司其他人遇到同样问题都会拿这个当模板改。

后来这项目就顺利交了,虽然累死我也学到了不少。现在偶尔还会看看那段代码,指针确实有点意思。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表