『7x24小时有问必答』
"三阶段"优秀工程师之路
1、基础阶段:博途PLC技术。
2、中级阶段:博途与C#高级语言技术。
3、高级阶段:PLC标准化编程方法。
标准化方法之路!
         上次看到大家对C#与西门子PLC通过S7通讯的例子饶有兴趣,今天趁热打铁来写一个C#与PLC实现modbusTcp通讯的例子。
链接如下:
           C#与PLC通讯可做客户端也可做服务器,这个要看项目需求,这里上位机用来做客户端。
          此项目中除了用到NModbus4通讯库,还用到了thinger.DataConvertLib数据转换库,此库能极为方便的实现各种数据类型和高低字节的切换,做上位机的小伙伴务必熟练掌握,用时信手拈来。

第一步:还以WinFrom项目为例,创建一个基于.Net Framework框架的项目, 这里选择.Net Framework4.7.2。

在窗口设计器中设计以下窗口

第二步:NuGet中有很多针对modbus的通讯库,这里选用NModbus4通讯库,在NuGet中安装NModbus4库,版本为2.1.0。

代码总览:在开始代码部分之前我们先来总览一下程序结构。

第三步:双击连接按钮,在点击按钮事件中添加以下代码。

第四步:双击断开连接按钮,在点击按钮事件中添加以下代码。

第五步:双击读取单个按钮,在点击按钮事件中添加以下代码,这里读取出来的是一个16进制数。

第六步:双击写入单个按钮,在点击按钮事件中添加以下代码,这里输入的是10进制数,C#会将其转为ushort类型写入到寄存器中。

第七步:有了读写单个的经验我们尝试着把读写多个写复杂一些,读写一下float数据。
双击读取多个按钮,在点击按钮事件中添加以下代码。在这个方法中先拿到起始地址和读取个数文本,通过这两个数据将读取到的ushort数据放在ushort数组readData中。再将这个ushort数组两两合并成一个32位float类型的数组readDataf,最后将高低字节更改为ABCD形式,最终显示在读取文本框上。

第八步:双击写入多个按钮,在点击按钮事件中添加以下代码。
这一步通过识别写入多个文本框中“\r”回车键 ,将输入的float数据存放在float型数组ff中,最后将每一个float数据拆分成DCBA形式的ushort类型,最后写入到寄存器中。

第九步:PLC程序编写。
验证阶段在1200PLC程序中插入mb_server程序块、创建TCON_IP_v4数据类型、创建数据区(相信大家对西门子PLC做modbusTcp服务器已经烂熟于心)并做好连接,下载/运行/监控程序。启动C#程序,输入正确的IP和端口号,点击连接PLC,发现连接状态变成了“连接成功”。PLC中状态码变为16#7006。

第十步:程序测试
在C#程序中输入起始地址为0,在写入值文本框中输入255,点击写入单个按钮,数据成功写入到了PLC中。

随后点击读取单个,看到读取文本框成功读取到了刚刚写入到PLC中的数据。

写入多个的验证起始地址从1开始,连续写入6个16位数据(3个float型数据),点击写入按钮后发现PLC中对应地址的数据发生了变化。

随后将读取个数文本框中改为10,点击读取多个按钮,读取文本框中成功读取到写入的数据和为0的数据。

自此便成功的实现了C#与西门子1200PLC的modbusTcp通讯。
加入博途之友,与优秀工程师有约
  芮老师的书籍(京东和当当可以购买)  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码