精华内容
下载资源
问答
  • C#控制PLC辅助继电器

    2014-10-23 14:20:43
    C#2005 通过HostLink协议 串口通讯 控制 欧姆龙PLC 的辅助继电器 输出和关闭。并且可以读取D地址。
  • C# PLC控制界面

    2013-12-03 15:03:16
    C#编写的PLC界面,包括操作界面,使用功能等等,可供参考编写PLC与工控机连接控制界面
  • c# PLC控制警灯

    2010-03-19 13:07:29
    c# 写的控制PLC plc采用mobuls协议, 发送16进制代码,
  • halcon控制笔记本摄像头获取我们感兴趣的区域,识别到我们所需要的区域后联合C#控制三菱FX-3UPLC进行动作
  • C#PLC通讯

    2021-02-02 11:39:03
    公司设备一直都用的PLC做下端设备的控制,但是目前都没有专职做上位机的,而我之前对PLC又接触的比较少,做起来还是比较难的。。 查找了一堆资料后,终于找到了这个.net库,在大致学习了一下之后,总结了一下,当作...

    最近因为工作的原因用到了西门子PLC,在使用过程中一直在思考上位机和PLC的通讯问题,后来上网查了一下,找到了一个专门针对S7开发的一个.net库–《S7netPlus》,PLC通讯方法比较多,所以也是在不断地学习中,以下内容如有不足之处,望大神予以指教。

    公司设备一直都用的PLC做下端设备的控制,但是目前都没有专职做上位机的,而我之前对PLC又接触的比较少,做起来还是比较难的。。

    查找了一堆资料后,终于找到了这个.net库,在大致学习了一下之后,总结了一下,当作自己的学习笔记。

    一、开发环境准备

    最近因为疫情的影响,只能呆在总公司混日子,手里没有设备,只能用博图的仿真器来测试通讯,需要安装的软件包括:

    TIA Protal(博图)&S7-PLCSIM

    西门子针对于PLC专门开发的一款编程软件,相信各位肯定比我熟悉这个软件了,这里就不作过多介绍了,同时提供了S7系列的仿真软件S7-PLCSIM,这里我们就用这两个设备仿真PLC设备来测试S7NETPlus库的通讯。
    在这里插入图片描述

    博图V15.1

    在这里插入图片描述

    S7-PLCSIM

    NetToPLCSIM

    在这里插入图片描述

    这个软件是用于将西门子的PLCsim映射到网络内,如果之前没有用过这个软件,建议按照后面的操作来,否则很容易出现Start server之后还是连不上仿真器。

    二、开发测试

    PLC配置

    1、在组态好的PLC设备属性中,找到“防护与安全”–>“连接机制”中,勾选“允许来自远程对象的PUT/GET通信访问”;

    在这里插入图片描述

    2、新建DB块,同时将该DB快属性中的“优化块的访问取消”;

    在这里插入图片描述

    3、在新建的DB块中新增一些数据,完成后点击编译计算偏移量。

    在这里插入图片描述

    4、以上步骤完成后,点击开始仿真,将工程下载到仿真器中;

    在这里插入图片描述

    NetToPLCSIM配置

    1、打开软件后,点击Add增加设备

    2、在弹出的窗口中,Network IP Address中填入本地回环IP“127.0.0.1”(如果你是在两台设备中测试,首先保证两台设备在同一个内网中,该处IP就可以设置为运行仿真环境的IP了)

    在这里插入图片描述

    3、Plcsim IP Address中,点击后面两个点,选择软件自己识别出来的仿真器地址;

    在这里插入图片描述

    4、Plcsim Rack/Slot中Rack为机架号,Slot为插槽号,这两个可以在PLC的设备组态属性->项目信息中找到

    配置完成后点击完成,这时候就可以点击Start Server开启服务了。

    在这里插入图片描述

    上面的操作一定要按照以上的步骤一步一步完成,否则很容易出现即使点Start Server显示状态为running,但是实际连接仍然连不上的情况。

    另外需要注意的是,可能在打开NetToPLCSim的时候,会弹出“Port 102 is in use!”的警告,如果遇到这个情况,点击是,之后在将PLCSIM关掉重新启动一下就可以了。
    在这里插入图片描述

    创建连接

    配置连接

    这里使用的是S7-1215的模块,所以CpuType选择S71200,IP地址使用回环地址“127.0.0.1”,机架号和插槽号在PLC工程中查。

    using S7.Net;
    
    Plc plc = new Plc(CpuType.S71200, "127.0.0.1", 0, 1);		
    

    配置完成后,使用Open()来打开,在最早的一个版本中,Open有返回值,可以通过返回值获取 ErrorCode 和 ErrorMessage,我目前使用的是最新版0.8.1.0,没有返回值,所以用try…catch来接收异常

    try
    {
    	plc.Open();
    }
    catch(Exception)
    {
    	Console.WriteLine($"连接到PLC设备失败:IsConnect = {plc.IsConnected},IsAvailable={plc.IsAvailable}");
    	return;
    }
    

    连接是否成功,可以用IsConnected去判断一下。

    访问数据块

    连接成功后,我们就可以去访问PLC的数据块了,访问数据块,我们先尝试一下读取数据块

    读取单个数据–Read

    这里主要用到了DBX,DBW,DBD读取数据,其他的各位可以在查一下PLC的资料

    /*
    方法:public object Read(string variable)
    入参:读取数据地址
    出参:Object类型数据,可强制类型转换
    */
    var db1Bool1 = plc.Read("DB1.DBX0.0");
    Console.WriteLine("DB1.DBX0.0:" + db1Bool1);
    
    bool db1Bool2 = (bool)plc.Read("DB1.DBX0.1");
    Console.WriteLine("DB1.DBX0.1:" + db1Bool2);
    
    int IntVariable = (ushort)plc.Read("DB1.DBW2.0");
    Console.WriteLine("DB1.DBW2.0:" + IntVariable);
    
    float RealVariable = ((uint)plc.Read("DB1.DBD4.0")).ConvertToFloat();
    Console.WriteLine("DB1.DBD4.0:" + RealVariable);
    
    var dIntVariable = (uint)plc.Read("DB1.DBD8.0");
    Console.WriteLine("DB1.DBD8.0: " + dIntVariable);
    
    var dWordVariable = (uint)plc.Read("DB1.DBD12.0");
    Console.WriteLine("DB1.DBD12.0: " + Convert.ToString(dWordVariable, 16));
    
    var wordVariable = (ushort)plc.Read("DB1.DBW16.0");
    Console.WriteLine("DB1.DBW16.0: " + Convert.ToString(wordVariable,16));
    

    在这里插入图片描述

    读取批量数据块–ReadBytes
    /*
    方法:public byte[] ReadBytes(DataType dataType, int db, int startByteAdr, int count)
    入参:
    	1、DataType数据类型,可选择从DB块或者Memory中读取;
    	2、db:1:DataBlock=1,Memory=0;
    	3、startByteAdr:起始地址,即DB块的起始偏移量;
    	4、count:读取大小,该大小由读取的DB块的最后一个数据的偏移量和大小决定,这里最后一个字节WordVariable偏移量为16,数据类型为word,2个字节,因此此次读取为16+2=18个字节。
    出参:Byte[],这里Byte[]的大小必然和count的大小是相同的,
    */
    //读取数据选择从DB块中读取,db设置为1,起始地址为0,读取18个字节
    var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 18);
    //取字节0中的第0位
    var db1Bool1 = bytes[0].SelectBit(0);
    Console.WriteLine("DB1.DBX0.0:" + db1Bool1);
    //取字节0中的第1位
    bool db1Bool2 = bytes[0].SelectBit(1); ;
    Console.WriteLine("DB1.DBX0.1:" + db1Bool2);
    //跳到字节2并连续取两个字节数据
    int IntVariable = S7.Net.Types.Int.FromByteArray(bytes.Skip(2).Take(2).ToArray());
    Console.WriteLine("DB1.DBW2.0:" + IntVariable);
    //...
    double RealVariable = S7.Net.Types.Real.FromByteArray(bytes.Skip(4).Take(4).ToArray());
    Console.WriteLine("DB1.DBD4.0:" + RealVariable);
    //...
    int dIntVariable = S7.Net.Types.DInt.FromByteArray(bytes.Skip(8).Take(4).ToArray());
    Console.WriteLine("DB1.DBD8.0: " + dIntVariable);
    //...
    uint dWordVariable = S7.Net.Types.DWord.FromByteArray(bytes.Skip(12).Take(4).ToArray());
    Console.WriteLine("DB1.DBD12.0: " + Convert.ToString(dWordVariable, 16));
    //...
    ushort wordVariable = S7.Net.Types.Word.FromByteArray(bytes.Skip(16).Take(2).ToArray());
    Console.WriteLine("DB1.DBW16.0: " + Convert.ToString(wordVariable, 16));
    

    在这里插入图片描述

    写入单个数据–Write
    /*
    方法:public void Write(string variable, object value)
    入参:
    	1、string variable:写入地址
    	2、object value,写入数据
    */
    plc.Write("DB1.DBX0.0", true);
    plc.Write("DB1.DBD12.0", 123457);
    

    在这里插入图片描述

    写入多个数据–WriteBytes
    /*
    public void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value)
    用法如同ReadBytes,这里就不在写例程了,有兴趣的可以自己研究一下
    */
    

    关闭连接

    在通讯完之后,千万不要忘了关闭通讯链路哈,这里使用Close来关闭。

     plc.Close();
    

    以上内容都是在学习中,中间有很多内容还不完善,后续的内容在学习过程中会不断增加,如有更好的解决方案,欢迎留言一起探讨。

    展开全文
  • 那么工控领域C#上位机#和 #PLC#是不是也可以人机对话呢?今天我们用WPF实现一下。硬件:S7-1200软件:C#库文件:System.Speech.dllSystem.Speech.dll属性1.System.Speech.dll这个文件是windows系统自带的,我们添加...

    大家都知道手机、车机、小爱同学、人机对话渗入大家的生活。那么工控领域C#上位机#和 #PLC#是不是也可以人机对话呢?今天我们用WPF实现一下。

    硬件:S7-1200

    软件:C#

    库文件:System.Speech.dll

    6ffc800264b44c83de820ea6eb132adf.png

    System.Speech.dll属性

    1.System.Speech.dll这个文件是windows系统自带的,我们添加引用即可

    0c34dc95f248d8b5769e87a41216f06d.png
    eab19ae11b73af1b76f16554f836f9b5.png

    2.开始撸代码 引用两个命名空间

    using System.Speech.Recognition;

    using System.Speech.Synthesis;

    7f454f17ba62729f1f672849578df200.png

    3.new个对象给我 创建语音识别引擎和语音合成引擎

    67603abfebc047acf3100f0db4069078.png

    4.添加语音约束 并为语音约束里面添加语音关键字

    90e4b47c838da0ffd187fdc7df51e7e4.png

    5.把语音约束添加到运行时对象、语音识别模式异步、设备音频输入来源、注册语音识别响应方法、开启语音识别

    bd542014c19ff2e5319ae255b495fac8.png

    6.写电脑朗读方法

    344b4681aa0be42bf2964f3483c84f61.png

    7.在响应方法内部写要做得事情,并写入到1200PLC。执行动作

    6021b295fadfdc9cf034d6a6ce974bc6.png

    8.wpf软件运行效果图

    35acf3082eb2dc239dafaef2f6aa5994.png

    控制1200PLC寄存器达到控制效果

    04aaf9dd4d5edee84ac05003c4fea332.png
    d6f7bfb47189fb85dbe5a1feb36a52bc.png

    控制效果视频可以查看头条链接

    https://www.ixigua.com/6841120579995667719/?is_new_connect=0&is_new_user=0

    或者查看我之前头条发布的视频

    END

    如果对您有帮助 欢迎关注、评论、点赞转发。定期出C#上位机 电气 PLC 运动板卡 STM32 自动化相关心得应用

    展开全文
  • 利用C#制作一个界面,与触摸屏连接再控制PLC进行电机变频调速!![img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/15.gif][/img]
  • PLC链接C#程序控制

    2021-03-24 18:29:46
    程序设计
  • C#通过opc读取和控制plc实例程序

    热门讨论 2009-08-08 21:40:21
    C#通过opc读取和控制plc实例程序,程序代码精简,易于修改成自己想要.
  • C#作为上位机,控制PLC的两种方式

    千次阅读 2020-11-08 15:46:17
    本文通过S7.net.dll开源库,利用C#PLC进行读与写操作,后续在继续完善。 (一)通过PLCSIM模拟真实PLC,来进行上位机开发。 工具:1.NetToPLCSim软件。 说明:用来转IP使用。因PLCSIM仅面向内网,外部无法读入。 2...

        最近应朋友要求,开始做上位机开发,从VB,C#,wincc和python中选择了C#作为开发语言,单纯就是觉得C#应该比较容易出成果,适合个性化定制,又不会那么老化。这只是一个小demo,能够连上PLC,完成监控和逻辑的运算等功能,废话不多说,开始正文。

        本文通过S7.net.dll开源库,利用C#对PLC进行读与写操作,后续在继续完善。

        (一)通过PLCSIM模拟真实PLC,来进行上位机开发。

          工具:1.NetToPLCSim软件。 说明:用来转IP使用。因PLCSIM仅面向内网,外部无法读入。

                   2.PLCSIM,本文采用的是V15.

                   3.visual studio c++(也可以采用sharpdevelop小型软件,未测)

          整体逻辑:PLC设置好IP1后下载进行PLCSIM,而后通过netToPlcSim来转成IP2, C#将对IP2进行读写。  

          关键问题:PLC:  CPU设备需要设置IP1,同时将连接机制改成“允许PUT/GET访问!”。

                          对读写的DB块,需要设置成“取消优化的块访问!”。

                          netToPlsim设置: 点击"add",而后设置

    展开全文
  • 这次做的东西呢,其实就是个App,这个App用来控制电灯的开关和窗帘的升降。当然这里不仅有软件还有硬件的部分。哦哦,说明一下,我是搞自动化的,以前从来没学过C#,只学过C,所以这个App现在也只是实现了基本的...

        第一次写博客,之所以写,是用来记录以下自己的学习过程并总结一下学到的技能和各种小知识点,以免以后忘记可以查询。

        这次做的东西呢,其实就是个App,这个App用来控制电灯的开关和窗帘的升降。当然这里不仅有软件还有硬件的部分。哦哦,说明一下,我是搞自动化的,以前从来没学过C#,只学过C,所以这个App现在也只是实现了基本的功能。现在进入正题。

        硬件部分:见图。

          我这里没有用到INTERNET,只有个局域网,用的是台达SE系列的PLC,然后通过网线PLC的网络口与路由器的一个LAN口相连,然后手机连接该路由器发出的wifi就行了,这样,硬件上的网络就联通了,理论上只要协议匹配就能实现APP控制PLC。

        这里要注意两点,一是PLC的网络口自身是有个默认IP的,你得先把她读出来,怎么读呢,使用软件呗,网络IP抓包什么的,因为台达PLC的编程软件正好可以广播搜寻与本机PC相连的PLC的IP,所以我就用的编程软件读出来那台plc的IP地址为10.10.12.230,然后,要设置路由器的IP地址,一定要与PLC的IP在同一个网段,比如我设置的就是10.10.12.1;二是路由器要设置成DHCP形式,让路由器给链接的设备自动分配IP。当时我什么都不懂,网上也没这些细节的东西,走了好多弯路。

       硬件完成,然后就是软件。软件的核心其实就是一个MODBUS TCP协议,这个协议可是每个搞自动化的人都必须懂的。C#如何编写MODBUS TCP协议,我也是看的别人的博客,具体见下面两个链接吧:

    http://blog.csdn.net/thebestleo/article/details/52269999

    http://www.dl-winbest.cn/H056.html

     然后可能大家会问为什么用C#开发APP,其实就是简单呗,用的开发软件是Unity3D,大家想具体了解这个软件是什么的话就去百度吧。

    然后给大家看看部分源码。其实很简单的。

          其实我刚毕业,挺迷茫的。不过做了这个东西之后,打算以后就搞C#和Unity3D编程了,未来的路还很长,希望自己每一步都走好,不要浮躁,慢慢走。加油吧。

    这是三年前刚毕业参加工作时写的,今天才发现一直放在草稿箱没放出来。那时一心想搞开发,但当时也没想清楚自己未来该怎么走,一步一步莽莽撞撞在黑暗里摸索。看到这篇文章就想起了过去。

    想起了王小波的一句话,深有感触。“我慢慢走回家去,那天夜里没有月亮,但有星光。对于我这样在那些年里走惯夜路的人来说,这点光亮足够了”。期待未来的自己。

    展开全文
  • C#和倍福PLC之间的通讯控制

    千次阅读 2019-09-27 05:13:58
    1.新建项目并引用Twin...2.引用类,并编写倍福控制的相关对象 1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 us...
  • PLC客户端监控系统的特点: 0.客户端系统软件可部署在 多个管理层...(2)所有客户端不但都可以通过访问服务器读取所有的PLC状态和参数,而且可以根据需求定制每一台客户端可以控制对应的PLC,实现较复杂的应用。 3...
  • C#与西门子PLC通讯

    万次阅读 2019-09-10 18:28:37
    C#与西门子PLC通讯S7NetPLC设置C#程序 S7Net PLC在工业自动化领域是常用的控制器,一般在和上位机界面通讯时,经常使用组态软件。以西门子PLC为例,上位机可以使用西门子的WINCC。但是,当面对需求比较多样化的需求...
  • 让榨汁机定时工作(C#+PLC)

    千次阅读 热门讨论 2009-10-12 23:15:00
    买了自加热的榨汁机每天补充营养是件好事,但是...正好这段时间对硬件比较感兴趣,所以抽时间用西门子PLC224实现了该功能(一个PLC一两千元,用PLC控制好像有点高射炮打蚊子--大材小用,建议最好用单片机或.Net Micro F
  • 引言本文是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好地将所学知识结合起来。...
  • PLCC#,TCP,工业控制通信

    热门讨论 2009-11-09 19:18:32
    一个C#.NET环境下编写的PLC工业控制通信程序 socket,TCP协议编程 本程序对.NET开发者非常有用
  • 引用类,并编写倍福控制的相关对象1 usingSystem;2 usingSystem.Collections;3 usingSystem.Collections.Generic;4 usingSystem.Linq;5 usingSystem.Text;6 usingTwinCAT.Ads;789 namespaceProject_V1._001...
  • [size=24px]现在有一个项目 是利用网络(内部),通过 PLC 远程控制 一个设备(220V交流 10A)的开启关闭。 思路是这样的: ...有没有做过网络控制PLC的朋友可以指导一下,不知道这个的思路可以么?[/size]
  • C#开发的S7-200控制步进电机程序,实现了输入距离快慢,上下转动。涉及计算机与其他设备通讯的方法和西门子的PPI通讯。
  • C#智能张拉系统上位机程序 包括西门子PLC控制文件PreStressSystem,c#源码 包括modbus tcp,opc读写范例
  • PLC和电动机控制,通过-PC-C- PLC和通过PC马达控制C#

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

c#控制plc

c# 订阅