当前位置: 首页 > news >正文

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

 Plc plc;Thread t1;//连接相机CogAcqFifoTool fifoTool=null;//tbCogToolBlock 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: 插槽号的位置

 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();//连接plcres = "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();}

http://www.lryc.cn/news/541864.html

相关文章:

  • 前端js进阶,ES6语法,包详细
  • Scrum方法论指导下的Deepseek R1医疗AI部署开发
  • LINUX安装使用Redis
  • 基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms
  • 054 redisson
  • 【数据结构】(12) 反射、枚举、lambda 表达式
  • java实现二维码图片生成和编解码
  • Java基础常见的面试题(易错!!)
  • hugging face---transformers包
  • 网络安全防护指南:筑牢网络安全防线(510)
  • 微信小程序实现拉卡拉支付
  • git从本地其他设备上fetch分支
  • 【干货教程】Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 基于 SSM框架 的 “捷邻小程序” 系统的设计与实现
  • 基于Springboot医院预约挂号小程序系统【附源码】
  • 基于AVue的二次封装:快速构建后台管理系统的CRUD方案
  • 【含开题报告+文档+PPT+源码】基于springboot加vue 前后端分离的校园新闻审核发布管理系统
  • Qt 是一个跨平台的 C++ 应用程序框架
  • 2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • stm32常见的存储器应用
  • 如何使用3D高斯分布进行环境建模
  • 三级分类bug解决
  • AxiosError: Network Error
  • CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项
  • mysql的源码包安装
  • win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
  • 【JAVA】io流之缓冲流
  • from flask_session import Session 为什么是Session(app)这么用?
  • AI赋能的未来城市:如何用智能化提升生活质量?