西门子SCL基础教学---字符串提取并转换 点击:287 | 回复:6



控友华安

    
  • 精华:0帖
  • 求助:4帖
  • 帖子:53帖 | 507回
  • 年度积分:22
  • 历史总积分:2304
  • 注册:2011年10月28日
发表于:2024-02-02 15:10:12
楼主

一晃。。。又好久没更新了。。。我啊,其实很勤快的了。。。(嗯。。。)

这个程序。。。事情的起因呢,是某一台设备只能做TCP Client导致的。

说下情况:整个产线,有MES,然后MES是做TCP Client,那么此时这个某一台设备只要支持TCP Server,那就可以直接把数据发送到MES去,由MES去解决这个问题。而且MES里面也已经处理过这个事情了,因为TCP的设备不止它一台。

然后问题就出现了,MES表示:我不想再做TCP Server的程序。

这个某一台设备表示:我做TCP Server可以,然后在最终测试的时候啊,发现这个设备做了TCP Server之后,发的IO信号触发,它接收到了,但是不运行了。测试了半天,最终得出结论:这个某一台设备只能做TCP Client。

其实这个某一台设备,在现场还有另一台,另一台是可以做的。所以啊,国产你还有很长的路要走。

最终没办法,我只能拿PLC去做TCP Server和MES去通讯,由这个某一台设备先把数据发送到我的PLC,然后再去MES。就做出了这么个离谱的事情。

然后问题就来了,我想着我做都做了,我直接把字符串转换成你要的数据,我直接发MES,那MES那边就简单了。想法很美好,现实很残酷(在当时)

PLC是1500的,怪我没仔细看1500的指令,所以我写了个这个程序。其实在1500里面,字符串的列表中,有一个指令叫“split”,这个指令很强,可以很简单的将字符串提取成单个字符串。一切都怪我,没仔细看,就诞生了这个程序。

说下原理:

循环这个字符数组,当循环到“,”或者“;”的时候,对数组高位+1,低位赋值1

当不等于“,”或者“;”的时候,则对数组低位+1即可。

如果循环到空字符串“ ”则退出这个循环。

然后就是将这么多的字符数组进行合并,合并到数组字符串里面

最后就是循环这个数组字符串,用指令将其进行字符串到数值的转换。

下面贴下图吧。程序很简单的几步。可以做到发过来的字符串长度不一,也不需要担心分隔符之前的字符位数有多少。如果需要更多应用,那就是你自己修改这程序即可。

d03ad1b6f8434abf1466d4d1f50f1be.png

需要程序的小伙伴也可以下载下载源码

所以啊,编程前一定要了解PLC的指令啊。。。。。。但是好处也有,因为1200没有“split”指令。


正在下载,请等待……
下载附件需0积分!



楼主最近还看过



Q458751110

  • 精华:0帖
  • 求助:1帖
  • 帖子:86帖 | 1249回
  • 年度积分:48
  • 历史总积分:7734
  • 注册:2006年4月04日
发表于:2024-02-06 12:28:26
1楼

在隔壁网站上看到这篇文章

控友华安

  • 精华:0帖
  • 求助:4帖
  • 帖子:58帖 | 513回
  • 年度积分:53
  • 历史总积分:2335
  • 注册:2011年10月28日
发表于:2024-02-18 17:47:27
2楼

用到的人不多亚

超级闪电&

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 111回
  • 年度积分:0
  • 历史总积分:57
  • 注册:2020年6月04日
发表于:2024-02-18 22:17:49
3楼

多谢楼主分享

工控小槊

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:35
  • 历史总积分:85
  • 注册:2023年8月01日
发表于:2024-02-19 11:43:05
4楼

多谢楼主分享

菊香斋主人

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 2546回
  • 年度积分:430
  • 历史总积分:3986
  • 注册:2012年7月28日
发表于:2024-02-19 12:39:13
5楼

学习学习,多谢楼主分享

liangq_11

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:5
  • 历史总积分:5
  • 注册:2014年6月25日
发表于:2024-02-21 16:13:39
6楼

学习一下,谢谢楼主分享~


热门招聘
相关主题

官方公众号

智造工程师