接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。

首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。

放入准备好的通讯类库;

新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机, 建立博途项目流程如下:

新建项目,右键项目-属性-保护-对勾,如图:

 

 不得不说的是,仿真中加密的FB块是无法下载的哦~

添加CPU,本次使用S7-1200 系列,设置CPU安全等级,允许PUT/GET通信,300/400应该是没有的,可以正常用。

扫描二维码关注公众号,回复: 14657305 查看本文章

写程序,写完程序后重点来咯~~~以下内容,尤其是仿真和开工具的顺序很重要。

首先关闭虚拟机防火墙,都会吧。。。

虚拟机设置网络为桥接,选择好本机用的网卡

设置CPU的IP,如下图,192.168.10.25

设置虚拟机网卡IP,最好手动,要不然麻烦。我设置192.168.10.10(必须全部同网段)

然后管理员身份运行NetTOPLCSIM;(仿真之前运行

上图提示获取端口,点击是即可,如果后期出现问题,也可以点击tools进行获取。 下图获取成功后点击OK

然后点击PLCSIM,点击确定

 然后出现PLCSIM,直接搜索下载即可。

 可以看到我们仿真已经成功了

 然后点击nettoplcsim的Add,添加一个服务;

 不要自己手动输入,要检测出来的。

 

 注意观察下面的槽号要求;

设置完成点击OK,点击启动服务;

 

 

 服务启动之后,我们进入客户端层面,Unity3D简单写了一个读取的脚本,代码如下(注释写的很清楚了):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using PLC通讯库.Siemens;//引入类库
using Siemens;//引入类库
using System.Threading;//新开线程不影响主线程,注意,该线程不适用于Unitty中组件的操作。
using UnityEngine.UI;//引入UI可以操作UI,不多说都懂
public class OP : MonoBehaviour
{
    public InputField floattext;
    Thread CONPLCNOW;//定义PLC连接线程,读取数据量不大,就不新建线程了
    public SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200);//实例化类库
    // Start is called before the first frame update
    void Start()
    {
        //不加按钮了,直接运行就实例化然后连接
        CONPLCNOW = new Thread(CON);//定义线程方法
        CONPLCNOW.Start();//执行线程
    }
    private void CON(){//这里是连接PLC用的方法
        siemensS7Net.IpAddress = "192.168.10.10";//定义所要连接PLC
        siemensS7Net.Port = 102;//定义端口号S7NET通用102
        siemensS7Net.ConnectServer();//连接PLC
        if (siemensS7Net.ConnectServer().IsSuccess)//判断打印,不说了
        {
            print("连接成功");
        }
        else { 
        print(siemensS7Net.ConnectServer().ToMessageShowString());
        }
    }
    public void readfloat()//定义读取按钮点击的方法
    {
        floattext.text = siemensS7Net.ReadFloat(floattext.text).Content.ToString();//读取并赋值,相信大家都能看懂。
    }
    // Update is called once per frame
    private void OnDestroy()
    {
        CONPLCNOW.Abort();//记得关闭线程哦
    }
}

可以看到图中PLC的IP是10而不是25,因为信息是通过转发的。

客户端添加一个IP,如下图,我客户端IP为192.168.10.200

将button的点击事件绑定readfloat(),将定义的Iputfield挂到脚本上,以下是Unity基本操作,可以略过。

 

 运行一下看看~

 OK!已经连接成功啦,那我们尝试一下读取数据(上动图!)

欧克!这篇文章里,写了太多,要类库的可以私信但是不知道啥时候能回复。 

猜你喜欢

转载自blog.csdn.net/u011723630/article/details/124158258
今日推荐