多语言展示
当前在线:133今日阅读:176今日分享:34

如何使用电脑虚拟西门子S7系列PLC

最近做几个项目,负责工控的单位使用的下位机都是采用西门子S7系列PLC,如S7-200,S7-1200,S71215等,而与上位机通信采用S7协议。也是翻了好多网页,才锁定了Snap7 这个开源library进行通信。 看示例代码也是简单,我花了没多少时间就写了个Demo ,然后与真机进行测试通信验证,结果一次性pass。后来真机归还,手头没有PLC了,但是上位机程序依然要进行,我想,既然PLC是基于TCP/IP通信的,那么应该有PLC模拟器之类的软件,可以虚拟真实的硬件进行通信验证。这次没那么幸运了,找了半天没有找到,后来在snap7的工程目录中找到了一些示例代码,有一个server的Demo,里面注释中提到“Virtual PLC',于是抱着试试的态度自己写一个虚拟PLC,折腾了好久,没有想到我成功了。好东西不敢私藏,记录此经验给大家分享,如有幸帮到您,麻烦点个赞。
工具/原料
1

snap7 lib

2

vc++ IDE

方法/步骤
1

snap源码工程目录中examples\cpp目录下有个snap7.cpp,snap7.h还有一个server.cpp,把这3个文件copy出来,加入到工程目录中,并配置snap7.lib所在路径,将snap7.lib 加入到编译选项中,修改server.cpp文件(原来的server.cpp文件内容较多,我写了一个最单程序,代码少,功能丰富,可以按照图片录入)。

2

38行前的代码用于定义读写事件,之后的代码是主程序,注册内部数据寄存器,我在主程序中将数据区初始化了一下,随便写了值,便于读写验证。

4

再次运行刚编译的server程序,运行上位机程序连接此虚拟PLC,发现程序ok了,读写手法,这个虚拟PLC都会有回应了。这次没有真实的PLC,我也可以进行模拟验证我的上位机程序了。

5

运行测试后,如需要启动原先关闭的服务,可以使用如下命令: net start s7oiehsx   (Win32)   net start s7oiehsx64  (Win64)

注意事项

102端口可能由其他程序占用,可以把不用的程序都先关闭

推荐信息