The subject of this post is the first line of the introduction of a SCADA suite that we use. It’s called Ignition and created by Inductive Automation. It runs on Windows, Mac and Linux.
Features Download PDF
Check out the video.
The subject of this post is the first line of the introduction of a SCADA suite that we use. It’s called Ignition and created by Inductive Automation. It runs on Windows, Mac and Linux.
Features Download PDF
Check out the video.
I purchased the LOL shield because I need it for a simple demonstration. I’m going to use the Arduino mega 1280 to display the numbers 0 to 9 on the LOL shield. That is not difficult to do, but I am also going to use a remote control to send a number to the Mega. That number should be left out of the sequence 0-9 that is displayed by the LOL shield. The fun part of the demonstration is an inspection camera that is used to ‘detect’ the missing number. It sounded easy but the problem started with the combination Arduino Mega and LOL shield. The LOL shield works perfectly on the Arduino UNO but it doesn’t work on the Mega. I’m not the only one running into this problem. The video below shows the problem. (No, it’s not me in the video below below, it’s another Arduino user.)
I started looking at the problem and started to eliminate problems. I started of using the simple example that doesn’t use the CharliePlexing library. I replaced the digitalWrite funtions with analogWrite(pin, 0) and analogWrite(pin, 255). This already got be a bit further. Then Gerard, one of my coworkers told me to disable the clock feeding timer 2. This resulted in rewriting the setup() function:
void setup()
{
alloff();
// Disable PWM on 0-13. Block the clock signal to timer2
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 0;
OCR2B = 0;
}
I Also updated allof() since the original function only implements the ‘UNO’ way, I needed a few changes because to do it the Mega way::
void alloff() {
// http://spreadsheets.google.com/pub?key=rtHw_R6eVL140KS9_G8GPkA&gid=0
// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1266009870
// Arduino mega pin magging does not correspond with Arduino UNO
// Pin mapping.
DDRE = DDRE &~ B00111011;
DDRG = DDRG &~ B00100000;
DDRH = DDRH &~ B01111000;
DDRB = DDRB &~ B11110000;
}
These 2 changes allowed me to use digitalWrite() again. The result looks promissing. The next challange is to fix the CharliePlexing library. It doesn’t work with the Mega 1280. The fixes given above should be applied to the CharliePlexing library also. Also a few other fixes are needed since the ATMega1280 is treated as an ATMega328 in the CharliePlexing library and that is not correct. I’ll post my results here.
See ya.
Update 06-02-2011: I ran into a second issue. The LOL shield and the IR library are using the same timer. I need to assign another timer to the IR library
One day, Rob Valent (Managing Director ATS Benelux) came up with the idea to set up a display in our public lunch area that shows several websites or local announcements. The application had to meet the following requirements:
- A full-screen web browser application
- A configurable list of websites
- A configurable interval for changing the website
- The possibility to add custom pages for announcements.
I did not find anything I liked so I started to write an application based on Nokia’s Qt toolkit (not to be confused with Apple’s QuickTime), which has a WebKit browser included. Qt is the toolkit that is used by most the KDE desktop environment in Linux. It is a cross-platform C++ toolkit/framework which has all kinds of data structures, useful utility classes and an easy way for creating GUI applications. WebKit is the browser engine used by browsers like Google Chrome and Apple’s Safari.
The complete Qt SDK for Windows, Mac OS X and Linux can be downloaded free of charge from http://qt.nokia.com . For this project I have used the LGPL version, but there is also a commercial version available. More info about Qt, manuals for Qt Creator and Qt tutorials can be found at the Qt website.
The sourcecode I created can be downloaded here.
To create the GUI, I have used the Qt Creator IDE included with the Qt SDK. Qt Creator has a GUI designer a code editor and an interface to the build tools and the debugger, which is gcc/g++ on Linux and Mac OS X, MinGW on Windows.
I’ve used the QWebView widget, which essentially is the WebKit browser, as the main widget in the application and a QMenuBar, because a menu bar is the easiest way to access the settings dialog and the shut down button of the application.
For each GUI screen created with the GUI designer, a C++ class is created. In the constructor of the MainWindow class, I read the size of the screen and set the size of the QWebView widget accordingly. This is also where the signals and slots of the different objects are connected. Signals are emitted when a specific event occurs to notify other objects that this event occurred. A slot is a special function in a class, to which a signal can be connected. If that signal occurs, the connected slots are executed. Since slots are functions, they can also be called as a regular function from other functions or classes.
In the MainWindow class, there is a QTimer, a QList of QUrl objects and a QSettings object. The function of the QTimer, QList and QUrl are considered obvious. The QSettings object is more interesting. This is a platform-independent way of storing persistent settings for an application. That’s not very special in itself because that can also be done using an INI file or something similar, but the interesting part is that it does this in the way that is native to the platform it is running on. On Windows it uses the registry, on Linux a file in the home directory and on Mac OS X it uses a property list.
The keyPressEvent function is implemented to make the hiding and unhiding of the menu bar possible. It is called by Qt when a key is pressed, so appropriate action can be taken when the escape or tilde key is pressed. The tilde (~) key is added to make management from an iPhone or Android device possible.
In the Settings dialog, nothing special happens. When the OK button is clicked, the settings are written to the QSettings object and a signal is emitted that the settings have changed. This signal is connected to the MainWindow, so that the settings are applied immediately, by reading them back from the QSettings object in the MainWindow class.
To deploy the software on a Linux or Mac OS X system, there are no prerequisites apart from installing the Qt runtime libraries QtCore, QtGui and QtWebKit using the package manager of choice, i.e. apt-get, MacPorts etc.
To deploy the software on a Windows system, the Qt runtime libraries and the compiler-specific libraries need to be included in the distribution package. The complete list of DLL files required is found in the next screenshot. To show Flash animations, it’s required to install Adobe’s Flash Player for Firefox and Safari.
A Windows distribution package is included with this post. The source is also included, so you can play around with it. Just open the Ticker.pro file using Qt Creator and you can get started.
We have the browser running on a Windows system now. The next challenges are to get it running properly on a Linux based live USB stick or even Freddy’s IGEPv2 board.
Source code can be downloaded here.
A few weeks ago, I purchased an DFRobot mega (Arduino mega 1280 clone) and an LCD display from Freeduino.eu, a few days later I also bought an ethernet shield (mega compatible) and a few components. This purchase also resulted in an additional free of charge Arduino Uno. I bought the Arduino to find out if it is usable in industrial automation projects. My current setup (see image) is a learning environment able to measure temperature and light intensity and it controls an RGB LED. The ethernet shield helps me sharing the measurements using a webserver. The mega clone (positioned under the LCD) is just running the LCD4Bit_mod demo application.
The Arduino platform is not expensive, the programming environment is for free and you only need 27,50 euro for an Arduino Uno, a USB A->B cable and an LED. Programming the Arduino is easy, just download the latest programming environment from http://arduino.cc/en/Main/Software and unpack the archive. After starting the programming application, just go to ‘examples‘ under the ‘file‘ menu and you can get started with your first sketch (that’s how they call an Arduino source file.) That’s exactly how I started.
The setup shown above will be split soon, the Uno and the ethernet shield will monitor my energy, gas and water consumption at home and the mega will be used by a few co-workers to see if it is usable for one of their projects. They need to count pulses and set an output accordingly. This should be a simple task for the Arduino and the information at http://www.arduino.cc/en/Reference/AttachInterrupt should provide a good starting point. Bear in mind that when the ISR runs, it blocks all other processing. I will ask my co-workers to share their experiences on atstechlab. Before I can start my energy monitoring project, I need to write a sketch that transforms the Arduino Uno and Ethernet shield into a small TCP/IP IO controller with RFID reading capabilities.
I think it is not a shame to use the Arduino in industrial automation projects. It’s small, cost effective and easy to program, it’s not harder than writing software for a PLC. It’s not all good news, the Arduino works with 5V signal levels and industrial projects mainly require 24V. Another disadvantage is that if you want to communicate on a CAN network, you need to design your own CAN bus interface.
Finally, there are a few URL’s thatI would like to share with you, these offer more information about the Arduino:
The QNX Neutrino powered BlackBerry PlayBook was announced yesterday and today, a VP at RIM said that QNX Neutrino will power more BlackBerry devices. It seems that RIM is making good use of their latest purchase
Today, the co-founder and CEO of QNX Software Systems, Dan Dodge, was interviewed by the BlackBerry developers blog. I think the interview is worthwhile reading since it highlights the basics of the QNX Neutrino RTOS. Check it out at: http://devblog.blackberry.com/2010/09/blackberry-tablet-os/.
So, QNX runs on a wide variety of devices, will it power your future device?
A few months ago, there were rumors on the internet that QNX was to power the new BlackBerry tablet PC. This time, the rumor becomes the truth. RIM announced the QNX Neutrino powered BlackBerry PlayBook.
Most of us know that QNX Neutrino is a mission critical OS and that it is used in the networks/telecom, medical, automotive, defense/security and industrial automation markets. Now it is used to power a tablet PC.
Also check Paul N. Leroux’s post on the PlayBook on his blog, he tells more about the introduction of the tablet.
The following URL’s offer more information if you want to know more about QNX:
Last friday, I attended the ATS Inspect workshop at the ATS university day 2010. We were asked to describe ATS Inspect and one of my co-workers from the UK came up with ‘make things goodder’. To be honest, it does tell what ATS Inspect does.
ATS Inspect is an optical inspection suite that helps customers to reduce costs that comes with rework or scrapping a product. It also helps customers to document all quality aspects of their product during the production process. All information is stored in a database and it can be processed and displayed using a wide variety of modules that plug into ATS Inspect. A overview of ATS Inspect is given in the picture below.
At this moment, inspection data is entered via a user interface on a computer or mobile device but ATS is investigating the integration of the powerful high resolution Cognex vision camera into ATS-Inspect for real time high volume automatic inspection. This means that a number of quality checks can be performed automatically without an operator being present. This will speed up the inspection process. An example of such an process could be the inspection of glass or the inspection of printed circuit board.
A lot of manufacturers say that they do not need ATS Inspect because the know their quality but they cannot tell how much additional costs are involved to achieve that quality. My suggestion would be that they would start up a pilot project using our Starter kit.
We will write more on ATS Inspect during the next couple of months. Our product development team is going to help us with it to give you more information on ATS Inspect. Please visit our ATS Inspect website if you are to impatient to wait for the next post. If you have questions or a suggestion for the next post, don’t hesitate and leave a comment.
PS: My boss, Rob Valent wrote a piece in dutch about optical inspection. Please visit this link to read the story.