精华内容
下载资源
问答
  • C#和PLC通讯Demo

    2020-06-09 09:39:24
    C#和PLC通讯实现Demo和源代码,其中包括1个原生Demo和1个读取PLC数据的可视化程序(含源代码)。绝对能用!
  • C#和PLC通信

    2018-10-11 08:31:18
    可以正常用(C#写的欧姆龙PLC通讯程序)
  • vb.net&C#和PLC通过Modbus——TCP通讯代码;PC通过Modbus_TCP和PLC进行通讯,简单稳定
  • C#和PLC200smart通信.zip

    2020-12-26 19:26:40
    C#和西门子系列PLC通信,主要是profinet
  • C#和PLC利用modbus通信实例

    热门讨论 2015-05-30 18:11:03
    最近公司有一项目,就是采集客户设备在生产过程中的数据...硬件上采用PLC,软件使用C#编写上位机程序。本来是想利用TCP/IP协议,但后来发现公司采购的PLC属于低端产品,需要OPC服务,为了简便,所以就采用modbus协议。
  • c#和四门子plc通讯

    2020-03-11 14:42:49
    c#和四门子plc通讯程序,含源代码,完全免费。
  • C#和台达PLC通信

    2018-07-22 13:25:26
    C#和台达PLC通信,基于TCP/ip通信方式。适合初学者学习交流。
  • C#和西门子PLC1200 以太网通讯

    热门讨论 2017-05-22 11:15:19
    C#和西门子PLC以太网通讯,上位机代码
  • C#和欧姆龙PLC通信程序
  • C#三菱PLC操作类

    2020-10-06 13:30:42
    MC协议操作三菱PLC类,MC协议的目的是开放PLC内部寄存器给外部设备,实现外部设备和PLC的数据交互。简单说就是允许外部设备通过MC协议来读/写PLC里面的寄存器.
  • C#PLC通讯.rar

    2019-08-31 17:40:04
    C#与三菱、松下PLC串口通讯实例经过测试了。能够读取写入PLC各种类型的寄存器IO
  • C#与PLC通讯源码MC协议,程序包含界面和源码,同时还有简单说明和PLC断开设置,PLC设置,若有不明白的可以一起研究研究
  • C#PLC通讯

    2021-02-02 11:39:03
    最近因为工作的原因用到了西门子PLC,在使用过程中一直在思考上位机和PLC的通讯问题,后来上网查了一下,找到了一个专门针对S7开发的一个.net库–《S7netPlus》,PLC通讯方法比较多,所以也是在不断地学习中,以下...

    最近因为工作的原因用到了西门子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();
    

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

    展开全文
  • HslCommunication C#PLC 通信类库源代码 ,包含 Demo ; HslCommunication .net 3.5 项目源码; HslCommunication .net 4.5 项目源码; HslCommunication Java项目; Test项目 帮助文档 chm
  • c# 操作plc

    2012-06-28 14:51:00
    說明:使用c#程式,通過串口操作plc,在此例子中,使用西門子的plc,程式是winform。 1.引用AxInterop.MSCommLib控件,操作串口,此控件需要註冊。 2.設置AxInterop.MSCommLib控件的...3.由於直接採用和plc通信,...

    說明:使用c#程式,通過串口操作plc,在此例子中,使用西門子的plc,程式是winform。

    1.引用AxInterop.MSCommLib控件,操作串口,此控件需要註冊。

    2.設置AxInterop.MSCommLib控件的參數:

    commport:1 端口號 sttting:9600,e,7,2波特率等   inbuffersize:1024 緩存大小

    3.由於直接採用和plc通信,中間沒有採用通信模塊,直接用rs232接口,因此需要循環讀取串口的數據。

    如果使用一個通信模塊,那麼plc可以主動發送數據,並且可以直接用字符串進行通信。自定義通信規則,在plc

    那邊進行解析,然後處理。

    4.通信之前要打開串口:

            isSerialPort = System.Configuration.ConfigurationSettings.AppSettings["isSerialPort"].ToString();
                if (isSerialPort != "0") {
                    this.axMSCommTeco.PortOpen = true;
                }

    5.開啟一個線程,讀取plc中的數據。讀取plc的數據,其實,就是發一個命令,然後,一直讀取串口,等待plc數據返回此地址的數據。

           private void GetData() {
    
               while (true)
               {
                   axMSCommTeco.Output = SendmessageReadplcNumber;
                   if (IsDataComplete())
                   {
                       updateText("1");
                   }
                   System.Threading.Thread.Sleep(iTimeout);
                   IsCountion = false;
                   if (IsStop) {
                       break;
                   }
               }
           }

    6.給plc發送數據:

    axMSCommTeco.Output = SendmessageReadplcNumber;

    SendmessageReadplcNumber是要發送的字符串,發送之前要進行編碼。

    7.寫plc地址:

            public static string WriteAddrData(string Sadd, string Dadd, string Sdadd)
            {
    
                string strReturn = "@" + Sadd + "WD" + Dadd + Sdadd;
                return strReturn + FCS(strReturn) + "*\r\n";
            }

    8.讀取plc地址的數據

            public static   string ReadAddrData(string Sadd, string Dadd, string Sdadd)
            {
    
                string strReturn = "@" + Sadd + "RD" + Dadd + Sdadd;
                return strReturn + FCS(strReturn) + "*\r\n";
            }

    9.數據校驗

              private static  string FCS(String Value)
              {
                  int i, f;
                  byte[] x;
                  f = 0;
                  for (i = 0; i < Value.Length; i++)
                  {
                      x = ASCIIEncoding.ASCII.GetBytes(Value.Substring(i, 1));
                      f = f ^ (int)x[0];
                  }
    
                  return f.ToString("X");
              }

    10.代碼使用寫串口數據

                   string message = TecoPlc.WriteAddrData("00", "0316", EfficiencySops.Target.ToString("X").PadLeft(4,'0'));//標準工時
                 axMSCommTeco.Output = message;

    給地址316,寫入數據,數據 要求 4位,不夠位數補o。

    11.讀取地址上的數據

       message = TecoPlc.ReadAddrData("00", "0010", "0001");
                       System.Threading.Thread.Sleep(1000);
                       axMSCommTeco.Output = message;

    先發送讀取命令,然後 循環讀取串口數據。

           private string DataComplete()
           {
    
               string message = "";
               while (true)
               {
    
                   message += TypeUtil.toString(axMSCommTeco.Input);
                   if (message.Length > 2 && message.Substring(message.Length - 1, 1) == "\r")
                   {
    
                       break;
                   }
                   if (IsStop) {
                       break;
                   }
    
               }
               return message;
           }

    要注意,在發送命令后,要停止一段時間,如果連續發送 ,會達不到你要求的效果。我這裡設置每一條命令發送完成后,停止

     System.Threading.Thread.Sleep(1000);

    12.程式停止,不要關閉串口,除非關閉此窗口,才關閉串口。

     

     

    转载于:https://www.cnblogs.com/Teco/archive/2012/06/28/2567603.html

    展开全文
  • C#PLC通讯读写.rar

    2019-12-17 15:00:23
    c#通过MX component连接三菱PLC源代码,实际测试过了,运行OK C#程序读取三菱PLC内部寄存器的值写入寄存器的值 输出端的读写,输入端的读取
  • C#读取ABPLC的调试工具软件程序源码,程序实现了PLC数据的读取写入。使用动态决策算法实现在在多标签数据读取时的请求最优组合规划。同时还提供了一个ABPLC的模拟器软件用于模拟实现PLC设备。代码使用最基础的.net...
  • C#.net PLC通讯

    2017-11-09 11:10:25
    //校验后两位 //textBox1.Text = checkdata; checkdata = checkdata.ToUpper(); temp = "68202068"+temp+checkdata+"16" ; byte[] outdata3 = new byte[38]; for (int i = 0; i (temp.Length / 2); i++) { ...
  • C#链接PLC(MX)

    千次阅读 2018-10-07 16:31:51
    十一假期没有事情做,在家里写了段代码主要是用作C# 链接PLC。 手头没有PLC就用了MXGX works2进行模拟,首选在GX work2中简历一个新的工程 建好工程后配置文件区,这次主要是向PLC的ZR区写数据 那么选择PLC...

    十一假期没有事情做,在家里写了段代码主要是用作C# 链接PLC。

    手头没有PLC就用了MX和GX works2进行模拟,首选在GX work2中简历一个新的工程

    建好工程后配置文件区,这次主要是向PLC的ZR区写数据

    那么选择PLC参数

    设定完成打开“调试”--“模拟开始/停止”将会模拟PLC的开始

    模拟开始如下图

    然后设定MX,MX的设定在网上很多也很简单,就不在这里描述了。

    在C#中添加AxInterop.ActUtlTypeLib.dll和Interop.ActUtlTypeLib.dll文档。

    添加后,若使用的是C#的winform直接添加

     AxActUtlTypeLib.AxActUtlType axActUtlType = new AxActUtlTypeLib.AxActUtlType();

    具体链接代码如下

    在WPF中就要添加winform的controls,那么就要添加System.Windows.Forms.dll和WindowsFormsIntegration.dll工具。

    具体链接程序见源程序:https://download.csdn.net/download/wlxliugang/10704491

    展开全文
  • vb.net&C#和欧姆龙PLC通过RS232通讯代码;里面有封装好的Dll文件和调用的Demo,操作简单稳定
  • C#和西门子1200PLC通讯 资料整理 含教学视频 源码 S71200模拟服务器 如何调用S7.NET程序包 通过C#与S7100进行数据读取 C#与S7-1200的数据读写方法
  • C#写的上位机OMRON PLC modbus通讯,不需要第三方DLL,已经有实际运行,稳定好用。C#代码及VB.NET代码全部是由本人参照说明书编写。
  • C#控制PLC辅助继电器

    2014-10-23 14:20:43
    C#2005 通过HostLink协议 串口通讯 控制 欧姆龙PLC 的辅助继电器 输出关闭。并且可以读取D地址。
  • C#对三菱PLC的以太网串口通讯以及台达PLC的以太网通讯
  • C# 松下PLC通讯协议标准模块

    热门讨论 2013-10-28 20:26:44
    采用C#开发的,跟松下PLC通讯的标准模块,可置位寄存器,读取寄存器,写入数据到寄存器
  • C# 欧姆龙 Omron PLC 以太网通信 此库支持欧姆龙IO位读写,数据区DM读写;若需要详细DEMO,关注微信公众号:Aidu_auto,回复 omron,获得DEMO(VS2013 C#)。

    C# 和欧姆龙 Omron PLC 以太网通信

    PS,
    CP1H上面的选件板插槽可以插入1-2块CP1W-CIF41模块,系统即具有了以太网功能,也可以使用CP1W-EXT01和CJ1W-ETN21以太网扩展模块来组态,用于在CX-Programmer软件下的编程或监控,也可以和其它网络设备(可以是上位机,也可以是其它的PLC或者是带有以太网接口的触摸屏等)进行通讯
    附录1、CIF41配置的主要操作步骤

    1、硬件设置及接线
    槽位对应DIP开关拨打ON,如插在第1槽DIP开关地4位置ON,如插在第2槽DIP开关地5位置ON,表示Toolbus。使用网线连接PC与CIF41。

    2、以太网选件板IP地址设置
    PC打开浏览器,访问默认设定网页:http://192.168.250.1/C00.htm;输入密码:ETHERNET(大写),点击【登陆】按钮进入设置界面。然后点击【设置】中【系统设置】选项进入系统设置界面,设置IP地址、子网掩码、FINS节点地址一定要设置为ip地址的最低位,点击【传送】,然后点击【重启】按钮,即可。

    3、PC电脑IP地址设置
    PC与CIF41的IP地址需设置为同一网段,末位不一致。子网掩码设置默认255.255.255.0

    此库支持欧姆龙IO位读写,数据区DM读写;若需要详细DEMO,关注微信公众号:Aidu_auto,回复 omron,获得DEMO(VS2013 C#)。或者直接获取下面链接:

    链接:https://pan.baidu.com/s/1rQnSxyec2UG-JLMGdWUSFQ
    提取码:ytqg

    展开全文
  • 和PLC通讯的类文件中更新了两个方法。类文件的编写参考之前的文章C#-基于Sharp7.cs二次开发读取PLC值的方法-留言更新方法这两个方法里面包含了以下参数,PLCIP地址,机架号,插槽号,数据块号,起始字节,字节长度。...
  • C#读写三菱、西门子、MoModbus、欧姆龙、松下等PLCDemo,是另一个博主写的开源代码HslCommunication,可直接运行
  • C#PLC通信开发之西门子s7-200 smart 很遗憾,这篇文章,我之前的其它的PLC教程不一样,因为这篇文章,不是授人以渔,而是授人以鱼! 但您又是幸运的,因为您看了这篇文章,您一样可以获得读写S7-200 smart PLC...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 345
精华内容 138
关键字:

c#和plc

c# 订阅