C#与西门子PLC1500的ModbusTcp服务器通信3--搭建ModbusTcp服务器

news/2024/11/22 14:13:02/

1、打开仿真工具,创建PLC,注意创建完成后不要关闭

 注意,这个IP地址必须与西门子虚拟网卡的IP地址及虚拟机的网卡IP地址同一网段

 

2、打开博途V15,创建项目,命名为Lan项目

 

3、添加1500系列CPU1513

 

4、设置设置IP地址及属性

 

 

 5、添加通信模块MB_SERVER

找到程序块main,找到右边的指令,找到通信,找到其它,拖到MB_SERVER到程序段1中

 

 重点看mb_hold_reg和connect参数,disconnet为false表示被动连接,意思是说服务器等待客户机来连接,而不是服务器主动连接客户机,也就是说要客户机主动来连接服务器,到时候客户机通过IP地址和端口来连接服务器,所以连接服务器肯定要通过CONNECT这个引脚,连接成功后客户机需要数据,就需要MB_HOLD_REG引脚来回复数据。

现在这里是???,先别管,保存项目,继续下面的,因为还没有设置好其他

6、添加一个全局数据块DB2,创建一个数据类型为TCON_IP_v4的变量,用于匹配CONNECT

图中各引脚定义:

  其中id和localport可以自己定,但那个interfaceid是64,这个不能随便改,因为读取设备有个ID号,这个参数是隐含的,也要确保与设备保持一致,如图

 至于那个remoteport是表示哪些外部的IP可以连接本服务器,默认情况下是全部的IP,一般不要修改,除非有特别要求,所以这里保持默认,即允许任何IP地址连接本服务器,至于ID可以理解为进程ID,范围是1-4095,不能为0,每个连接ID必须独立,本案例为1(修改起始值为1);

DB2编译一下,成功

7,添加一个全局数据块DB3,用于匹配功能块“MB_SERVER”的管脚参数“MB_HOLD_REG”

 添加若干个变量,这里是8个,你可以根据实际情况

     

 设置块属性

 编译成功,可以看到变量的偏移量

 8,设置MB_HOLD_REG引脚参数

 MB_HOLD_REG就是保持寄存器的意思,在Modbus协议中就是03功能码

双击引脚,填写“P#DB3.DBX0.0 BYTE 20”,这里我重点讲下这个引脚是怎么配置,P表示指针的意思,DB3是因为上面第10步中,我添加的数据块名称是DB3,你要根据自己添加的数据块实际名称来改,然后0.0 BYTE 20表示从0到20个字节,为什么是20了,看下面图

word是一个字,占一个寄存器,占2个字节,real是两个字,占2个寄存器,占4个字节,因此第一个变量m1-speed的地址是0,1,8个变量的占的字节分别是:

m1-speed:0,1
m1-duaror:2,3
m1-level:4,5
m1-temp:6,7,8,9
m2-speed:10,11
m2-duaror:12,13
m2-level:14,15
m2-temp:16,17,18,19

从0到19共20个字节,字节就是用BYTE表示的啊,要明白这个意思,所以是0.0 BYTE 20,这里不能乱写,写错了就读不到变量的值,这里很多人容易搞错,要根据你的变量的字节范围来写,只能少,不能多,比如0.0 BYTE 22,就不对,因为没有22个字节,只有20个字节,不过,可以是0.0 BYTE 16,这就表示只读取前面7个变量,第8个变量不读取,除非你是这样的要求,当然后面可以添加很多个变量,

 如上又添加了2个变量,字节范围24个字节(0---23),但是我的指针是P#DB3.DBX0.0 BYTE 20,就只会读取前面20个字节,即前面8个变量的值,后面的9,10变量不会读取,特别要理解这个地方,很多文章没有讲清楚,搞得一套糊涂,很多人也没有搞明白这里到底要怎么写。引脚MB_HOLD_REG的含义就是指向哪个数据块的哪个范围的字节来响应外部程序或设备的MODBUSTCP请求,这个字节范围只是少于等于,不能大于数据块的范围。

9,设置CONNECT引脚参数

这个引脚的含义就是指用哪个数据块来响应外部连接本服务器,因为MODBUSTCP连接时,需要指定服务器的IP地址及端口,如图

 这个"tcp_connector".Connector,不就是指DB2数据块中的变量Connector吗?

 前面第6步创建数据块2,创建变量Connector,就是起这个作用的,各位大佬,各位长佬,明白了不?

 10、编译main程序块,成功

 11,下载程序到PLC

 

 

 12、针对DB3进行监控变量

13、小结

 到此,PLC搭建成MODBUSTCP服务器完成,后面写C#程序,基本过程是:创建Plc,创建项目,设置设备IP地址,添加mb_server模块,添加2个数据块,数据块中添加变量,设置引脚参数,编译下载程序到PLC。

下载成功后,就意味着modbustcp服务器已经启动了,已经准备好等待客户机连接,读取保存寄存器的数据值了,不需要额外什么操作。


http://www.ppmy.cn/news/1054306.html

相关文章

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接:https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣,从字面的意思可以理解&…

关于slot-scope已经废弃的问题

说起来啊,这个问题啊,我之前一直没关注,还是webstorm给我的警告。 因为使用了element-ui的组件库,所以在使用组件的时候往往就cv大法了,直到今天用webstorm写代码是,提示了如下的错误 我这一看&#xff0c…

概率论作业啊啊啊

1 数据位置 (Measures of location) 对于数据集: 7 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 12 , 13 , 14 , 14 , 15 , 16 7,9,9,10,10,11,11,12,12,12,13,14,14,15,16 7,9,9,10,10,11,11,12,12,12,13,14,14,15,16 计算加权平均数,其中权重为: 2 , 1 , 3 , 2 ,…

MySQL 临时表与内存表的区别

文章目录 1.临时表2.内存表3.区别4.小结 在 MySQL 中,Temporary Table(临时表)和 Memory Table(内存表)是两种不同的表类型,它们有一些重要的区别和用途。 1.临时表 临时表(Temporary Table&a…

react-hooks 一般写法汇总

文件一般写法 // 引入统一封装api请求 import { getById } from "/api"; // 引入ui组件库 import { Toast } from "antd-mobile"; // useEffect 类似vue中watch,或者moundted生命周期,视第二参数数据而定 // useState 是vue2的data…

创建型(二) - 单例模式

一、概念 单例设计模式(Singleton Design Pattern):一个类只允许创建一个对象(或者实例),那这个类就是一个单例类。 优点:在内存里只有一个实例,减少了内存的开销,避免…

中国移动秋招攻略,网申测评和面试

中国移动秋招简介 按照往年的惯例来看,移动会在每年的8月份发布相关秋招信息,紧接着考生并进行网申,面试的时间跨度也非常的长,大概是9~12月份。整个招聘流程,包括投递简历网申,笔试测评,面试录…

Cyanine3 NHS ester生物分子的标记与共价结合1032678-38-8

​欢迎来到星戈瑞荧光stargraydye!小编带您盘点: Cyanine3 NHS ester是一种荧光染料,可用于将含有游离氨基(-NH2)的生物分子如蛋白质、抗体、肽段、核酸等进行标记和共价结合。这个过程通常称为NHS酯化反应&#xff0c…