Lesen und Schreiben von DATE/TIME-Variablen

Download

Voraussetzungen

Sprache / IDE

Beispielprogram auspacken

C# / Visual Studio

Sample05.zip

Aufgabe

Es soll eine .NET Applikation geschrieben werden die DATE/TIME-Variablen liest bzw. beschreibt.

Beschreibung

Die SPS enthält die Variable MAIN.Time1 vom Typ TIME und die Variable MAIN.Date1 vom Typ DT.

Im Load-Ereignis des Forms wird eine neue Instanz der Klasse TcAdsClient erzeugt. Dann wird die Methode TcAdsClient.Connect des TcAdsClient Objektes aufgerufen, um eine Verbindung mit dem Port 801 herzustellen. Zum Schluss wird dann die Methode TcAdsClient.CreateVariableHandle aufgerufen, um sich ein Handle auf die SPS-Variable zu besorgen. Wenn das Programm beendet wird, wird das Handle in der Event-Methode Form1_Closing wieder freigegeben und die Dispose-Methode des TcAdsClient Objektes wird aufgerufen.

Wenn der Anwender den "Read"-Button betätigt, werden die Variablen MAIN.Time1 und MAIN.Date1 mit Hilfe der Methode TcAdsClient.Read aus dem AdsStream gelesen. Die Klasse AdsBinaryReader, die von BinaryReader abgeleitet ist, wird dazu eingesetzt , eine Zeit bzw. ein Datum aus der SPS zu lesen. Die Methode AdsBinaryReader.ReadPlcTIME liest die TIME-Variable aus dem Stream und konvertiert diese in den .NET Datentypen TimeSpan. Die Methode AdsBinaryReader.ReadPlcDATE liest die DT-Variable aus dem AdsStream und konvertiert diese in den .NET Typen DataTime.

Wenn der Anwender den "Write"-Button betätigt, werden die SPS-Variablen MAIN.Time1 und MAIN.Date1 beschrieben. Die Klasse AdsBinaryWriter, die von BinaryWriter abgeleitet ist, kann eingesetzt werden, um eine Zeit bzw. ein Datum in diese zu schreiben. Die Methode AdsBinaryWriter.WritePlcType schreibt die .NET Typen TimeSpan und DateTime im SPS-Format in den Stream.

Lesen und Schreiben von DATE/TIME-Variablen 1:

C# Programm


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using TwinCAT.Ads;
using System.IO;

namespace Sample04
{
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.Container components = null;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button btnRead;
private System.Windows.Forms.Button btnWrite;
private System.Windows.Forms.Label label1;
private TcAdsClient adsClient;
private int[] varHandles;

public Form1()
{
InitializeComponent();
}

protected override void Dispose( bool disposing )
{
...
}

private void InitializeComponent()
{
...
}

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
try
{
adsClient = new TcAdsClient();

// PLC1 Port - TwinCAT 3 = 851
adsClient.Connect(851);
varHandles = new int[2];
varHandles[0] = adsClient.CreateVariableHandle("MAIN.Time1");
varHandles[1] = adsClient.CreateVariableHandle("MAIN.Date1");
}
catch( Exception err)
{
MessageBox.Show(err.Message);
}
}

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
adsClient.Dispose();
}

private void btnRead_Click(object sender, System.EventArgs e)
{
try
{
AdsStream adsStream = new AdsStream(4);
AdsBinaryReader reader = new AdsBinaryReader(adsStream);
adsClient.Read(varHandles[0], adsStream);
textBox1.Text = reader.ReadPlcTIME().ToString();
adsStream.Position = 0;
adsClient.Read(varHandles[1], adsStream);
textBox2.Text = reader.ReadPlcDATE().ToString();
}
catch(Exception err)
{
MessageBox.Show(err.Message)
}
}

private void btnWrite_Click(object sender, System.EventArgs e)
{
try
{
AdsStream adsStream = new AdsStream(4);
AdsBinaryWriter writer = new AdsBinaryWriter(adsStream);
writer.WritePlcType(TimeSpan.Parse(textBox1.Text));
adsClient.Write(varHandles[0], adsStream);

adsStream.Position = 0;
writer.WritePlcType(DateTime.Parse(textBox2.Text));
adsClient.Write(varHandles[1], adsStream)
}
catch(Exception err)
{
MessageBox.Show(err.Message);
}
}
}
}



PLC Programm


PROGRAM MAIN
VAR
Time1:TIME := T#21h33m23s231ms;
Date1:DT:=DT#1993-06-12-15:36:55.40;
END_VAR