The mini scope blown my mind! I loved it, I can not describe how long it takes to make a good scope for commissioning, that is well organized, this will save me a lot of time to be able to see what's going on with a fast state changing boolean
Jakob, you are doing a fantastic job. Thank you very much! The automatic synchronization in German works amazingly well. I think you'll be happy to hear that. However, I have set the playback speed to 0.8, which is very pleasant. It's probably because German is longer in expression. Keep up the good work!
Very cool Jakob, Thanks!! I am a C# developer and I have just started using TwinCAT. We are a pretty formal house and use GIT and JENKINS. TwinCAT is a big improvement over other PLC languages regarding formal development. PLC++ looks like another step up from that. We currently do most of the operational code in C# and use the PLC (mostly) as an IO front end. It this continues, I can see more code moving to the PLC. BTW, I contacted Beckhoff US today and asked when PLC++ will be released and he said market release is targeted for Q4 2025.
Very interesting development. I don't get very deep into the technology behind TwinCAT, but it doesn't take much to quickly realize that some aspects of TwinCAT are very clumsy. Git is one of them for sure so this is good news. I only watched 17 minutes, I'll watch the rest tomorrow, buT I am very curios about potential performance improvements with online operations. Thanks for keeping us posted on things TwinCAT.
Dear Beckhoff Jesus, would love if you could check out the graphical languages aswell. We know its not your area of expertice, we just wanna see a preview of what is to come, thanks! 😁
@@JakobSagatowski Well, considering how many of your wishes for TwinCAT have come true, the text below makes a lot of sense :D „Your own Beckhoff Jesus Someone to hear your prayers Someone who cares Your own Beckhoff Jesus Someone to hear your prayers Someone who's there”
Hi Jakob, regarding your complaint about the german keyboard layout. Y is much more common in the english language then in german, whereas Z is much more common in german, therefore these two were swaped in order to support the usage of ten finger typing where the letters you use most are closes to your index finger.
Great video! This looks like a giant leap forwards. Would you consider making a video showing how to setup an OPC UA server on a Beckhoff PLC? All the existing videos/guides that I found seem outdated and no longer work. I couldn’t figure out how to do it myself.
@Jakob: I think you already know, but... In german a Y is a less often used character compared to a Z. So it is banned to a place near the corner of the keyboard. 😉 But I can fully understand your frustration about german as a foreign language. 😂 Keep tryin.. 😉 And of course a big Thank you for all of your work during the last years! 👍
Jakob x Beckhoff, great partnership. When I first started using Beckhoff, the documentation was frankly terrible. They've improved the documention for individual libraries and functions massively such that its now miles ahead of other platforms, but I think they still struggle with explaining higher level concepts such as how to strucutre projects, etc. These videos are a great way to fill that gap, great stuff
Great video, very promissing future is comming:D I wonder if it's PLC++ then if it will be possible to write "nCounter++" instead of "nCounter := nCounter + 1" ?
What about the pragmas? Does plc++ has alternatives to that? For example, to check if the function block input is connected or many others that are highly useful.
Will it be possible to configure IO trees, all the terminal CoE and EtherCAT settings, and stuff like that in text files as well? Or only the things under the current PLC node in the configuration tree?
Hi! I notice that many companies are switching to low code platforms for PLC control software. Currently this is based on external software like Cordis Suite, I think it would be interesting to see how PLC++ works together with such tools. I am also curious if Beckhoff is also planning to make their own low code solution or if they continue to focus on 'traditional' programming.
Oooh! I wonder if you can use VS packages now. In the past I tried using emacs keybinding for VS and it does not work. You can still install the vsix package fine and dandy but no function when trying to manipulate st code. My hopes are up! Thanks Jakob.
Great video Jakob. As I understand it, now that variables, DUTs, methods, etc can all live in a single file, it should be possible to just use VSCode for the coding part. Maybe even for PLC and tasks configurations. Would love to see a full VSCode integration. As a Codesys North America System Partner in Canada, I've been using TwinCAT and Codesys for many many years but never really liked the VisualStudio integration and prefered working in Codesys IDE. Visual Studio just feels too heavy. I really love Beckhoff PLC++ new features and hope Codesys will have some similar features in their upcoming Codesys Go. Keep up the good work.
There is one thing where Siemens stands out as better than Beckhoff: DB (Data Blocks). I’m curious if Beckhoff has done anything about retain/persistent variables. Siemens has the snapshot option. It would be great if it was possible to export/import the current values of variables.
Another great video, Jakob. One question: In PLC Classic you could make a basic visualisation (codesys). That option is gone i assume? Using PLC++ the only options for a visualisation is Twincat HMI?
Thanks, Jakob. I have a question: As I understand, there are some changes in encapsulation, which means I won't run my old codes without any modifications. Am I right?
Hello @Jakob, congratulations on your videos and happy new year 2025 .🎁 Is there a Beckhoff link where you can ask to be a TwinCAT PLC++ beta tester? I would really like it if you could make videos of TwinCAT RT Linux installed as a docker, podman or LXC container...👍 💯
Hi Jakob. Great video, thanks. Do you know anything about a TwinCAT API to automate engineering tasks or if there will be similar feature in the future? Something similar as TIA Portal Openness for Siemens.
That looks very good! Some questions you might delve into in future videos -Is building / downloading a lot faster? It does seem so in your video or have you edited out waiting times?. At my work-laptop for example loading the plc project I'm working on already takes 55+ seconds (first time loading after windows boot, loading again is quicker but still slow... (not as bad as TIA..). -In twincat-classic I'm using method's like fb_init() does that still work? -do attributes still work? For example I use: {attribute 'to_string'} for my state enums and then I can do in code To_String(myState) and use that for logging -Could you have declared the enum inside the function block and would it then have local scope? -will it be in twincat 4026 which is stil fairly new? I'm lookin forward to try this new plc++, meanwhile I'll have to do with your video's which are very informative!
Very exciting. I have 2 questions. 1: How do properties change - do we perhaps have the "traditional" auto-implemented properties", or do we still require set/get assign/read a variable? Do we now declare them in text and have get/set accessors more traditional way in the code part (assuming yes)? And a sub question is, can you now access properties of structured types directly when doing property access or do you still need to have the property be a REFERENCE TO. Example - IF myFb.MyStructProperty.Value THEN ... - does this compile and work if it is declared as MyStructProperty : MyStruct and not MyStructProperty : REFERENCE TO MyStruct 2: Does online monitoring for methods with return type work? If your method returns an object, sometimes you might want to do a direct access to that object, instead of setting another variable to it. This however does not display correct values when doing monitoring, with either 'call' or 'variable' attribute. Example : If myFb.Method().Value THEN .... - It would be really neat if you can see the .Value online, and just like above, does this need to be a reference type or no? Some little features I would really like to see work. Great video :)
Very very nice, but i have some questions and comments: 1. If Beckhoff develops a completely new compiler, will it be 100% compatible with old, especially for non-standard things features __NEW/__DELETE, __TRY/__CATCH/__FINALLY, __POUNAME, and so on? 2. Will new compiler/language support type introspection or even reflection? 3. Will there be any new features in the programming language, such as constructors/destructors, generics, string concatenation with + and long strings support, arrays of variable length, method overloading, etc? 4. I don't understand why default function block/program method does not have own subblock, something like IMPLEMENTATION ... END_IMPLEMENTATION. I don't like how it's currently made, blocks are mixed with code...
Currently, what annoys me in TwinCAT are properties (get/set), specifically that if you want to see their value online, you have to add a pragma to each one. Please, Beckhoff Jesus, make it so this isn’t necessary in the PLC++ 😂
Getters and setters should always be considered as methods because, fundamentally, that's what they are. While languages like C# have introduced syntax that makes them appear as properties, it's essential to remember that other OOP languages (e.g., Java, Python, JavaScript, Rust, C++, etc.) treat them explicitly as methods. When you approach them with this mindset, you can avoid pitfalls like relying on monitoring pragmas. These pragmas introduce invisible changes and calls that can obscure the logic and behavior of your code. This is often considered a code smell, as it reduces transparency and can lead to unexpected side effects.
@@chudchadanstud In the IT world, this approach is possible because there is no need for instant diagnostics on a "live system." However, in industrial automation, the ability to monitor every variable used in a program is a fundamental feature. A well-written program, an HMI with extensive diagnostics and messages-all of these are important, but they don’t solve the problem 100%. Even as a PLC programmer with an IT-oriented mindset, I believe that stripping the Maintenance team of the ability to easily monitor variable states is excessive. I don't see a way to achieve a compromise that: - Maintains monitoring capabilities, - Utilizes OOP, properties, interfaces, etc. without relying on pragmas. Do you know of a better and correct solution to this problem?
@@adrianjenkner2775 They are functions/methods. No further explanation is needed. You don't do this with normal methods. Just create a variable or use VAR_INPUT/IN_OUT/OUTPUT. In the PLC world which is similar to the embedded world, you know the one that launches rockets into space and has self driving cars, having a function being invoked randomly with no clear execution order is dangerous. OT needs to learn a lot from IT. The field is embarrassingly behind.
@@adrianjenkner2775 Just use a variable like you would with functions and methods. This has been a solved problem for a long time in the IT world which is exponentially harder than OT.
@@chudchadanstud Do you mean that properties should be copied to regular variables, or that properties should not be used at all? Copying them to regular variables would require a lot of extra work and introduce additional code that could increase CPU load. Even without this, properties already seem less optimal, as I have checked using a profiler.
I can't wait for your deep dives and tutorials for plc++. I'm a little disappointed that they are building it on VS. My question is can you simulate physical inputs/outputs between parallel plc programs? Say you had a complex machine and you wanted to simulate failures and/or wierdness with physical IO before running it with real hardware.
What I want to see from Beckhoff is to still see plain text code in the repository even when encryption is enabled via software protection. The files should only be encrypted when the files are built and created in the boot folder.
I think this is codesys go under the hood and they didnt really develop a new runtime from scratch. Which is fine, in my opinion nowadays having the supply chain crisis in mind its a good thing to have code and programs which are to a degree portable. Breaking that would also mean bechhoff programs would be not anymore be supported by codesys. Supporting 2 runtimes in parallel would also be quite an effort from library side and they would have to reimplement all the default libraries from codesys (assumption is codesys would not hand them out the source code), that would be insanse as it would take years to have the same runtime behaviour. Beeing able to mix them further prooves my point. That said even do i think this is a good thing it renders the first part of your video misleading as we dont really now how its made under the hood.
@@JakobSagatowskii believe you, that they said this, but i cant believe that. How could you have such a seamless integration, with the old functionblocks and their runtime / libraries? Codesys must have informed beckhof and their big customers early enough so they can migrate to the new runtime. It would be quite a coinsidence, and this integration is so seamless i cant believe that.
The mini scope blown my mind! I loved it, I can not describe how long it takes to make a good scope for commissioning, that is well organized, this will save me a lot of time to be able to see what's going on with a fast state changing boolean
Ich bin von der Siemenawelt auf Twincat umgestiegen. Beckhoff ist so wunderschön ❤❤❤❤ Ich liebe es❤❤
Jakob, you are doing a fantastic job. Thank you very much! The automatic synchronization in German works amazingly well. I think you'll be happy to hear that. However, I have set the playback speed to 0.8, which is very pleasant. It's probably because German is longer in expression.
Keep up the good work!
Hey Oleg! I haven't tried the automatic dubbing, but I'm happy that it seems to be working! Thanks for the feedback!
Oleg, the person reponsible for all of my Twincat HMI's actually working lol. Your videos are great!
@@mezzer34 That makes me very happy. I hope it has saved you a few hours :)
Very cool Jakob, Thanks!!
I am a C# developer and I have just started using TwinCAT. We are a pretty formal house and use GIT and JENKINS.
TwinCAT is a big improvement over other PLC languages regarding formal development. PLC++ looks like another step up from that.
We currently do most of the operational code in C# and use the PLC (mostly) as an IO front end. It this continues, I can see more code moving to the PLC.
BTW, I contacted Beckhoff US today and asked when PLC++ will be released and he said market release is targeted for Q4 2025.
Jakob, such a great Video, really enjoyed it, especially the Z / Y rant!!! :)
My expectations are growing! Can't wait to test it out for myself. Thanks for the peek!
Very interesting development. I don't get very deep into the technology behind TwinCAT, but it doesn't take much to quickly realize that some aspects of TwinCAT are very clumsy. Git is one of them for sure so this is good news. I only watched 17 minutes, I'll watch the rest tomorrow, buT I am very curios about potential performance improvements with online operations. Thanks for keeping us posted on things TwinCAT.
The thing with the German Keyboard is really funny :D
Dear Beckhoff Jesus, would love if you could check out the graphical languages aswell. We know its not your area of expertice, we just wanna see a preview of what is to come, thanks! 😁
"Beckhoff Jesus"... it only gets more crazy for every video 🤣 I'll have your request in my mind for the next video!
Yes Graphical languages is very important for diagnostic
@@JakobSagatowski Well, considering how many of your wishes for TwinCAT have come true, the text below makes a lot of sense :D
„Your own Beckhoff Jesus
Someone to hear your prayers
Someone who cares
Your own Beckhoff Jesus
Someone to hear your prayers
Someone who's there”
morning Jakob! Great review as usual🦾
Hi Jakob, regarding your complaint about the german keyboard layout. Y is much more common in the english language then in german, whereas Z is much more common in german, therefore these two were swaped in order to support the usage of ten finger typing where the letters you use most are closes to your index finger.
Rewelacja Kubusiu❤❤❤gratuluję ❤
Great video! This looks like a giant leap forwards. Would you consider making a video showing how to setup an OPC UA server on a Beckhoff PLC? All the existing videos/guides that I found seem outdated and no longer work. I couldn’t figure out how to do it myself.
Thanks Jakob
Thank you!
@Jakob:
I think you already know, but...
In german a Y is a less often used character compared to a Z.
So it is banned to a place near the corner of the keyboard. 😉
But I can fully understand your frustration about german as a foreign language. 😂
Keep tryin.. 😉
And of course a big Thank you for all of your work during the last years! 👍
Jakob x Beckhoff, great partnership.
When I first started using Beckhoff, the documentation was frankly terrible. They've improved the documention for individual libraries and functions massively such that its now miles ahead of other platforms, but I think they still struggle with explaining higher level concepts such as how to strucutre projects, etc. These videos are a great way to fill that gap, great stuff
Thanks for the kind words and happy that you find this video useful!
Great video, very promissing future is comming:D
I wonder if it's PLC++ then if it will be possible to write "nCounter++" instead of "nCounter := nCounter + 1" ?
Hey Piotr! I have to try it out!
any idea when a public beta would be available?
What about the pragmas? Does plc++ has alternatives to that? For example, to check if the function block input is connected or many others that are highly useful.
Excellent question; worth investigating!
This is promising, thank you for the video!
I want to see more of the CLI functionality, how can we build, how can we run unit tests?
Great suggestion!
Would like to know if I can run TC3 on an Apple silicone running a windows VM? Or TLinCAT?
Great video, thanks.
Will it be possible to configure IO trees, all the terminal CoE and EtherCAT settings, and stuff like that in text files as well? Or only the things under the current PLC node in the configuration tree?
Hi!
I notice that many companies are switching to low code platforms for PLC control software.
Currently this is based on external software like Cordis Suite, I think it would be interesting to see how PLC++ works together with such tools. I am also curious if Beckhoff is also planning to make their own low code solution or if they continue to focus on 'traditional' programming.
What is meant by Command Line interface?
Oooh! I wonder if you can use VS packages now. In the past I tried using emacs keybinding for VS and it does not work. You can still install the vsix package fine and dandy but no function when trying to manipulate st code. My hopes are up! Thanks Jakob.
Great video Jakob. As I understand it, now that variables, DUTs, methods, etc can all live in a single file, it should be possible to just use VSCode for the coding part. Maybe even for PLC and tasks configurations. Would love to see a full VSCode integration. As a Codesys North America System Partner in Canada, I've been using TwinCAT and Codesys for many many years but never really liked the VisualStudio integration and prefered working in Codesys IDE. Visual Studio just feels too heavy. I really love Beckhoff PLC++ new features and hope Codesys will have some similar features in their upcoming Codesys Go. Keep up the good work.
What does the IO mapping look like on disk? are they plain text files as well? that would be magical
I suppose not. I think they are not touching other components then PLC. IO linking is connected to Devices.
Can we used previously developed libraries in twincat also within PLC++?
Surely, its still IEC code so its gonna just be compiled with new compilator (i think)
There is one thing where Siemens stands out as better than Beckhoff: DB (Data Blocks). I’m curious if Beckhoff has done anything about retain/persistent variables. Siemens has the snapshot option. It would be great if it was possible to export/import the current values of variables.
It's possible with recipes.
@ I’ve never used them since it’s a solution highly dependent on vendor (Codesys) rather than a typical element of the IEC standard.
42:00 iam fairly certain this works in the current XAE as well
Can you install it on an ARM laptop yet?^^
Yeah been waiting to install on Apple silicone windows VM for years
@@macmos1 Not only Apple silicone anymore. newest Windows laptops are also built on ARM. Hope they adress it soon!
Another great video, Jakob. One question: In PLC Classic you could make a basic visualisation (codesys). That option is gone i assume? Using PLC++ the only options for a visualisation is Twincat HMI?
Thanks, Jakob. I have a question: As I understand, there are some changes in encapsulation, which means I won't run my old codes without any modifications. Am I right?
Hello @Jakob,
congratulations on your videos and happy new year 2025 .🎁
Is there a Beckhoff link where you can ask to be a TwinCAT PLC++ beta tester?
I would really like it if you could make videos of TwinCAT RT Linux installed as a docker, podman or LXC container...👍 💯
Hi Victor! AFAIK there is no open Beta available.
@@JakobSagatowski , Product status
product announcement | estimated market release 4th quarter 2025 -->
Let's hope they can fulfill their roadmap...
Hi Jakob. Great video, thanks. Do you know anything about a TwinCAT API to automate engineering tasks or if there will be similar feature in the future? Something similar as TIA Portal Openness for Siemens.
Check my video/course about the twincat automation interface here on TH-cam.
That looks very good!
Some questions you might delve into in future videos
-Is building / downloading a lot faster? It does seem so in your video or have you edited out waiting times?. At my work-laptop for example loading the plc project I'm working on already takes 55+ seconds (first time loading after windows boot, loading again is quicker but still slow... (not as bad as TIA..).
-In twincat-classic I'm using method's like fb_init() does that still work?
-do attributes still work? For example I use: {attribute 'to_string'} for my state enums and then I can do in code To_String(myState) and use that for logging
-Could you have declared the enum inside the function block and would it then have local scope?
-will it be in twincat 4026 which is stil fairly new?
I'm lookin forward to try this new plc++, meanwhile I'll have to do with your video's which are very informative!
Very exciting. I have 2 questions.
1: How do properties change - do we perhaps have the "traditional" auto-implemented properties", or do we still require set/get assign/read a variable? Do we now declare them in text and have get/set accessors more traditional way in the code part (assuming yes)?
And a sub question is, can you now access properties of structured types directly when doing property access or do you still need to have the property be a REFERENCE TO. Example - IF myFb.MyStructProperty.Value THEN ... - does this compile and work if it is declared as MyStructProperty : MyStruct and not MyStructProperty : REFERENCE TO MyStruct
2: Does online monitoring for methods with return type work? If your method returns an object, sometimes you might want to do a direct access to that object, instead of setting another variable to it. This however does not display correct values when doing monitoring, with either 'call' or 'variable' attribute. Example : If myFb.Method().Value THEN .... - It would be really neat if you can see the .Value online, and just like above, does this need to be a reference type or no?
Some little features I would really like to see work. Great video :)
I’d like to know that too, and I’m joining the questions
so I can declare new variables as an online change now without having to hope the PLC won’t crash?!? FINALLY !!
Great video Jakob.
Isn't there a coincidence between properties and VAR PUBLIC? Isn't VAR PUBLIC identical to a Property with GET,SET
Very very nice, but i have some questions and comments:
1. If Beckhoff develops a completely new compiler, will it be 100% compatible with old, especially for non-standard things features __NEW/__DELETE, __TRY/__CATCH/__FINALLY, __POUNAME, and so on?
2. Will new compiler/language support type introspection or even reflection?
3. Will there be any new features in the programming language, such as constructors/destructors, generics, string concatenation with + and long strings support, arrays of variable length, method overloading, etc?
4. I don't understand why default function block/program method does not have own subblock, something like IMPLEMENTATION ... END_IMPLEMENTATION. I don't like how it's currently made, blocks are mixed with code...
nice
For a guy who is trying to learn German language with German keyboard 2 min frustration is reasonable 😂😂
😂😂 I have a German keyboard coz the laptop was cheaper there. Now, in my head, all other keyboards are wrong the German one is the correct one.
❤️❤️❤️❤️
Currently, what annoys me in TwinCAT are properties (get/set), specifically that if you want to see their value online, you have to add a pragma to each one. Please, Beckhoff Jesus, make it so this isn’t necessary in the PLC++ 😂
Getters and setters should always be considered as methods because, fundamentally, that's what they are. While languages like C# have introduced syntax that makes them appear as properties, it's essential to remember that other OOP languages (e.g., Java, Python, JavaScript, Rust, C++, etc.) treat them explicitly as methods.
When you approach them with this mindset, you can avoid pitfalls like relying on monitoring pragmas. These pragmas introduce invisible changes and calls that can obscure the logic and behavior of your code. This is often considered a code smell, as it reduces transparency and can lead to unexpected side effects.
@@chudchadanstud In the IT world, this approach is possible because there is no need for instant diagnostics on a "live system." However, in industrial automation, the ability to monitor every variable used in a program is a fundamental feature. A well-written program, an HMI with extensive diagnostics and messages-all of these are important, but they don’t solve the problem 100%. Even as a PLC programmer with an IT-oriented mindset, I believe that stripping the Maintenance team of the ability to easily monitor variable states is excessive.
I don't see a way to achieve a compromise that:
- Maintains monitoring capabilities,
- Utilizes OOP, properties, interfaces, etc.
without relying on pragmas.
Do you know of a better and correct solution to this problem?
@@adrianjenkner2775 They are functions/methods. No further explanation is needed. You don't do this with normal methods.
Just create a variable or use VAR_INPUT/IN_OUT/OUTPUT. In the PLC world which is similar to the embedded world, you know the one that launches rockets into space and has self driving cars, having a function being invoked randomly with no clear execution order is dangerous. OT needs to learn a lot from IT. The field is embarrassingly behind.
@@adrianjenkner2775
Just use a variable like you would with functions and methods. This has been a solved problem for a long time in the IT world which is exponentially harder than OT.
@@chudchadanstud Do you mean that properties should be copied to regular variables, or that properties should not be used at all? Copying them to regular variables would require a lot of extra work and introduce additional code that could increase CPU load. Even without this, properties already seem less optimal, as I have checked using a profiler.
I don't think they are loosing money because of the performance classes, I think they are advancing from manufactures using classic CodeSys
I can't wait for your deep dives and tutorials for plc++. I'm a little disappointed that they are building it on VS.
My question is can you simulate physical inputs/outputs between parallel plc programs? Say you had a complex machine and you wanted to simulate failures and/or wierdness with physical IO before running it with real hardware.
This you can do today already by simply linking your variables to simulated ones in your process data instead.
What I want to see from Beckhoff is to still see plain text code in the repository even when encryption is enabled via software protection. The files should only be encrypted when the files are built and created in the boot folder.
Why Germany? Why do you have to make life so hard?!? -Jakob Sagatowski
🦾🦾
Endlich plain text code!
Der Frust wegen Versionskontrolle auf XML Müll hat endlich ein Ende.
I think this is codesys go under the hood and they didnt really develop a new runtime from scratch. Which is fine, in my opinion nowadays having the supply chain crisis in mind its a good thing to have code and programs which are to a degree portable.
Breaking that would also mean bechhoff programs would be not anymore be supported by codesys.
Supporting 2 runtimes in parallel would also be quite an effort from library side and they would have to reimplement all the default libraries from codesys (assumption is codesys would not hand them out the source code), that would be insanse as it would take years to have the same runtime behaviour.
Beeing able to mix them further prooves my point.
That said even do i think this is a good thing it renders the first part of your video misleading as we dont really now how its made under the hood.
Beckhoff have explicitly said this is not based on CODESYS whatsoever.
@@JakobSagatowskii believe you, that they said this, but i cant believe that. How could you have such a seamless integration, with the old functionblocks and their runtime / libraries?
Codesys must have informed beckhof and their big customers early enough so they can migrate to the new runtime. It would be quite a coinsidence, and this integration is so seamless i cant believe that.