2025年4月24日木曜日

Popular Open-Source SCADA Systems

 


🧩 Popular Open-Source SCADA Systems

  1. ScadaBR

    • Language: Java

    • Platform: Windows, Linux

    • Key Features: Web-based interface, supports Modbus, OPC, BACnet, SNMP, and more.

    • Website: https://github.com/ScadaBR/ScadaBR

    • Notes: Good for educational and small industrial projects.

  2. OpenSCADA

    • Language: C++

    • Platform: Linux, Windows

    • Key Features: Modular, supports multiple protocols (Modbus, OPC, SNMP), scripting support.

    • Website: http://oscada.org

    • Notes: Part of the OpenSCADA project under the Eclipse Foundation (Eclipse 4diac).

  3. Rapid SCADA

    • Language: C#, .NET

    • Platform: Windows (can run on Linux with Mono)

    • Key Features: Web-based interface, supports Modbus, SNMP, and custom drivers.

    • Website: https://rapidscada.net

    • Notes: Actively developed, good for mid-scale projects.

  4. IndigoSCADA

    • Language: C++

    • Platform: Windows, Linux

    • Key Features: Real-time data acquisition, historical logging, supports Modbus.

    • Website: http://indigoscada.sourceforge.net

    • Notes: Lightweight, suitable for embedded systems.

  5. Freedomotic

    • Language: Java

    • Platform: Cross-platform

    • Key Features: Focuses more on building automation, plugin-based architecture.

    • Website: https://freedomotic.com

    • Notes: Useful for smart buildings and IoT environments.


📌 Things to Consider:

  • Protocol support: Make sure the SCADA system supports the industrial protocols you use (like Modbus, OPC-UA, etc.).

  • Scalability: Open-source systems can be limited in terms of scalability and security, depending on the project.

  • Community and Documentation: Look for active communities and good documentation to help with setup and troubleshooting.


Would you like help choosing one based on your use case (e.g., factory automation, home automation, water treatment plant, etc.)?

Yep, you're absolutely right — TCP/IP is widely used in robotics, especially for:

  • Multi-threaded control of different components (e.g., arms, sensors, vision systems)

  • Real-time telemetry and feedback

  • Decoupling hardware modules (distributed control)

  • Remote monitoring or control over Ethernet or Wi-Fi

It’s not uncommon to see setups like:

  • One thread/socket handles motion commands

  • Another handles sensor input

  • A third handles status updates or logs

⚙️ How SCADA Fits Into This

If you're building or managing a robotics system with multi-threaded control over TCP/IP, using a SCADA platform can help with visualization, data logging, and manual override control — but you’ll often need to customize the SCADA system or write a custom driver.


🔧 SCADA Platforms Suitable for Robotics (TCP/IP Custom Comms)

SCADA System Why It's Good for Robotics
OpenSCADA Highly programmable (C++ + scripts), good for custom TCP socket comms
Rapid SCADA Supports custom TCP/IP channels using C#, easy to build specific logic
ScadaBR Java-based, can write custom data sources using raw TCP/IP sockets
Node-RED (not a full SCADA) Great for rapid prototyping; supports TCP nodes and MQTT, often used in robotics and IoT setups

🧪 Real-World Examples

  • ROS (Robot Operating System) often uses TCP/IP (via ROS TCP endpoints) for nodes to communicate — if you're integrating ROS with SCADA, you can use a TCP bridge or MQTT.

  • Custom robotic arms with multiple motors/sensors connected over a LAN using Modbus TCP or even custom TCP binary protocols.

  • AGVs (Automated Guided Vehicles) using SCADA to monitor paths, battery, motor status, etc., all via TCP/IP.


💡 Want to Build Your Own?

If you're coding the system yourself, you could:

  • Use a SCADA system as the front end, while you manage the robotics logic in Python, C++, or Java.

  • Use Node-RED or custom dashboards (e.g., Python + Flask + Socket.IO) for more flexibility.


Do you want to integrate SCADA with an existing robotics system? Or are you starting from scratch and trying to decide on a control architecture?

 


