ToB企服应用市场:ToB评测及商务社交产业平台

标题: PLC通讯 [打印本页]

作者: 张裕    时间: 4 天前
标题: PLC通讯

PPI通讯

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



 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
  1. Plc plc;
  2. Thread t1;
  3. //连接相机
  4. CogAcqFifoTool fifoTool=null;
  5. //tb
  6. CogToolBlock tb=null;
  7. private void ConnectPlc()
  8. {
  9.      try
  10.      {
  11.          //CPUType.S71200   型号  S7-200、 S7-1200、S7-300、S7-400/S7-1500
  12.          //"192.168.122.2"  ip地址  plc提供
  13.          //rack: 机台号的位置,这个点也是PLC的知识点
  14.          //slot: 插槽号的位置,也是PLC的知识点
  15.          plc = new Plc(CpuType.S71200, "127.0.0.1", 102, 0, 0);
  16.          plc.Open();
  17.          //实时读取plc发过来的信息
  18.          t1 = new Thread(Read);
  19.          t1.Start();
  20.      }catch (Exception ex)
  21.      {
  22.          MessageBox.Show("plc连接失败");
  23.      }
  24. }
  25. private void Read()
  26. {
  27.      while (true)
  28.      {
  29.          //读取里面存储的数据
  30.          int res = Convert.ToInt32(plc.Read("MD104"));
  31.          //为了允许跨线程
  32.          Invoke(new Action(() =>
  33.          {
  34.              if (res == 1)
  35.              {
  36.                  TakePlc();
  37.              }
  38.              else
  39.              {
  40.              }
  41.          }));
  42.      }
  43. }
  44. private void TakePlc()
  45. {
  46.      //判断相机是否连接正常
  47.      if(fifoTool.Operator!=null)
  48.      {
  49.          fifoTool.Run();
  50.          ICogImage image=fifoTool.OutputImage;
  51.          cogDisplay1.Image = image;
  52.          cogDisplay1.Fit();
  53.          tb.Inputs["OutputImage"].Value = image;
  54.          tb.Run();
  55.          cogRecordDisplay1.Record = tb.CreateCurrentRecord().SubRecords[1];
  56.          cogRecordDisplay1.Fit();
  57.          double with = (double)tb.Outputs["width"].Value;
  58.          if(with>368)
  59.          {
  60.              plc.Write();
  61.          }
  62.          else
  63.          {
  64.              plc.Write();
  65.          }
  66.      }
  67.      
  68. }
  69.   private void Form1_Load(object sender, EventArgs e)
  70.   {
  71.       ConnectPlc();
  72.       tb = (CogToolBlock)CogSerializer.LoadObjectFromFile(Directory.GetCurrentDirectory() + "\\tb.vpp");
  73.   }
复制代码
创建类SiemensPLC

CpuType: PLC的cpu型号  
IP: PLC的IP位置
rack: 机台号的位置
slot: 插槽号的位置
  1. public class SiemensPLC
  2. {
  3.      // CpuType: PLC的cpu型号。我这里是1200/1212C。
  4.      // IP: PLC的IP地址。
  5.      // rack: 机台号的位置,这个也是PLC的知识点。
  6.      // slot: 插槽号的位置,也是PLC的知识点
  7.      public Plc plc = null;
  8.      CpuType plcType;
  9.      string ip;
  10.      short rack;
  11.      short slot;
  12.      public SiemensPLC(CpuType type, string ip, short rack, short slot)
  13.      {
  14.          this.plcType = type;
  15.          this.ip = ip;
  16.          this.rack = rack;
  17.          this.slot = slot;
  18.          try
  19.          {
  20.              plc = new Plc(plcType, ip, rack, slot);
  21.          }
  22.          catch (Exception ex)
  23.          {
  24.              Console.WriteLine(ex.Message);
  25.          }
  26.      }
  27.   public string ConnectionPLC()
  28.   {
  29.       string res = string.Empty;
  30.       try
  31.       {
  32.           plc.Open();//连接plc
  33.           res = "Connection is OK";
  34.       }
  35.       catch (Exception ex)
  36.       {
  37.           res = $"Connection is Fail{ex.Message}";
  38.       }
  39.       return res;
  40.   }
  41.   ///<summary>
  42.   ///判断PLC是否已连接
  43.   /// </summary>
  44.   public bool PLCISOK()
  45.   {
  46.       return plc != null && plc.IsConnected;
  47.   }
  48.   
  49.   ///<summary>
  50.   ///向PLC写入数据
  51.   /// </summary>
  52.   /// <param name="add">地址</param>
  53.   /// <param name="value">数据</param>
  54.   public void Write(string add, object value)
  55.   {
  56.       plc.Write(add, value);
  57.   }
  58.   /// <summary>
  59.   /// 读取某个地址的内容
  60.   /// </summary>
  61.   /// <param name="add">地址</param>
  62.   /// <returns></returns>
  63.   public object Read(string add)
  64.   {
  65.       return plc.Read(add);
  66.   }
  67.   public void DisconnectionPLC()
  68.   {
  69.       plc.Close();
  70.   }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4