倍福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程序运行动图:

测试完毕!

 工程源文件下载地址

 注意事项:

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

例如:

介绍:

 

转载于:https://www.cnblogs.com/JiYF/p/7780948.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值