2025年4月19日土曜日

4357_Firmware_Essential | RE: HW1 to HW8 checklist

 Serial Communication



---------- Forwarded message ----------
From: <postmaster@online.ucsc-extension.edu>
Date: Fri, Nov 15, 2013 at 11:10 AM
Subject: HW1 to HW8 checklist
To:


To: Student Role

From: Sheng-Liang Song

 
HW1: Gray Code (Multidimensional Arrays: Maggie Square, optional)
     Learn "C" and problem solving skills
 
HW2: mbed HelloWorld
     Understand mbed online compile tool. And read mbed source code.
 
 
HW3: Digital IOs
     Read Chapter 1-3 and 14. Undestand digital IOs.  
     Tried chapter 14 example codes on LPC1768 boards with external LEDs.
 
HW4: RS232 Communication
     To understand basic RS232 interface, and try mbed Serial code with two mbed boards.
 
--------------------------------
HW5: Ethernet Commuication
     Try mbed Ethernet Server and Client Codes on two mbed boards.
 
 
HW6: Implement Circular Buffer (FIFO)
      Understand FIFO, and implement in C.
 
HW7: Compile elua uboot code and load to LPC1768 mbed boards.
     Trace elua uboot code. Study the boot up sequence.
 
 
HW8: Presentation, pick your topic or demo.
 
 
Also remember to do Quiz 1 to Quiz4 on the course web site.
 

4357_Firmware_Essential | Re: Fast and Effective Embedded Systems Design: Applying the ARM mbed

To: All Participants; Instructor Role; Student Role; Lu, Jenny; All Participants

From: Sheng-Liang Song

Fast and Effective Embedded Systems Design: Applying the ARM mbed

 By Rob Toulson, Tim Wilmshurst


https://www.google.com/search?tbo=p&tbm=bks&q=isbn:0080977693

 

On Oct 30, 2013 2:35 PM at 2:35 PM, Lu, Jenny wrote:

Can anyone kindly re-iterate the assignments.

When I clicked on Assignments link on the left panel, it shows something different than I remembered.

I remembered we are supposed to read 3 chapters of a book, which book I do not remmeber...

Best Regards,

Jenny


4357_Firmware_Essential | Re: DAP driver issue ? Win7/64bit

To: All Participants; Song, Sheng-Liang

From: Juan Cheng

Thanks! 

I tried following this http://mbed.org/questions/153/DAP-driver-issue-Win764bit/, but it didn't work for me.

I also tried unplug/plug, uninstall/re-install driver, reboot my pc... still didn't work.

I noticed that the Flash Download failure is due to "Flash Programming Algorithm is not found", so I followed here

http://www.keil.com/support/man/docs/ulink2/ulink2_su_flashdownloadcfg.htm

to add programming algorithm.  (The example in above link is ULINK debugger, we need to choose CMSIS DAP debugger).  

After I added the "On Chip Flash" algorithm (There are only two choices in the list, the other one is External Flash), The download failure changed to "Flash Time Out". Apparently, The algorithm is not working for LCP1768.

see http://www.keil.com/forum/16981/ for someone's view regrading this.

I don't know if we need to create the new Algorithm for it, but here is the link for instruction:

http://www.keil.com/support/man/docs/ulink2/ulink2_su_newalgorithms.htm

 

What do you think, Mr.Song?

- JuAnne

On Oct 29, 2013 9:17 AM at 9:17 AM, Song, Sheng-Liang wrote:


FYI: http://mbed.org/questions/153/DAP-driver-issue-Win764bit/

 

 


 

 

4357_Firmware_Essential | FYI Driver

 To: All Participants

From: Sheng-Liang Song

I posted this answer to someone else in the mbed website who had an issue with the keil uvision debugger. If you read my answer to the question I explain How I made the uvision debugger work for me after installing the serial driver.

http://mbed.org/questions/764/RDDI-DAP-error-by-keil-uVision-and-CMSIS/#answer1036


the link for the serial driver is at:
http://mbed.org/handbook/Windows-serial-configuration

