[西门子] PLCSIM-Advanced实现西门子PLC开放式TCP通信

[复制链接]
查看70554 | 回复0 | 2024-8-20 09:50:24 | 显示全部楼层 |阅读模式
-Begin-
大家好!我是付工。大部分初学者在学习C#上位机编程时,当需要实现与西门子PLC通信时,如果手上没有PLC实物,就可以通过仿真的方式来搭建PLC环境。插播一个广告,大家帮忙给视频号点个关注,还差50个关注,感谢!西门子PLC的仿真有两种方式,第一种方式是使用PLCSIM+NetToPLCsim,第二种方式是使用PLCSIM-Advanced,这两种都有各自的优势和不足之处。第一种方式使用NetToPLCsim,不仅可以仿真S7-1500,还可以仿真S7-1200/S7-300/S7-400,但是只能仿真S7通信协议,无法仿真其他通信协议。第二种方式使用PLCSIM-Advanced,不仅可以仿真S7通信协议,还可以仿真开放式TCP/UDP、ModbusTCP、OPCUA等以太网协议,但是仅支持S7-1500和ET200SP,无法仿真其他型号PLC。这篇文章主要跟大家介绍如何基于PLCSIM-Advanced搭建一个仿真西门子PLC,实现开放式TCP通信。
仿真过程
1、首先我们要安装好博图和PLCSIM-Advanced软件,这个安装过程,前面已经有文章介绍过,具体参考:西门子博图V17及仿真器安装及注意事项2、PLCSIM-Advanced软件安装完成后,电脑中会额外多出一个虚拟网卡,名称为Siemens PLCSIMVirtual Ethernet Adapter,如图所示:

3、首先我们设置一下这个虚拟网卡的IP,这里尽量不要和电脑自带网卡一致,一般情况下,我们的电脑默认网卡是0段或1段等,为了避免重复,所以我这里使用10这个网段,这里将IP地址设置为192.168.10.200,如图所示:

4、管理员权限运行PLCSIM-Advanced软件,这里注意软件要以管理员权限运行,可以直接每次右击,以管理员权限运行,如果想一劳永逸,可以点击图标,右击【属性】,在【兼容性】选项中,将【以管理员身份运行此程序】的选项勾选:


5、打开PLCSIM-Advanced软件,按照图示步骤进行设置,这里要注意IP地址必须与虚拟网卡同一网段,但是不能相同,比如虚拟网卡设置的是192.168.10.200,这里设置为192.168.10.100,点击Start之后,等待3秒,PLC Instance显示黄色,表示仿真PLC已经就绪,如图所示:

6、仿真PLC就绪之后,使用博图TIA创建一个项目,这里的控制器必须要选择1500系列PLC,PLCSIM-Advanced只支持S7-1500PLC,但是对于我们学习通信来说,是没有影响的,博图项目创建如下所示,我们选择的PLC控制器型号CPU1511-1PN,如图所示:

7、由于是仿真环境,与真实PLC还是有一点区别的,这里我们要提前设置一下,点击项目,右击【属性】,切换到【保护】选项,将其中的【块编译时支持仿真】勾选上,如图所示:

8、修改PLC的IP地址,修改与PLCSIM-Advanced一致,即192.168.10.100,如图所示:


9、下载PLC程序,这里要把PG/PC接口选择成Siemens PLCSIM VirtualEthernet Adapter,点击【搜索】按钮,确定可以搜索到仿真PLC,选择搜索到的PLC,点击【下载】按钮,如图所示:



10、完成PLC程序下载后,选择【启动模块】,点击【完成】按钮,如图所示:

11、这时候,我们观察PLCSIM-Advanced软件,指示灯由黄色转换成绿色,表示PLC运行正常,至此,一个仿真的S7-1500PLC环境就搭建完成了,接下来可以进行通信程序编写,如图所示:


PLC程序编写

西门子PLC实现开放式TCP通信是需要编写PLC程序的,PLC作为TCP服务器,上位机作为TCP客户端,下面对PLC程序编写步骤进行阐述说明:
1、创建一个新的DB块,DB块编号定义为DB100,用于与上位机通信,在DB块中创建变量用于通信测试,读取和写入各创建5个布尔、5个整型和5个浮点数,然后右击DB块,选择【属性】,把【优化的块访问】的勾选去掉,去除优化块访问后,每个变量后面会有一个偏移量,这个对于我们后续解析数据是有用的,如图所示:


2、打开OB1,在右侧通信中,找到指令TSEND_C,然后拖拽至OB1的程序段1中,根据操作提示添加对应的背景数据块,如图所示:



3、选择TSEND_C块,右击属性> 组态 > 连接参数:
(1)伙伴:选择“未指定”(2)连接类型:选择TCP(3)连接数据:新建一个连接数据(4)连接ID:设置为1(5)设置伙伴主动建立连接(6)伙伴端口:设置为2000具体设置参数如图所示:


4、启用系统存储区和时钟存储区字节,选择CPU,右击属性,找到常规,选择系统与时钟存储器,勾选启用系统存储器字节和启用时钟存储器字节,地址MBx使用默认的MB0和MB1即可,如图所示:


5、回到OB1,填写REQ和DATA,REQ采用1秒钟的脉冲,DATA为Read部分和Write部分,一共是64个字节,如图所示:



6、从通信库中找到指令TRCV_C,拖拽至OB1的程序段2中,根据操作提示添加背景数据块,CONNECT引脚使用前面SEND的参数一致,如图所示:


7、选择功能块TRCV_C,右击属性,在连接参数中,连接数据直接选择拉下菜单中PLC_1_Send_DB,相关参数会自动填充,如图所示:

8、回到程序段2中,填写EN_R和DATA程序引脚,EN_R填写true,表示持续接收数据,DATA为Write部分,即P#DB100.DBX32.0 BYTE 32,如图所示:

9、编译PLC程序,下载PLC程序,下载完成后启动模块,如图所示:


10、打开网络调试助手NetAssist,连接上PLC,进行通信测试 ,具体步骤如下:
(1)设置协议类型为TCP Client(2)远程地址填写PLC的IP:192.168.10.100(3)端口号填写设置的2000(4)接收选择Hex显示(5)点击【连接】(6)观察返回数据及长度通信测试最终实现效果如图4-32所示:





本帖子中包含更多资源

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

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

本版积分规则