"三阶段"优秀工程师之路
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通讯。
总结:
与“优秀者”同行!
让技术学习更简单!
工程师作者的微信
非诚勿扰
C#程序源码获取:朋友圈转发文章,获得5个赞,可以向“博途之友”索要C#程序的源代码,“博途之友”微信号在文章的最下面。
PLC标准化的技术方法:标准化包括哪些技术点?技术点之间的关系是怎样的?
PLC标准化的技术路线讲解视频:S88标准、技术架构和不断迭代
加入博途之友,与优秀工程师有约
芮老师的书籍(京东和当当可以购买)