Adding a SECS/GEM interface to an equipiment is the first step in automation. Without the proper toolset, this can seem like an overwhelming endeavor. The CIMConnect™ toolkit provides developers and integrators with the ability to quickly create a SECS/GEM interface and the power to perfect it.
Recently I was introduced to the Cimetrix CIMConnect tookit. I had the opportunity to attend a hands-on client training event. Though my knowledge of SECS/GEM was minimal, within three days, I learned the basics of implementing a SECS/GEM interface using CIMConnect and want to share some highlights of that very positive experience.
CIMConnect provides a robust software development kit that helps developers implement and manage a SECS/GEM interface from their equipment control application. CIMConnect is always current with the latest version of required SEMI standards which simiplifies the process of producing a GEM-compliant interface. When CIMConnect is installed, it comes with multiple tools that make development and testing straightforward and efficient.
CIMConnect Sample projects
CIMConnect samples provide a functioning example of a SECS/GEM application. Sample projects are available in C#, VB.NET, and C++. I will be referring to the C# sample since that is what I used during training.
This sample provides a “known-good” environment that provides a way to accelerate development by taking care of the essentials. I was able to focus on debugging the scope of what I was working on in my application, rather than questioning the SECS/GEM connectivity aspects.
C# Sample Features
- Processing Simulation: The sample provides a loop that simulates equipment operation. This includes triggering events and updating variable values.
- EMService Initialization: When the Sample is compiled and run, CIMConnect is initialized and GEM communication is started.
- GEM Operator Controls: GEM communication status is displayed in real time using GEM state machines. Communication can be controlled from the sample’s user interface.
- Multi-threading Examples: Data is processed in separate threads. This is a good practice and allows the user interface to remain responsive while data is effectively processed asynchronously.
- Delayed GEM Communication Initialization: This demonstrates the concept of waiting for the equipment to be ready during initialization.
- Trigger Events: Events are triggered from the process simulation loop. As events are triggered, related variables are updated.
- Get and Set Variable Values: This sample provides multiple examples of programmatically getting and setting variable values of varying data types.
- Set and Clear Alarms: An example alarm can be set and cleared by toggling a checkbox in the user interface.
- Terminal Services: Terminal services provide an example of effective logging by displaying real-time messages to the equipment user interface.
- Remote Commands: The sample allows the user to start and stop the processing simulation by sending a SECS-II message from the host.
Training is very interactive; the instructor demonstrates a new topic, and then allows the trainees time to try it out. When presented with a new feature to try out, I found it beneficial to initially create a button or checkbox to ensure the new feature worked. Next, I embedded the feature into the application. Breaking each process into these two steps removes ambiguity and avoids unnecessary debugging.
The pace was set by the client. The instructor was available to provide assistance as needed. Though the training follows a curriculum, each session is custom tailored to the needs of the client who requested the training.
I had created a C# application prior to training. My application read in an XML recipe and simulated wafer processing. Having a working application to modify during training was very beneficial, since it simulated a real-world practical implementation.
Adding the SECS/GEM interface
The first step was to initialize CIMConnect. This step was simplified by extracting the Initialization functions from the sample project. Once I could observe that CIMConnect was initialized, I was able to move on to adding the SECS/GEM functionality.
My application sends API calls to, and receives call backs from CIMConnect. The API calls were somewhat difficult to understand initially due to the customization each call allows.
The sample project provides several useful wrapper functions that implement API calls. The overhead of API calls is handled inside the wrapper. The benefit of using wrapper functions is that the developer can focus on whether the result matches his/her expectations rather than whether the API call is incorrect.
After my success using wrapper functions to call APIs, I started to modify and make my own wrapper functions. Eventually I became comfortable calling the APIs directly.
CIMConnect lets you statically define events, alarms, variables, and other attributes in a configuration file. In my file, I created multiple variables that related to my application. Later I learned that my application could dynamically define items instead. Also, my application could programmatically override configured attributes. I think these features would benefit companies that produce multiple equipment types with slight variances.
Adding Events and Alarms
The first event that I created was to let the host know when a FOUP had landed on the load port. I used the SendCollectionEventWithData() wrapper function to trigger the event and increment a variable I had previously defined in the configuration file. This variable provided me with a count of FOUPs that had landed on the input port.
Using the AlarmSET() and AlarmClear() functions, I created 3 alarms. Since I didn’t have hardware such as an EMO button, I used check boxes to toggle each alarm’s behavior.
My application with a SECS/GEM interface.
Developing Using the CIMConnect Control Panel
The CIMConnect Control Panel is a graphical user interface utility that provides a way to observe the inner workings of CIMConnect.
During development, I used the control panel frequently. I could watch the alarms status change as I toggled each checkbox in my application. Event history and alarm history provided real-time updates. I could change variable values and trigger events from the control panel and verify results on the host without needing to constantly modify my application.
I watched the GEM communication status change on the control panel as I used my application’s GEM control. I could also change the status on the control panel and watch it change in my application.
CIMConnect Control panel 1.15.0
Host Testing with GEM Host Messenger
CIMConnect comes with GEM Host Messenger, a host application that allows the user to send and receive SECS-II messages to/from the equipment.
Using GEM Host Messenger, I could easily connect with my application. GEM Host Messenger displays and decodes messages into an easy-to-read format.
I could send S2F21 messages “START” and “STOP” to control processing on my application. It was very satisfying to see my once-standalone application being controlled remotely.
Gem Host Messenger 1.0.0
Help Documentation, Tools, and Support
CIMConnect provides an in-depth help file and developer’s guide. I found myself referencing these frequently to get details on different functionality available in the extensive CIMConnect libraries.
CIMConnect allowed me to rapidly develop a SECS/GEM interface and implement it into an already existing program. With CIMConnect training developers unfamiliar with SECS/GEM can learn the basics in as little as 3 working days. Although this was a simple example, CIMConnect has the power and functionality to facilitate projects on any scale.
Find out more
To find out more about CIMConnect and to request a technical product overview or product demo, visit the resources page now.