By now it’s been a few months for folks to get acquainted with Generative AI and, most famously, ChatGPT. In my last article, Using ChatGPT for Automated Testing, I introduced the ChatGPT service, showed you how to get familiar with it, and use it to generate code to run tests on your hardware. In this article we’re going to look at how to best utilize ChatGPT to write DelphiScript code to run automated functions within Altium itself using Altium Scripting.
Before we dive into the implementation, it’s important to understand what we’re working with here. Altium Scripting is best supported using DelphiScript (over other languages). While a quick search online yields results like, “It's 2022—Isn't It Time You Started Coding in Delphi?” and catchy headers such as, “The Pascal language that [is] used in Delphi is one of the most popular and universal programming languages,” I have never seen Delphi used outside of Altium Designer. That’s not to say it’s a bad language - it’s just not as commonly used as Python, C++, etc. There’s a lot to learn with a new language (especially if you’re not a native programmer), so Altium put together a lot of resources and even tooling around coding in DelphiScript here. If you’re looking to sink your teeth into the language, the resources there can be helpful.
As you get started with Altium Scripting, you will very quickly grow a large repository of scripts that you may want to save and/or share. To create a new Scripting project in Altium Designer, navigate to File > New > Script > Script Project. Right-click on your newly created project and navigate to Add New to Project > Script Unit. This will create a new .pas file which will be your script:
Figure 1: Adding a script file to the existing project
We will want to save this to our Altium 365 workspace. First ensure you have saved the project locally. After that right click on the project again and navigate to History & Version Control > Add Project to Version Control…
Figure 2: Adding project to the Altium 365 Workspace
Follow the prompts afterward to save the project to your Altium 365 Workspace. For further instructions on how to write, run, and debug DelphiScript code within Altium Designer consult the Altium documentation.
Now that we’re all set up, we’re ready to dive in. ChatGPT has the “potential” to completely write DelphiScript from beginning to end. I use " potential " instead of “capability” here because it doesn’t always get things right. Let’s take a simple example where we ask ChatGPT to generate a script in DelphiScript to list all the nets in my project. I started with a prompt that was, to be fair, very vague:
Figure 3: Initial ChatGPT response
This automatically understood that I wanted to list all nets from a PcbDoc. I actually wanted it from the schematic, so I corrected it:
Figure 4: One of many ChatGPT’s attempts to write the correct script
I haven’t displayed all the code that it generated for me, but what transpired after that was me running the code multiple times only to get Altium Designer to fail on errors such as “Undeclared Identifier: eNet,” or “Expected: in For Pin in Component. Pins Do.” All I did was respond to ChatGPT with those errors multiple times, and on the fifth try, it generated the code I was looking for.
What’s clear is that it isn’t terrific at generating DelphiScript from scratch, but it is capable of doing so. Remember that before you throw your keyboard at the wall in frustration.
ChatGPT can also be available as more of a sidekick or peer programmer. You can use ChatGPT to analyze your code, find bugs, or help you tweak specific functions. We can take an existing Altium Scripting example and have ChatGPT tweak it to meet our needs.
There are resources out there (especially hosted on GitHub) that provide Altium Scripting examples for you. I’m going to use the ones officially provided by Altium. They can be found here.
I’m starting with the PlaceAPort example located under \DelphiScript Scripts\SCH\Sch_Scripts.PrjScr. I’ve given ChatGPT a very trivial task:
ChatGPT gave me the code that followed exactly this request. To be honest this is pretty simple if you’re semi-comfortable with programming. Let’s make it a bit harder that requires contextual knowledge of Altium Scripting.
Here’s my updated prompt to ChatGPT:
It fails on the first shot with an Undeclared Identifier:
Figure 5: Debugger error from Altium Designer
I let it know that and it apologizes, of course. It fails again with an “Undeclared identifier: Name” error but, by the third time, I get my net label exactly where it’s supposed to be:
Figure 6: New net label and port generated by modified scripts
It’s obvious that with an increase in complexity the less of a chance ChatGPT will get your script right in the first shot. I’ve found that, with persistence, it is able to eventually get things right, especially if you can assist it a little (assuming you understand the code it’s generating).
In this article we started with an introduction to Altium Scripting, how to create a project, and save it to your Altium 365 workspace. We dove into examples with ChatGPT where it completely generated scripts from scratch and also modified scripts that we provided it with. We demonstrated its capabilities and how it doesn’t always get things right. While it’s not perfect it certainly can act as a guide throughout your Altium Scripting journey. Most importantly, it’s certainly better to have it than to not have it at all.