合信论坛

快捷导航
查看: 556|回复: 0

一种喷码机socket通讯数据解析方法

[复制链接]

13

主题

13

帖子

423

积分

游客

积分
423
发表于 2026-2-28 14:51:56 | 显示全部楼层 |阅读模式
      本文介绍一种socket通讯中数据处理的一种方法,PLC只接收喷码上位机的数据,不发送数据,上位机过来的数据是一串ASCII码的字符,
需要解析数据串提取需要的数量数据,喷码机会发送喷码数量给PLC,一个可能发送一个,也可能发送多个,最多可能100个,客户给的字符
串格式是 :”命令格式:|PrintPDFCopies|数量1, 数量2, 数量3, 数量4……(比如:|PrintPDFCopies|75, 1, 1, 1),结束符是\r\n“;整个数
串对PLC有用的是数量1、数量2、数量3、数量4等,需要把上位机的数量分别提取到PLC的寄存器中;这么大的数据处理量需要用C语言处理。
      到现场用PLC监控喷码上位机发送的数据,其实和客户发过来的还有点差别,数据内容在前面地址还会发送本次数量的总和,如下图,
图片1.png
PLC接收的数据从VB40000开始,3099是数量54和数量3045的总和,对应数量1为54,数量2为3045;54和3045这两个数据是PLC所需要的,
因为上位机发送的数量不固定,前面的总数量占几个字也是不固定,会造成数量1的起始地址发生变化,所以要写个计算数量1起止地址的程序,
ASCII码数值-48就是对应的十进制数值,结束符\r \n对应十进制是13和10,对应算起始地址的C程序如下图,
图片2.png

      当确认数量1的起始地址后,可以间隔符 逗号来判断发送过来的数量数据是几位数,如果没搜索到逗号或者结束符就不是完整的数量数据,
程序里先把搜索到的数据存放到数组a,转换成10进制的公式为(以3045为例)3045=3*10的3次方 + 0*10的2次方 + 4*10的1次方+5*10的0次方。
程序里再嵌套一个for循环,支持1200个数量,当搜索到结束符后就会自动跳出循环,完成数据解析,程序如下图
图片3.png


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2026-6-14 23:15 , Processed in 0.021158 second(s), 22 queries .

快速回复 返回顶部 返回列表