Was benötigt man für eine Twincat HMI oder was kann man empfehlen

Ralle

Super-Moderator , User des Jahres 2006-2007
Teammitglied
Beiträge
15.422
Reaktionspunkte
4.045
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich arbeite mich gerade in Twincat 3.1 ein.
Die Target-Visu habe ich im PLC-Projekt gefunden, funktioniert auch.
In einem Web-Video habe ich gesehen, dass dort für ein HMI ein neues Projekt erstellt wurde und dann bei "hinzufügen" ein Tempalte für HMI ausgewählt werden konnte. (https://www.youtube.com/watch?v=kdn2-emwvk8 ca ab 2:16)
Bei mit gibt es dort "nur" TwinCat Measurement, TwinCat Projekte, TwinCatSPS und TcXaeShell Solution.

1. Ist das ein extra Paket? Und wann ja, welches und wo finde ich das.
2. Was würdet ihr generell als HMi für ein Twincat-Projekt empfehlen?
 
Zuletzt bearbeitet von einem Moderator:
Target Visu und TwinCat HMI sind zwei verschiedene Paar Schuhe. Die Target Visu ist Bestandteil von Codesys, Du kannst sie aber auch auf dem Zielsystem oder als Webvisu anzeigen lassen. Dort ist sie dann auch deutlich flotter als in der Entwicklungsumgebung. Die TwinCat HMI ist eine HTML5-basierte HMI von Beckhoff. Dafür musst musst Du zusätzliche TwinCat Functions herunterladen, ich meine TE2000 und TF2000.

Wir haben die TwinCat HMI vor ca. 4 Jahren ausprobiert. Damals war sie noch so katastrophal, dass wir dann doch wieder die Target Visu, oder PLC-HMI, wie sie bei Beckhoff heisst, genommen haben. Man kann auch mit der PLC-HMI viel machen, aber man muss alle Objekte zeichnen, Erzeugung per Code ist nicht möglich. Allerdings wird diese Visu bei Codesys vom Hausmeister programmiert. Die Versionen sind mal besser, mal schlechter, und manchmal hat eine neue Version Fehler, die längst überwunden geglaubt waren. Die aktuelle Version (also die vom Codesys, das derzeit in TwinCat werkelt), ist mal wieder eine schlechtere. Wenn ich noch mal von vorn anfangen müsste, würde ich keine der beiden nehmen, sondern wohl VisiWin von Inosoft.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
TE2000 heißt das neue HMI von Beckhoff, weil die integrierte Codesys-HMI ist wirklich katastrophal. Darum hat das Beckhoff vor einiger Zeit selbst in die Hand genommen.

Mein persönlicher Favorit für Beckhoff-Steuerungen ist allerdings MS Visual Studio - aber das hatten wir ja heute schon. :cool:
@Ralle wenn Du mehr wissen willst, frag gerne. Ich möchte das nicht aufdrängen.
 
Neben Visi-Win kann man auch Zenon von Corpa Data als Scada-System empfehlen. Die unterstützen TwinCAT auch schon ewig und sind (waren?) Standard bei BMW.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zenon von Copa Data hat für mich den größten Nachteil, dass es sehr an das Betriebssystem gebunden ist. Bestimmte Versionen laufen bis XP/Win7, möchte ich diese Visu auf einem W10 Rechner zum laufen bekommen, dann muss ich auf eine höhere Version hochrüsten und wenn der Support der vorherigen Lizenz abgelaufen ist ( was bei Zenon nicht so lange dauert ), dann muss ich für diese Visu eine komplette Lizenz neu kaufen ( keine Upgrade ).

Außerdem, der Support läuft relativ schnell aus bei den Versionen und dann ist der Support kostenpflichtig.

Ansonsten ist es ein tolles System
 
Zuletzt bearbeitet:
Wir verwenden etwas eigenes mit python und pyqt5 gestrickt. Qt ist ja ein Standard der auch in der Softwareentwicklung in der Industrie oft verwendet wird. Python kommt auch immer mehr in der Industrie zum Einsatz. Also für mich war es auch umgewöhnung weil ich aus der Siemens Welt komme. Aber ich finde es inzwischen sehr gut. Mit pycharm als Ide sehr gut. Die in twincat integrierte Visu und C# habe ich für twincat auch schon genommen in der Vergangenheit, das war aber eine andere Firma.. Und da waren auch wieder andere Anforderungen.
 
Mein persönlicher Favorit für Beckhoff-Steuerungen ist allerdings MS Visual Studio

Ich verwende derzeit auch Visual Studio 2019 via C#.
Wie organisierst du den Variablenzugriff LESEN - SCHREIBEN
Wie programmierst Du eine einfache Taste mit Rückmelde LED?

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace HMI.CalibrationSetupHmi
{
    using Beckhoff.App.Ads.Core;
    using Beckhoff.App.Ads.Core.Plc;


    public partial class P008_Kalibrierablauf : Form
    {
        private static IBAAdsServer AdsServer;
        private IBAAdsPlcClient _plcClient;
        private List<IBAAdsNotification> _notifications;


        public P008_Kalibrierablauf(IBAAdsServer adsServer)
        {
            InitializeComponent();


            try
            {
                AdsServer = adsServer;
                _notifications = new List<IBAAdsNotification>();
                //  _cncClient = adsServer.GetAdsClient<IBAAdsPlcClient>("CNC");
                _plcClient = AdsServer.GetAdsClient<IBAAdsPlcClient>("PLC");
                _plcClient.Synchronize = true;
                //var notify = new OnChangeDeviceNotification("Global_HMI.nComFromPLC", PlcVarHandler);
                //_plcClient.AddPlcDeviceNotification(notify);


            }
            catch (Exception Except)
            {
                MessageBox.Show("Error ! " + Except.Message);
            }
         }




        // ###################################################################################


        private void Timer1_Tick(object sender, EventArgs e)
        {


            if (_plcClient.SymbolExists("Global_HMI.pActPoint.X") &&
                _plcClient.SymbolExists("Global_HMI.pActPoint.Y") &&
                _plcClient.SymbolExists("Global_HMI.pActPoint.Z") &&
                _plcClient.SymbolExists("Global_HMI.pActPoint.C") &&
                _plcClient.SymbolExists("Global_HMI.pActPoint.A")  )


            {
                // act pos
                textBoxPointActX.Text = _plcClient.ReadSymbol("Global_HMI.pActPoint.X").ToString();
                textBoxPointActY.Text = _plcClient.ReadSymbol("Global_HMI.pActPoint.Y").ToString();
                textBoxPointActZ.Text = _plcClient.ReadSymbol("Global_HMI.pActPoint.Z").ToString();
                textBoxPointActC.Text = _plcClient.ReadSymbol("Global_HMI.pActPoint.C").ToString();
                textBoxPointActA.Text = _plcClient.ReadSymbol("Global_HMI.pActPoint.A").ToString();
            }
            else
            {
                // act pos
                textBoxPointActX.Text = "--> X < --";
                textBoxPointActY.Text = "--> Y < --";
                textBoxPointActZ.Text = "--> Z < --";
                textBoxPointActC.Text = "--> C < --";
                textBoxPointActA.Text = "--> A < --";
            }
        }
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwende derzeit auch Visual Studio 2019 via C#.
Wie organisierst du den Variablenzugriff LESEN - SCHREIBEN
Wie programmierst Du eine einfache Taste mit Rückmelde LED?

Das ist ein sehr komplexes Thema. Nur für den ADS-Zugriff habe ich ein eigenen ADS-Kernel auf Basis der TwinCAT.Ads.dll geschrieben.
Prinzipiell basiert es auf drei Zugriffsarten: 1. Direkt schreiben, 2. Direkt lesen, 3. Abonnieren
Bevor Du anfangen kannst, musst Du erst mal klären, was passiert wenn z.B. SPS später bereit ist als das HMI, oder wenn die Verbindung unterbrochen wurde und zurückkehrt. Wie geht die Anwendung damit um. Du brauchst so ein paar grundlegende Dinge wie den Verbindungsstatus, eine Liste, wo Du alle Abo's bereithälst, um die bei Unterbruch abzubauen und bei Wiederkehr alle Abo's wieder anmelden zu können.
Dann brauchst Du eine intelligente Abo-Steuerung, weil alle Variablen, die nicht gebraucht werden, sollten (z.B. bei einem Bildwechsel) abgemeldet werden. Man kann nur 1024 Abo's gleichzeitig je Instanz anmelden. Mehr als eine Instanz ist aber nicht zu empfehlen, weil das geht auf die Performance. Und selbst meine komplexesten HMI's - die sind wirklich umfangreich - kommen mit der Begrenzung problemlos zurecht. Blöd ist auch doppelte Abo's anzumelden. Die sollten intelligenterweise zusammengefasst werden. Beim Anmelden eines Abo's übergebe ich die Speicheradresse der Methode, die aufgerufen werden soll, wenn die Wertänderung aus der SPS gefeuert wird. So ist man am flexibelsten und kann die Änderung direkt an die richtige "Adresse" weiterleiten.
Direkt lesen und direkt schreiben sollten kein Problem darstellen.

Wie mache ich einen Taster mit Rückmeldung?
Ich habe einen FB_Button in der SPS mit einer Schnittstelle VAR_IN in_Enable, in_Lock, in_UserRelease, in_Feedback, in_Flashing usw. und VAR_Out on_LockResult, on_UserFlag. Das ganze mündet in einem USINT mit dem Namen nB. Dieses USINT nB wird von meiner Klasse HMI_Button aboniert und die einzelnen Bit's steuern die Rückmeldung, das Enable oder Blinken. Wenn der Button freigegeben ist, wird mit dem Tastendruck an dem Abo vorbei das Bit 7 gesetzt. Der SPS-Baustein gibt das Ergebnis an am Ausgang on_Userflag bekannt.
 
Zuletzt bearbeitet:
Nur für den ADS-Zugriff habe ich ein eigenen ADS-Kernel auf Basis der TwinCAT.Ads.dll geschrieben.

Das klingt natürlich extrem genial und effizient.
Ich wollte mich mit HMI auf BASIS C# ursprünglich nicht beschäftigen,
aber da ich derzeit ein Projekt mache wo ich als Basis ausschließlich die

Beckhoff.App.Shell.Core.exe

für eine CNC Anwendung verwende, war es dann do nötig einzelne Forms zu schreiben für eine Minimal VISU.
Für den Rest reicht die Beckhoff.App.Shell.Core.exe völlig aus.
Die siehst ja oben wie simpel (in Deinen Augen bestimmt primitiv) das gemacht ist.
Auch ist jede Form komplett unabhängig. Die Bilder (Forms) werden über Funktionstasten aufgerufen.
Ein direktes springen von einer Form zur anderen Form geht nicht. Das würde dem Beckhoff Konzept auch
zuwiderlaufen. Auf diese Art komme ich klar, muss aber alles zu Fuß machen, was gerade noch so geht bei
der Projektgröße.

Jedenfalls ist Dein Ansatz wirklich Klasse.
 
Mit der TwinCAT.ADS.dll geht es genauso einfach und "primitiv". Aber man wird halt nie ein leistungsfähiges HMI zusammenkriegen, wenn man die Möglichkeiten nicht richtig ausbaut. :p

Damit angefangen habe ich 2009, und da war schon ein interesantes Selbst-Lernprojekt. Bei dem System, was ich heute zusammen habe, muss ich mich vor den die klassischen HMI-Lösungen nicht verstecken - im Gegenteil...:cool:
 
Zurück
Oben