Napoleon

 

To: All Participants

From: Sheng-Liang Song

FYI: http://mbed.org/questions/153/DAP-driver-issue-Win764bit/

 

 

 

4357_Firmware_Essential | Mbed Shell

 To: All Participants

From: Sheng-Liang Song

/*
 * mbed Serial PC interface
 *  - a simple mbed Shell program
 *      UART: input and put examples
 */
 
#include "mbed.h"
DigitalOut myled(LED_GREEN);
Serial pc(USBTX,USBRX);
char command[256];

int help(char* cmd);
int md(char* cmd);
int mm(char* cmd);
unsigned int addr, len, val;

int main(void) {
    int rc=0;
    int i=0;
    int run=1;
    pc.baud(115200);
    help(NULL);
    while (run) {
        wait(0.5);
        pc.printf("\r\nmbed %d %% ",i);
        while(rc==0) {
            if (pc.readable()) {
                rc= pc.scanf("%s", command);    
                
                if (!strcmp("help", command)) {
                    help(command);
                }
                else if (!strcmp("stop", command)) {
                    run = 0;
                }
                else if(!strcmp("md",  command)) {
                     pc.scanf("%X %X", &addr, &len);
                     md(command);
                }
                else if(!strcmp("mm", command)) {
                     pc.scanf("%X %X", &addr, &val);
                     mm(command);
                }
                else
                {
                    pc.printf("\r\nrc:%d please add handle function for cmd[%s]!", rc, command);
                }
            }
        }
        rc=0;
        i++;
        myled = !myled;
    }
    return rc;
}

int help(char* cmd)
{
char banner[] =     
"\r\n#     #  #####   #####   #####        #     # ######  ####### ###### "
"\r\n#     # #     # #     # #     #       ##   ## #     # #       #     #"
"\r\n#     # #       #       #             # # # # #     # #       #     #"
"\r\n#     # #        #####  #             #  #  # ######  #####   #     #"
"\r\n#     # #             # #             #     # #     # #       #     #"
"\r\n#     # #     # #     # #     #       #     # #     # #       #     #"
"\r\n #####   #####   #####   #####        #     # ######  ####### ###### "
;
    pc.printf("\r\n%s\r\n\r\nWelcome to mbed World!\r\n==> Please select: TermTerm->Setup->Terminal->[]local echo\r\n", banner);
    pc.printf("\r\nbanner: 0x%08X command: 0x%08X help: 0x:%08X main:%08X\r\n", banner, command, help, main);
    return 0;
}

int md(char* cmd)
{
   unsigned int* p =(unsigned int*) addr;
   unsigned int i;
   pc.printf("\r\nmd addr:%08X len:%04X\r\n", addr, len);
   for(i=0; i<len; i+=4) {
    pc.printf("\r\n%08X: %08X %08X %08X %08X",  &p[i], p[i+0], p[i+1], p[i+2], p[i+3]);
   }
   return 0;
}

int mm(char* mm)
{
   unsigned int* p =(unsigned int*) addr;
   pc.printf("\r\nmd addr:%08X val:%04X\r\n", addr, *p);
   *p = val;
   pc.printf("\r\nmd addr:%08X val:%04X\r\n", addr, *p);
   return 0;
}
 

4357_Firmware_Essential | A high-level assignment (Part-2)

 4357_Firmware_Essential | A high-level assignment (Part-2)

https://github.com/Shengliang/e4357/tree/master/hw1




---------- Forwarded message ----------
From: <postmaster@online.ucsc-extension.edu>
Date: Fri, Oct 25, 2013 at 10:46 AM
Subject: Re: A high-level assignment summary for WK1 and WK2
To: macksoneh@gmail.com


To: All Participants; All Participants; Song, Sheng-Liang; All Participants; Sone, Mack; All Participants

From: Sheng-Liang Song

I mean "gcc-arm-none-eabi" gcc.

% which gcc-arm-none-eabi-gcc

If you do not have them, you need follow the following step to install them.

