• 倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码


    倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码

    本次测试需要环境:

    VS2013,TwinCAT3(本人版本TC31-Full-Setup.3.1.4018.16)

    代码:C#代码,PLC程序代码,C++代码(官方提供)

     测试部分:

     测试包含:bool类型,int类型,long类型,real类型,lreal类型,string类型,数组,以及结构体 部分测试(这里没有结构体嵌套)

    PLC程序Main程序

    基本类型部分

    代码:

    PROGRAM MAIN
    VAR
    	BoolTest :BOOL;
    	IntTest:INT;
    	LongTest:DINT;
    	SingleTest:REAL;
    	DoubleTest:LREAL;
    	StringTest:STRING;
    	readstringlen:INT;
    	plcstruc :plcstructure;
    
    	plcarraytest:ARRAY[1..5] OF INT;
    
    END_VAR

    结构体程序部分

    代码:

    TYPE  plcstructure :
    STRUCT
    	plcs1:BOOL;
    	dummy1:BOOL;
    	dummy2:BOOL;
    	dummy3:BOOL;
    	
    	plcs2:INT;
    	dummy4:INT;
    	
    	plcs3:DINT;
    	plcs4:REAL;
    	plcs5:LREAL;
    
    END_STRUCT
    END_TYPE

    C#程序主界面

    主界面代码包含按钮事件等

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    //引用Twincat.ads和Sustem.IO
    using TwinCAT.Ads;
    using System.IO;
    
    
    namespace writeread
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
           
            //定义所需变量
    
            private bool  writebool =false;
            private bool  readbool=false ;
    
            private short  writeint = 0;
            private short  readint = 0;
    
            private int writelong = 0;
            private int readlong = 0;
    
            private float writereal = 0;
            private float readreal = 0;
    
            private double writelreal = 0;
            private double readlreal = 0;
            
            private string writestring = "";
            private string readstring = "";
            private int  stringlen = 0;
    
            //定义结构体类型
            public struct structtype
            {
                public  bool s1;
                public bool dummy1;
                public bool dummy2;
                public bool dummy3;
                public  short s2 ;
                public short dummy4;
                                 
                public  int s3 ;
                public  float s4;
                public  double s5 ;
            }
            //实例化结构体
            private  structtype structtest =new structtype ();
    
            //定义数组,含有五个元素
            private short[] arraytest = new short[5];
    
            //定义句柄变量
            private int hvar = new int();
            //通讯数据定义
            private TcAdsClient tcclient;//定义通讯协议
    
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //通讯协议
                tcclient = new TcAdsClient();
                //tcclient.Connect("控制器NetID",851)
                tcclient.Connect(851);
            }
            //writebool
            private void button1_Click(object sender, EventArgs e)
            {
                if (writebool == true)
                {
                    writebool = false;
                }
                else
                {
                    writebool = true;
                }
                
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.BoolTest");
                    tcclient.WriteAny(hvar ,writebool );
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    
                }
    
            }
            //readbool
            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.BoolTest");
                    readbool = (bool)(tcclient.ReadAny(hvar, typeof(bool)));
                    tcclient.DeleteVariableHandle(hvar);
                    label1.Text = readbool.ToString();
                }
                catch (Exception err)
                {
                   
                }
                
            }
            //writeINt   plc int 对应c# short
    
            private void button4_Click(object sender, EventArgs e)
            {
    
                writeint =short.Parse (textBox2 .Text );
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.IntTest");
                    tcclient.WriteAny(hvar, writeint);
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                   
                }
            }
            //readint
            private void button3_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.IntTest");
    
                    readint = (short)(tcclient.ReadAny(hvar, typeof(short)));
                    tcclient.DeleteVariableHandle(hvar);
                    label2.Text = readint.ToString();
                }
    
                catch (Exception err)
                {
                    
                }
                
            }
            //writelong
            private void button6_Click(object sender, EventArgs e)
            {
                writelong = int.Parse(textBox3.Text);
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.LongTest");
                    tcclient.WriteAny(hvar, writelong);
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    
                }
            }
            //readlong
            private void button5_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.LongTest");
                    readlong = (Int32)(tcclient.ReadAny(hvar , typeof(Int32)));
                    tcclient.DeleteVariableHandle(hvar);
                    label3.Text = readlong.ToString();
                }
    
                catch (Exception err)
                {
                   
                }
                
            }
            //writereal
            private void button8_Click(object sender, EventArgs e)
            {
                writereal = Single.Parse(textBox4.Text);
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.SingleTest");
                    tcclient.WriteAny(hvar , writereal);
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    
                }
            }
            //readreal
            private void button7_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.SingleTest");
                    readreal = (float)(tcclient.ReadAny(hvar , typeof(float)));
                    tcclient.DeleteVariableHandle(hvar);
                    label4.Text = readreal.ToString();
                }
    
                catch (Exception err)
                {
                    
                }
               
            }
            //writelreal
            private void button10_Click(object sender, EventArgs e)
            {
                writelreal = double.Parse(textBox5.Text);
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.DoubleTest");
                    tcclient.WriteAny(hvar, writelreal);
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    
                }
            }
            //readlreal
            private void button9_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.DoubleTest");
                    readlreal = (double)(tcclient.ReadAny(hvar , typeof(double)));
                    tcclient.DeleteVariableHandle(hvar);
                    label5.Text = readlreal.ToString();
                }
    
                catch (Exception err)
                {
                   
                }
               
            }
            //writestring    按照ASCII码进行读写
            private void button12_Click(object sender, EventArgs e)
            {
                writestring = textBox6.Text;
                stringlen = writestring.Length;
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.StringTest");
                    tcclient.WriteAny(hvar, writestring, new int[] { 80 });
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                   
                }
            }
            //readstring
            private void button11_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.StringTest");
                    readstring = tcclient.ReadAny(hvar, typeof(string), new int[] { 80 }).ToString();
                    tcclient.DeleteVariableHandle(hvar);
                    label6.Text = readstring;
                }
    
                catch (Exception err)
                {
                    
                }
            }
            //writestruct
            private void button13_Click(object sender, EventArgs e)
            {
                if (structtest.s1 == true)
                {
                    structtest.s1 = false;
                }
                else
                {
                    structtest.s1 = true;
                }
                // structtest.s1 = bool.Parse(textBox7.Text);
                structtest.s2 = short.Parse(textBox8.Text);
                structtest.s3 = int.Parse(textBox9.Text);
                structtest.s4 = float.Parse(textBox10.Text);
                structtest.s5 = double.Parse(textBox11.Text);
    
    
    
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.plcstruc");
                }
                catch (Exception err)
                {
                    MessageBox.Show("get hvar error");
                }
                AdsStream datastream = new AdsStream(24); //4+4+4+4+8=24
                BinaryWriter binwrite = new BinaryWriter(datastream);
                datastream.Position = 0;
    
                try
                {
                    binwrite.Write(structtest.s1);
                    binwrite.Write(structtest.dummy1 );
                    binwrite.Write(structtest.dummy2);
                    binwrite.Write(structtest.dummy3);
                    binwrite.Write(structtest.s2);
                    binwrite.Write(structtest.dummy4);
                    binwrite.Write(structtest.s3);
                    binwrite.Write(structtest.s4);
                    binwrite.Write(structtest.s5);
                   
                    tcclient.Write(hvar, datastream);
    
                    structtest.s1 = false;
                    structtest.s2 = 0;
                    structtest.s3 = 0;
                    structtest.s4 = 0;
                    structtest.s5 = 0;
    
                }
    
                catch (Exception err)
                {
                    MessageBox.Show("write value error");
                }
                try
                {
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    MessageBox.Show(" write delect hvar error");
                }
            }
            //readstruct
            private void button14_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.plcstruc");
                }
                catch (Exception err)
                {
                    MessageBox.Show("get hvar error");
                }
                AdsStream datastream = new AdsStream(24);//4+4+4+4+8=24
                BinaryReader binread = new BinaryReader(datastream);
                datastream.Position = 0;
    
                try
                {
                    tcclient.Read(hvar, datastream);
    
    
                    structtest.s1 = binread.ReadBoolean();
                    structtest.dummy1 = binread.ReadBoolean();
                    structtest.dummy2 = binread.ReadBoolean();
                    structtest.dummy3 = binread.ReadBoolean();
                    structtest.s2 = binread.ReadInt16();
                    structtest.dummy4 = binread.ReadInt16();
                    structtest.s3 = binread.ReadInt32();
                    structtest.s4 = binread.ReadSingle();
                    structtest.s5 = binread.ReadDouble();
    
    
                    label7.Text = structtest.s1.ToString();
                    label8.Text = structtest.s2.ToString();
                    label9.Text = structtest.s3.ToString();
                    label10.Text = structtest.s4.ToString();
                    label11.Text = structtest.s5.ToString();
                }
    
                catch (Exception err)
                {
                    MessageBox.Show("read value error");
                }
                try
                {
                    tcclient.DeleteVariableHandle(hvar);
                }
                catch (Exception err)
                {
                    MessageBox.Show("read delect hvar error");
                }
               
            }
            //writearray
            private void button15_Click(object sender, EventArgs e)
            {
                arraytest[0] = short.Parse(textBox12.Text);
                arraytest[1] = short.Parse(textBox13.Text);
                arraytest[2] = short.Parse(textBox14.Text);
                arraytest[3] = short.Parse(textBox15.Text);
                arraytest[4] = short.Parse(textBox16.Text);
    
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.plcarraytest");
                    tcclient.WriteAny(hvar , arraytest);
                    tcclient.DeleteVariableHandle(hvar);
                    for (int i = 0; i < 5; i++)
                    {
                        arraytest[i] = 0;
                    }
                }
                catch (Exception err)
                {
                    
                }
    
    
            }
            //readarray
            private void button16_Click(object sender, EventArgs e)
            {
                try
                {
                    hvar = tcclient.CreateVariableHandle("MAIN.plcarraytest");
                    arraytest = (short[])(tcclient.ReadAny(hvar , typeof(short[]), new int[] { 5 }));
                    tcclient.DeleteVariableHandle(hvar);
    
                    label12.Text = arraytest[0].ToString();
                    label13.Text = arraytest[1].ToString();
                    label14.Text = arraytest[2].ToString();
                    label15.Text = arraytest[3].ToString();
                    label16.Text = arraytest[4].ToString();
                }
                catch (Exception err)
                {
                    
                }
                
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                if(tcclient !=null)
                tcclient.Dispose();
            }
        }
    }
    View Code

    C++程序代码项目(注意红色框里面的路径是TwinCAT的安装路径)

    测试结果:

    上位机:

    PLC程序:

    PLC程序运行动图:

    测试完毕!

     工程源文件下载地址

    小伙伴们直接去这里下载:

    点击下载

    https://files.cnblogs.com/files/JiYF/%E5%80%8D%E7%A6%8FTwinCAT3%E4%B8%8A%E4%BD%8D%E6%9C%BA%E4%B8%8EPLC%E9%80%9A%E4%BF%A1%E6%B5%8B%E8%AF%95(ADS%E9%80%9A%E4%BF%A1)%E4%BE%8B%E5%AD%90%E4%BB%A3%E7%A0%81.rar

     注意事项:

    string类型如果没有限定大小,默认是80个字符,在C#这里需要加一个字符为结束符也就是限定为81个字符

    例如:

    介绍:

  • 相关阅读:
    HutchTab
    configbody tcl tk
    initial class tcl tk
    ::dcss
    StatusBar
    read url c#
    new tab addin
    extraDevice
    Android平台开发WIFI function portingWIFI功能移植
    如何设置Android系统中的BT2.1 device到SSP的DEBUG模式
  • 原文地址:https://www.cnblogs.com/JiYF/p/7780948.html
Copyright © 2020-2023  润新知