全国服务热线: 15821971992

西门子授权代理|交换机总代理商

发布日期 :2023-07-19 17:06发布IP:114.95.101.251编号:11787331
品牌:
西门子
型号:
模块
产地:
德国
分 类
工控系统及装备
单 价
电议
有效期至
长期有效
咨询电话
15821971992
手机
15821971992
Email
2724917714@qq.com
让卖家联系我
详细介绍

   西门子PLC是每个人都非常熟悉的一款PLC品牌,大家在使用西门子软件或者逛西门子论坛,经常会看到一个词叫做Open User Communication或开放式通信,其实就是TCP/UDP通信方式。我们可以从以下两张图中看出,分别为S7-200Smart编程软件Micro/Win Smart V2.5及博途TIA V15.1编程软件中关于通信库的部分截图:




        我们可以看到无论是西门子的中高端PLC还是低端PLC,都是支持开放式TCP/UDP通信的,本案例以西门子S7-1200PLC作为TCP服务器,上位机作为TCP客户端来实现上位机与PLC之间的通信。


1、PLC程序编写


(1)通过博图软件创建一个新的PLC项目根据硬件型号插入新设备,这里选择CPU 1214C DC DC DC




(2)双击PLC的以太网口,设置IP地址,这里设置为192.168.1.210


(3)创建一个新的DB块用于发送和接收数据,这里定义为DB100,其中SendBuffer和ReceiveBuffer分别为100个字节的数组,注意DB块要去除优化的块访问


很多人都知道西门子PLC有连接数的限制,下图是S7-1200的连接资源:




说实话,我是看得不太明白的,于是,有了下面的测试,测试基于xktComm库,我计划按顺序开启N个连接,然后每个连接在连接成功后再进行一次数据读取,确认通信正常,观察下N的限制是多少?


于是有了下面的代码:


Console.WriteLine("多连接通信测试开始");

List SiemensList = new List();

for (int j = 1; j = index)

object res = SiemensList[index - 1].Read("MD0", xktComm.Common.VarType.DInt);

Console.WriteLine("读取结果:" + res.ToString());

continue;

break;

Console.WriteLine("多连接通信测试完成");


为了保证连接始终可用,我增加了一个二次测试,就是将所有的连接都放到一个集合中,后续可用随意测试某个连接是否仍然可用。


 作者:付工上位机实战 https://www.bilibili.com/read/cv11401466?from=search&spm_id_from=333.337.0.0 出处:bilibili



(4)打开OB1,将指令TSEND_C拖拽至OB1的程序段1中,根据操作提示添加背景数据块




(5)在TSEND_C选择属性>组态>连接参数:


伙伴选择“未指定”


设置客户端主动建立连接


连接类型选择TCP


新建一个连接数据


连接ID设置为1


本地端口设置为2000




(6)双击CPU,启用系统存储区和时钟存储区字节,使用默认的MB0和MB1




(7)回到OB1,填写REQ和DATA,REQ采用1秒钟的脉冲,DATA为SendBuffer和ReceiveBuffer的结合




(8)将指令TRCV_C拖拽至OB1的程序段1中,根据操作提示添加背景数据块,连接数据选择之前创建好的




(9)回到OB1,填写ENR和DATA,ENR填写True,保持接收,DATA为ReceiveBuffer




(10)编译PLC程序,下载PLC程序




(11)打开NetAssist连接PLC,进行通信测试 :


设置TCP Client 


远程主机地址填写PLC的IP 


端口号填写设置的2000 


接收选择Hex显示 


点击连接 


观察返回数据及长度





2、上位机程序编写


        PLC作为TCP服务器,上位机作为TCP客户端,因此上位机开发流程就是TCP客户端的编写流程,如下图所示:





    TCP客户端编程步骤:


客户端初始化 Socket,得到文件描述符


客户端调用Connect,连接服务器


连接成功调用Send向客户端发送消息


通过Receive接收客户端消息


     根据上述流程编写UI界面如下图所示:



12.png


         PLC程序中,每隔一秒钟会往客户端中发送200个字节数据,因此只要我们连接上服务器,然后通过开启一个线程来持续接收,即可获取到PLC发送的数据。


然而,开放式TCP通信的难点不在于获取数据,难点在于如何实现通用的数据解析?当需要进行数据写入时,如何实现通用的数据写入,由于篇幅有限,无法展示全部代码,扫描下方二维码或者点击阅读全文,快速进入腾讯课程,付老师手把手教你如何实现开放式TCP通信。


相关分类
推荐产品
信息搜索
 
智能科技新闻
浔之漫智控技术(上海)有限公司
  • 地址:上海市松江区石湖荡镇塔汇路755弄29号1幢一层A区213室
  • 电话:15821971992
  • 邮件:2724917714@qq.com
  • 手机:15821971992
  • 联系人:聂聪
授权代理新闻
授权代理相关搜索