赞
踩
本文主要讲解使用S7netplus通信开发及TIA Portal安装和硬软件配置。本文基于使用西门子s7系列PLC设备,未涉及到使用模拟器仿真PLC。
使用官方下载的TIA_Portal_STEP_7_Pro_WINCC_Adv_V15_1_Upd5安装程序进行安装,按照步骤逐步安装。
如果手上咱们没有官方的license,可以使用Sim_EKB_Install_2019_12_13程序,针对安装的TIA版本,选择安装对应程序的长密钥。例如安装了S7 professional,选择对应的长密钥:
进行科学研究后若出现无法使用的情况下,可能出现的是License Manager出现故障。
若出现故障需要修复或重装License Manager,则需要进行如下步骤操作:
(1)通过程序卸载TIA相关的软件
(2)通常S7,Wincc等相关的软件可以顺利卸载,但是安装文件夹里面的TIAADMIN会无法删除,因为后台一直在启动着TIA Administrator的相关服务。
(3)通过任务管理,分别关闭UMC相关的服务。并在计算机管理里面关闭如下服务:
若还有与西门子相关的一些服务(如含关键字:Simatic,Siemens,TIA等),则同样关掉。
(4)手动删除原安装文件夹里面的所有文件,此时可以顺利删除
(5)完成全部删除,重启。此后可以重新安装TIA软件,按照前面1-2步骤重装。
启动TIA Portal,新建项目,依次进行如下操作:
从项目树中添加设备,从PLC设备上找到对应型号,添加。
在添加的PLC设备,右键找到属性,在以太网地址选项中定义PLC设备的IP地址。
在Profinet接口中的Web服务器访问中勾选启动Web服务。
同时在Web服务器中勾选如下选项:
通过浏览器访问PLC地址,可以看到一个简单的PLC页面:
为了能够从第三方需要开放权限,通过如下选项获得完全访问权限:
在连接机制里面选择允许远程对象PUT/GET通信访问:
PLC有两种数据来源,一种是从端口直接过去数据,一种是通过程序,即程序块定义数据块来源。
PLC变量是从PLC端口直接转发数据,程序块内可以定义程序和数据块,数据块通过自定义的程序确定数据的地址和内容。
在PLC变量中定义需要的数据包括:类型,地址等:
在程序块中添加数据块:
在数据块中定义添加数据类型:
注意:在数据块选择属性,在常规中属性反选优化的块访问:
完成硬软件配置后,需要编译并下载到设备,只有完成下载后设备才能有效。
启动PLC设备,启动后才可获取设备数据:
Visual Studio新建C#项目,在Nuget搜索并安装S7netplus:
项目中引用S7.net,定义Plc对象:
Plc plc = new Plc(CpuType.S71200, "192.168.1.118", 0, 1);
其中CpuType是PLC类型;IP是PLC的IP地址;Rack是机架号,默认为0;Slot是机架上的位置号,默认为1。
plc.Open();
启动连接。
plc.IsConnected
确定连接是否成功。
通过PLC的数据地址访问需要的数据:
数据块访问:地址构成为 数据块号.PLC数据类型+偏移量
例如:DB1.DBD2.0,其中DB1为数据块号;DBD为数据类型,其中的D代表Dword,即32位Uint,W代表Word,即16位Ushort,X代表bit,即1位bit;2.0为偏移量,在数据块中定义的地址:
PLC的数据块原始只有三种数据类型,虽然在TIA Portal中可以定义多种数据类型,如bool,real(即float),int,word(即16bit ushort),byte等等,但在实际传输中所有的数据类型将统一归为bit,word,dword三种类型,在通过字节数据转换转为所需的数据类型。如读取浮点值:
var realVariable = ((uint)plc.Read("DB1.DBD2.0")).ConvertToFloat();
PLC变量访问:通过地址访问变量数据,地址形式为TIA Portal变量表里面定义的地址,地址有三种标识符,为I,M,Q,对应的数据类型标识为bit,word,dword,与上面的数据块的类型相同,其中bit类型的地址示例为I0.0,word类型的地址例为QW1,dword类型的地址例为MD2,在开发中的读取方式为:
var variable = (bool)plc.Read("I0.0");
直接通过变量表显示的地址即可读取对应端口的变量名。
Plc类中提供第二种读取方式,即:
public object Read(DataType dataType, int db, int startByteAdr, VarType varType, int varCount, byte bitAdr = 0);
dataType为PLC的数据源类型,即DataBlock或Memory等,db为数据块的编号,如DB1.DBW20.3,则db为1,startByteAdr为地址起始位,如DB1.DBW20.3,则startByteAdr为20,varType为数据类型,varCount为读取的数据位长度,bitAdr位地址数据位,如DB1.DBW20.3,则bitAdr为3。
例如:bool db1d1 = (bool)plc.Read(DataType.DataBlock, 1, 20, VarType.Bit, 1, 3);
则读取对应的地址为DB1.DBW20.3的数据。
读取方式为:
var bytes = (byte[])plc.ReadBytes(DataType.DataBlock, 1, 2, 4);
数据源类型为DataBlock,数据块编号为1,偏移量为2,读取数据长度为4。所有类型的数据将通过字节数组的形式进行传输,以32位float为例,则传输4长度字节数组,数组的数据构成顺序与C#的对应数据类型以数组方式构成的顺序相反,如:
float variable = BitConverter.ToSingle(new byte[] { bytes[3], bytes[2], bytes[1], bytes[0]}, 0);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。