https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded

Here are quick steps to install toolchain from this PPA:

Step1: Inside Ubuntu, open a terminal and input
       "sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded"

Step2: Continue to input
       "sudo apt-get update"

Step3: Continue to input to install toolchain
       "sudo apt-get install gcc-arm-none-eabi"

To remove installed toolchain, just input "sudo apt-get remove gcc-arm-none-eabi".
To update the toolchain, just repeat above step2 and step3.
 

 

On Oct 25, 2013 9:50 AM at 9:50 AM, Sone, Mack wrote:


Hi Sheng-Liang,

>SONG: Install arm embedded compiler (gcc, git, gitk)

Do I need to install gcc? I thought Ubuntu 12.04 LTS comes with gcc C compiler.

Thanks,

Mack
 

On Oct 23, 2013 1:53 PM at 1:53 PM, Sone, Mack wrote:


Hi Shengliang Song,

Thanks for confirming and clarifying the assignments for WK1 and WK2.

Mack

On Oct 23, 2013 12:44 PM at 12:44 PM, Song, Sheng-Liang wrote:


HI Mack,

Thanks a lot for creating the list.  I added some detail below.

For those students have ZERO linux background, you may skip these homeworks.  (You may choose this course for credit option.) 

Please review those students projects from last section, please bring project questions to class?  Up to 3 students can form as group to finish your class project. 

Thanks,

Shengliang Song

On Oct 23, 2013 12:05 PM at 12:05 PM, Sone, Mack wrote:

Hi Sheng-Liang and classmaites,

Could someone please confirm the following list?  I'm not sure if I got it right for what I'm supposed to do for WK1 and WK2 assignments;

A high-level assignment summary for WK1 and WK2

  1. Week#1 To Do list:
  2. Download and install VirtualBox on Windows running on PC
  3. Download and install Ubuntu on VirtualBox
  4. SONG: Install arm embedded compiler (gcc, git, gitk)
  5. Create git account at https://github.com/  (<== SONG: correction)
  6. Create a local repository of git on Ubuntu by following the instructions provided in e4357/hw1/git.txt
  7. Write a C program for the HW assignment and check in the code with git (HW for WK#1)
  8. (note: check in all homework to github )
  9. submit all your github link to ucsc course homework site.
  10. ==========================
  11. Week#2 To Do list:
  12. Complete Quize#1
  13. create an account at http://mbed.org/
  14. try online compile with Hello World program http://mbed.org/handbook/SerialPC
  15. export to program to IDE, and GCC
  16. create an account at http://www.arm.com/
  17. Download and install a mbed development IDE, such as Keil from MDK version 5 ARM
  18. Connect and establish communication between  mbed(LPC1768 or Freescale) and PC
  19. Load the executable code in LPC1768 (HW for WK#2)
  20. Execute a code in LPC1768 and display on a PC (HW for WK#2)
  21. Answer questions in hw2/readme.txt
  22. Read ARM Architecture documents
  23. Read Quiz#2

Thanks,

 

4357_Firmware_Essential | ELUA written in LUA

 From: Sheng-Liang Song

FYI:

   build_elua.lua: A build script for eLua written in Lua.

   The command line syntax is the same as for the old scons/SConstruct system.
   See http://www.eluaproject.net/en_building.html

   The only required option is the target board or CPU. e.g.:
     lua build_elua.lua board=mbed

   This script requires some well-known Lua libraries to run.
   To install them on Ubuntu/Debian, go (as root):
       apt-get install luarocks
       luarocks install luafilesystem
       luarocks install lpack
       luarocks install md5


 

On Oct 21, 2013 11:29 AM at 11:29 AM, Song, Sheng-Liang wrote:


http://wiki.eluaproject.net/Boards

https://github.com/elua/elua/tree/kinetis

4357_Firmware_Essential | FRDM-KL25Z is an ultra-low-cost development platform

4357_Firmware_Essential | FRDM-KL25Z is an ultra-low-cost development platform 

URL: 

http://mbed.org/platforms/KL25Z/