SoapBox Snap version 2016.05.15 Released

With more users come more bug reports (thanks Reza!) so this release includes two useful bug fixes:

  1. A few people have been complaining about an error when compiling the ArduinoFirmware.ino sketch about the timerISR function. It only showed up on some computers. This version fixes that bug.
  2. There’s a bug where, if you link an output to an internal coil, and then delete the internal coil, the saved file can’t be opened again. This version provides a work-around where it breaks the link upon opening it, which at least lets you get to your program and fix the problem.

I’ve also added a new Up/Down Counter instruction. This instruction works a bit differently than the Count Up and Down Down timers. It counts up on the rising edge of the rung-in condition. It has a separate Count Down input which causes the internal count to decrement by 1 with each rising edge. It also has a Reset input, which sets the internal count back to zero (and it’s reset-dominant, so as long as Reset is on, it ignores the Count Up and Count Down pulses). The rung-out (or output coil) is on when the internal counter is zero, and false otherwise.

You can download the new version over at the SoapBox Snap Project Page.

No Comments

Remembering a Number in SoapBox Snap

Traditional PLCs let you peek and poke at memory addresses directly with commands like MOVE, etc. In SoapBox Snap, the ladder language is designed around a more strict Functional Programming model, but that doesn’t mean you can’t conditionally latch a number into a memory location.

Let’s examine the case where you have an analog input (A0) and you want to capture the value of A0 on the rising edge of one of the discrete inputs (pin2). The Choose Number instruction acts like a memory register if you set the second numeric input to itself:

Choose Number instruction as Memory

Take a look at how the Choose Number instruction selects value A0 when the input turns on, but otherwise chooses its own value. This creates a form of internal state, similar to a sealed in coil.

No Comments

SoapBox Snap version 2016.01.03 Released

Happy New Year!

An astute SoapBox Snap user pointed out a problem with the counter function blocks in the Arduino Runtime over the holidays (thanks Miguel!) and I tracked down the bug and fixed it. The bug was there all along but only seems to cause problems on newer versions of the Arduino compiler.

Please download version 2016.01.03 of SoapBox Snap and make sure you download the Arduino Sketch to your board to get the fix. You can get the latest download on the SoapBox Snap product page.

This version also fixes a bug in the new Export Signal Table function of the Arduino Runtime.

No Comments

New SoapBox Snap Feature: Signal Lookup Table for Arduino Runtime

SoapBox Snap version 2015.11.01 has just been released, with a bug fix (dragging and dropping an instruction to the left of itself could cause an editor crash) and a new feature: the ability to export a lookup table of signals and addresses to a CSV file (for the Arduino Runtime).

If you’re using the Arduino Runtime for SoapBox Snap and you want to hook it up to something over the serial port, you’ll need to be able to read and write signal values. Due to space limitations in the Arduino, storing the lookup table between signal name and address is just too costly, so there was no easy way to figure out which address your coil signal was in. This release adds an Export Signal Table feature to solve this problem.

Go to Tools -> Options… and find the SoapBox Snap Arduino Runtime options page. Check the box called Export Signal Table, and enter a (fully qualified) directory where you want the table exported to. Now every time you do a download of your program to the Arduino, Snap will create a CSV file listing the address, signal type, signal name, and the comment. Now you can lookup which address corresponds to which signal name.


No Comments

Program an Arduino Mega with SoapBox Snap, including Analog Outputs

SoapBox Snap version 2015.01.11 has just been released! You can download it from over at the SoapBox Snap Project Page.

This version adds support for the Arduino Mega, meaning you can now have a whopping 16 analog inputs and use all the way up to pin 53 on the Mega board. The Mega also supports almost 5 times as much space for your ladder logic program and more memory for discrete and numeric (i.e. analog) signals.

Additionally I’ve added support for analog outputs (for the Uno, Nano, and Mega). On the Uno and Nano boards, pins 3, 5, 6, 9, 10, and 11 are configurable as “PWM” (i.e. pulse width modulated) outputs. On the Mega board you can use pins 2 to 12 and 44 to 46. SoapBox Snap now supports configuring these pins as PWM outputs (using the new config-pwm command) which will make the pins show up under the Analog Outputs list rather than the Discrete Outputs list. In your ladder program, you can control these analog outputs by connecting a signal and driving it with any value from 0 to 255, and the output will vary accordingly.

I’ve updated the SoapBox Snap Arduino Tutorial.

No Comments

Program an Arduino UNO or Nano in Ladder Logic

SoapBox Snap version 2014.07.06 has just been released! You can download it from over at the SoapBox Snap Project Page.

This version adds an Arduino runtime, meaning you can now download SoapBox Snap ladder logic programs to an Arduino and use your Arduino like a PLC. Currently it’s compatible with the Arduino UNO and Nano boards (R3). The SoapBox Snap download includes a firmware sketch (written in C++) which you’ll have to upload to the Arduino in the normal way.

To get you started, I’ve written a complete SoapBox Snap Arduino Tutorial.

As usual, SoapBox Snap, and the SoapBox Snap Arduino Runtime code, is released as open source.

Note that this version of SoapBox Snap no longer has the Game Controllers module in it (due to installer issues). That means the original soft runtime won’t support joysticks and other game controllers.

No Comments

Ladder Logic on an Arduino UNO – a Sneak Peek

Here’s a sneak peek of the next SoapBox Automation project: adding an Arduino runtime for SoapBox Snap. That means you can use an Arduino just like a PLC, including forcing I/O and online debugging. Here’s a picture of the ladder diagram while online with the Arduino:

Arduino UNO Ladder

…and here’s the Arduino test circuit:

Arduino UNO Running Ladder

The initial version will have support for the UNO (R3) and the Nano (R3) versions of the Arduino boards. The ladder logic is stored in the internal EEPROM of the chip.

As always, all of the source code, including the Arduino sketch that allows it to act like a PLC, will be released as open source under a GPLv3 license. More will be coming soon.

No Comments

Control Insteon and X10 Devices From .NET

Have you ever wanted to control your lights and appliances from a .NET application? We’ve just released a new .NET library called FluentDwelling that makes it really easy to write a .NET application that interfaces with Insteon and X10 devices using a SmartHome 2413U:

It’s designed to be really easy to use:

DeviceBase device;
    .TryConnectToDevice("55.55.55", out device))
    // support auto-discovery of device type:
    if(device is LightingControl)
        var lightingControl = device as LightingControl;
    else if(device is IrrigationControl)
        var irrigationControl = device as IrrigationControl;

It’s free and open source! Go get FluentDwelling now!


No Comments

Problems with 64-bit Operating Systems

If you tried SoapBox Snap with a 64-bit operation system and had a problem, we apologize. If you try the new download, it should work better for you.

No Comments

Use PC Game Controllers as Input Devices

We’ve just put a new version of SoapBox Snap up for download (version 2011.03.01). This version adds a new I/O driver for DirectX compatible game controllers.

If you have an old joystick, racing wheel, or game pad for your PC lying around, you can now use it to drive discrete and analog inputs in your SoapBox Snap ladder logic program. SoapBox Snap will automatically detect your game controllers the same way it auto-detects Phidgets devices:

  1. Connect to the runtime
  2. Under the runtime node, right click on Device Configuration
  3. Click the Read Configuration option

That forces you to disconnect from the runtime after reading the configuration. You can just re-connect and choose to download your application if you want to try it out right away. You will be able to see the discrete inputs light up when you press the buttons on your controller. To see the analog inputs (axes) working, you’ll need to use those somewhere in your logic.

What’s next? New drivers for even more I/O hardware… stay tuned!


No Comments