PLC通讯

PPI通讯

是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口,通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备,从站设备响应,从站不能主动发出信息。主站靠PPI协议管理的共享连接来与从站通讯。PPI协议并不限制与任意一个从站的通讯的主站的数量,但在一个网络中,主站不能超过32个。PPI协议最基本的用途是让西门子Step7-Micro/Win编程软件上传和下载程序和西门子人机界面与PC通信。

MPI通讯

  • MPI (multipoint interface)是SIMATIC s7多点通信的接口,是一种适用于少数站点间通信的网络,多用于连接上位机和少量plc之间近距离通信。通过Profibus电缆和接头,将控制器s7-300或s7-400的CPU自带的MPI编程口及s7-200CPU 自带的PPI通信口相互连接,以及与上位机网卡的编程口(MPI/DP 口)通过Profibus或MPI电缆连接即可实现。 网络中当然也可以不包括PC机而只包括plc。
  • MPI的通信速率为19.2k~12mbit/s ,但直接连接s7-200CPU通信口的MPI网,其最高速率通常为187.5kbit/s (受s7-200CPU最高通信速率的限制)。在MPI网络上最多可以有32个站,一个网段的最长通信距离为50米(通信波特率为187.5kbit/s时),更长的通信距离可以通过rs-485中继器扩展。MPI允许主-主通信和主-从通信,每个s7-200CPU通信口的连接数为4个。
  • MPI协议不能与一个作为PPI主站的s7-200CPU通信,即s7-300或s7-400与s7-200通信时必须保证这个s7-200 CPU不能再作PPI主站,Micro/Win也不能通过MPI协议访问作为PPI主站的s7-200CPU。s7-200CPU只能做MPI从站,即s7-200CPU之间不能通过MPI网络互相通信,只能通过PPI方式互相通信

Modbus通讯

  • Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在我国,Modbus已经成为国家标准GB/T19582-2008。据不完全统计:截止到2007年,Modbus的节点安装数量已经超过了1000万个。
  • Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。Modbus是一种单主站的主/从通信模式。一条Modbus网络上同时只能有一台主站,从站可以有若干个

Modbus特点:

1、标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。

2、Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。

3、Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

注:S7-200只支持Modbus RTU协议,不支持Modbus ASCII协议

using S7.Net

cs 复制代码
 Plc plc;
 Thread t1;
 
 //连接相机
 CogAcqFifoTool fifoTool=null;

 //tb
 CogToolBlock tb=null;
 private void ConnectPlc()
 {
     try
     {
         //CPUType.S71200   型号  S7-200、 S7-1200、S7-300、S7-400/S7-1500
         //"192.168.122.2"  ip地址  plc提供
         //rack: 机台号的位置,这个点也是PLC的知识点
         //slot: 插槽号的位置,也是PLC的知识点
         plc = new Plc(CpuType.S71200, "127.0.0.1", 102, 0, 0);
         plc.Open();

         //实时读取plc发过来的信息
         t1 = new Thread(Read);
         t1.Start();
     }catch (Exception ex)
     {
         MessageBox.Show("plc连接失败");
     }
 }
 private void Read()
 {
     while (true)
     {
         //读取里面存储的数据
         int res = Convert.ToInt32(plc.Read("MD104"));
         //为了允许跨线程
         Invoke(new Action(() =>
         {
             if (res == 1)
             {
                 TakePlc();
             }
             else
             {

             }
         }));
     }
 }
 private void TakePlc()
 {
     //判断相机是否连接正常
     if(fifoTool.Operator!=null)
     {
         fifoTool.Run();

         ICogImage image=fifoTool.OutputImage;
         cogDisplay1.Image = image;
         cogDisplay1.Fit();
         tb.Inputs["OutputImage"].Value = image;
         tb.Run();
         cogRecordDisplay1.Record = tb.CreateCurrentRecord().SubRecords[1];
         cogRecordDisplay1.Fit();

         double with = (double)tb.Outputs["width"].Value;
         if(with>368)
         {
             plc.Write();
         }
         else
         {
             plc.Write();
         }
     }
     
 }
  private void Form1_Load(object sender, EventArgs e)
  {
      ConnectPlc();
      tb = (CogToolBlock)CogSerializer.LoadObjectFromFile(Directory.GetCurrentDirectory() + "\\tb.vpp");
  }

创建类SiemensPLC

CpuType: PLC的cpu型号

IP: PLC的IP位置

rack: 机台号的位置

slot: 插槽号的位置

cs 复制代码
 public class SiemensPLC
 {
     // CpuType: PLC的cpu型号。我这里是1200/1212C。
     // IP: PLC的IP地址。
     // rack: 机台号的位置,这个也是PLC的知识点。
     // slot: 插槽号的位置,也是PLC的知识点

     public Plc plc = null;
     CpuType plcType;
     string ip;
     short rack;
     short slot;

     public SiemensPLC(CpuType type, string ip, short rack, short slot)
     {
         this.plcType = type;
         this.ip = ip;
         this.rack = rack;
         this.slot = slot;
         try
         {
             plc = new Plc(plcType, ip, rack, slot);
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
  public string ConnectionPLC()
  {
      string res = string.Empty;
      try
      {
          plc.Open();//连接plc
          res = "Connection is OK";
      }
      catch (Exception ex)
      {
          res = $"Connection is Fail{ex.Message}";
      }
      return res;
  }
  ///<summary>
  ///判断PLC是否已连接
  /// </summary>
  public bool PLCISOK()
  {
      return plc != null && plc.IsConnected;
  }
  
  ///<summary>
  ///向PLC写入数据
  /// </summary>
  /// <param name="add">地址</param>
  /// <param name="value">数据</param>
  public void Write(string add, object value)
  {
      plc.Write(add, value);
  }
  /// <summary>
  /// 读取某个地址的内容
  /// </summary>
  /// <param name="add">地址</param>
  /// <returns></returns>
  public object Read(string add)
  {
      return plc.Read(add);
  }
  public void DisconnectionPLC()
  {
      plc.Close();
  }
相关推荐
计算机程序设计开发3 小时前
相机租赁网站基于Spring Boot SSM
spring boot·后端·数码相机·毕设·计算机毕设
BBTSOH159015160448 小时前
Vicon MX40 光学动作捕捉摄像机
数码相机·vr·虚拟现实·定位·光学·动作捕捉·光学动捕
想要打 Acm 的小周同学呀12 小时前
相机推流到网页中播放
数码相机
isyoungboy1 天前
双目立体视觉的3D重建全流程
数码相机·3d
棪燊1 天前
Blender多摄像机怎么指定相机渲染图像
数码相机·blender
硬件进化论1 天前
从基础到实践(二十三):MCU选型设计指南
单片机·嵌入式硬件·数码相机·电脑·硬件工程·智能手表·智能电视
Σίσυφος19002 天前
Tof 深度相机原理
数码相机
Hungry_112 天前
STM32 IIC通信
stm32·单片机·iic·嵌入式软件·通信协议
Hello-FPGA3 天前
8路CXP相机采集系统介绍
数码相机
云钥科技3 天前
云钥科技多通道工业相机解决方案设计
数码相机