Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| 
                    freesigs:start [2011-08-23 07:13] becki  | 
                
                    freesigs:start [2011-11-16 11:05] (aktuell) | 
            ||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| ===== Overview == | ===== Overview == | ||
| - | Free Signals is a **power logic control** (PLC) in the works. It has some unique features: | + | {{http://think-deep.com/becki/favicons/freesigs.png }} Free Signals is a **power logic control** (PLC) in the works. It has some unique features: | 
| * First of all, Freesigs is distributed under the [[http://www.eclipse.org/legal/epl-v10.html|Eclipse Public License]], that means it is freely available. No dongles, no licence fees. Neither for the runtime, nor for the development tool. -- Open source for automation developers. | * First of all, Freesigs is distributed under the [[http://www.eclipse.org/legal/epl-v10.html|Eclipse Public License]], that means it is freely available. No dongles, no licence fees. Neither for the runtime, nor for the development tool. -- Open source for automation developers. | ||
| * Freesigs PLC user programs are written in [[wp>Lua_%28programming_language%29|Lua]]. This is a powerful //and// easy to use scripting language. No more awkward Structured Text or Ladder Diagrams!\\ Whats more, by using a scripting language, there is no intermediate compile cycle. You can try out your code directly. | * Freesigs PLC user programs are written in [[wp>Lua_%28programming_language%29|Lua]]. This is a powerful //and// easy to use scripting language. No more awkward Structured Text or Ladder Diagrams!\\ Whats more, by using a scripting language, there is no intermediate compile cycle. You can try out your code directly. | ||
| * Freesigs doesn't need a development environment. In fact, your web browser is the IDE. This works on every computer and operation system. No need to install anything. All you need is a network connection. | * Freesigs doesn't need a development environment. In fact, your web browser is the IDE. This works on every computer and operation system. No need to install anything. All you need is a network connection. | ||
| - | * Freesigs works event based. Even though it is possible to write traditional cyclic code, it is not recommended . Events are more flexible and effective to work with, and are more CPU friendly. See the examples below. | + | * Freesigs works event based. Even though it is possible to write traditional cyclic code, it is not recommended . Events are more flexible and effective to work with, and are more CPU friendly. Have a look at the examples below and the [[API]]. | 
| - | * Freesigs is extensible. To cope with the multitude of different fieldbusses around, the application is split into a core process and one or more IO processes (connectors). To add support for a certain fieldbus, just the IO connector needs to be written. It is not necessary to modify the core. Currently Modbus/TCP is implemented. | + | * Freesigs is extensible. To cope with the multitude of different fieldbusses around, the application is split into a core process and one or more IO processes (connectors). To add support for a certain fieldbus (or any other connector type), just the IO connector needs to be written. It is not necessary to modify the core. Currently Modbus/TCP is implemented. IO connectors can be written in any language. | 
| + | |||
| + | ===== Documentation == | ||
| + | |||
| + | * [[API]] Reference | ||
| + | * [[Install]] Instructions | ||
| + | * [[Tutorial]] | ||
| ===== Requriements - What do I need? == | ===== Requriements - What do I need? == | ||
| ==== Hardware == | ==== Hardware == | ||
| - | * Any Computer designed to run 24/7, e.g. a [[wp>SheevaPlug]] | + | * A Computer designed to run 24/7, e.g. a [[wp>SheevaPlug]]. Of course you can also use a PC or laptop.\\ {{sheevaplug2b.jpg?90|SheevaPlug}} | 
| - | * At least one fieldbus coupler (bus controller). The [[http://www.wago.com/wagoweb/documentation/navigate/nm0dc__e.htm|Wago]] 750-341, 750-342 and the B&R BC 0087 are known to work. | + | * At least one fieldbus coupler. Eg. [[http://www.wago.com/wagoweb/documentation/navigate/nm0dc__e.htm|Wago]] 750-341, 750-342 or B&R BC 0087.\\ {{wago_750-341.jpg?90|Fieldbus Coupler}} | 
| ==== Software == | ==== Software == | ||
| Zeile 26: | Zeile 32: | ||
| ===== Current State / Download == | ===== Current State / Download == | ||
| - | Freesigs is still a young project. The Modbus IO connector is completed. The core system is currently in the works. Code is available at [[http://bitbucket.org/becki/freesigs|Bitbucket]]. | + | The Modbus IO connector and the core system is completed. We can connect an arbitrary number of bus couplers, register events on digital/analog inputs and control digital/analog outputs. Timer can be used. The code examples below are working. | 
| + | The web programming interface needs yet to be done, but this is not vital anyway. | ||
| + | |||
| + | Code is available at [[http://bitbucket.org/becki/freesigs|Bitbucket]]. Bitbucket is also the place to get in contact. | ||
| ===== Code Examples == | ===== Code Examples == | ||
| ==== A latching relay in Freesigs / Lua == | ==== A latching relay in Freesigs / Lua == | ||
| + | |||
| + | <code lua> | ||
| + | -- First give the in- and outputs speaking names: | ||
| + | button1 = DI(0,0) -- digital input #0 on bus coupler #0 | ||
| + | button2 = DI(0,1) -- digital input #1 on bus coupler #0 | ||
| + | lamp = DO(0,0) -- digital output #0 on bus coupler #0 | ||
| + | </code> | ||
| <code lua> | <code lua> | ||
| Zeile 36: | Zeile 52: | ||
| -- Function to control the relay output: | -- Function to control the relay output: | ||
| function ctrl_latch_relay() | function ctrl_latch_relay() | ||
| - | -- just invert output: | + | lamp:toggle() -- just invert the output | 
| - | if bc1.do[1].value() then -- returns true or false | + | |
| - | bc1.do[1].set(false) | + | |
| - | else | + | |
| - | bc1.do[1].set(true) | + | |
| - | end | + | |
| end | end | ||
| - | -- Register the function to be called when the digital input #1 of IO device (bus controller) "bc1" rises: | + | -- Register the function to be called when button1 is pressed: | 
| - | bc1.di[1].on_true(ctrl_latch_relay) | + | button1:on_rise(ctrl_latch_relay) | 
| - | -- Register the function to be called when the digital input #2 of IO device (bus controller) "bc1" rises: | + | -- Register the function to be called when button2 is pressed: | 
| - | bc1.di[2].on_true(ctrl_latch_relay) | + | button1:on_rise(ctrl_latch_relay) | 
| </code> | </code> | ||
| Zeile 54: | Zeile 65: | ||
| <code lua> | <code lua> | ||
| - | bc1.di[1].on_true( | + | button1:on_rise(function() lamp:toggle() end) | 
| - | function() bc1.do[1].set(not bc1.do[1].value()) end | + | button2:on_rise(function() lamp:toggle() end) | 
| - | ) | + | |
| - | + | ||
| - | bc1.di[2].on_true( | + | |
| - | function() bc1.do[1].set(not bc1.do[1].value()) end | + | |
| - | ) | + | |
| </code> | </code> | ||
| - | ==== The same, even shorter == | + | As you can see, two lines of code are enough to implement a latching relay with Freesigs. | 
| - | <code lua> | + | ==== For comparison: Traditional PLC code == | 
| - | bc1.di[1].on_true( | + | |
| - | function() bc1.do[1].invert() end | + | |
| - | ) | + | |
| - | bc1.di[2].on_true( | + | <code> | 
| - | function() bc1.do[1].invert() end | + | # Check if button 1 was pressed: | 
| - | ) | + | A button1 | 
| + | AN button1_old | ||
| + | = button1_pressed | ||
| + | |||
| + | # Check if button 2 was pressed: | ||
| + | A button2 | ||
| + | AN button2_old | ||
| + | = button2_pressed | ||
| + | |||
| + | # Switch light on: | ||
| + | A button1_pressed | ||
| + | O button2_pressed | ||
| + | AN lamp | ||
| + | S lamp | ||
| + | |||
| + | # Switch light off: | ||
| + | A button1_pressed | ||
| + | O button2_pressed | ||
| + | A lamp | ||
| + | R lamp | ||
| + | |||
| + | # Save current state of button1 for next cycle: | ||
| + | A button1 | ||
| + | = button1_old | ||
| + | |||
| + | # Save current state of button2 for next cycle: | ||
| + | A button2 | ||
| + | = button2_old | ||
| </code> | </code> | ||
| + | ===== What comes next == | ||
| + | |||
| + | * Web programming interface | ||
| + | * Tutorial and install instructions | ||
| + | * Remove Glib dependencies. This allows Freesigs to run on an embedded Linux like the [[:becki:linux:wago_750-860_tips|Wago 750-860]]. With this you can use Freesigs standalone. Or you can use the Bus controller itself as controller for other bus couplers. | ||
| + | * We need a live demo in the Internet | ||
| + | * Create a Lua user library | ||
| + | * More extensibility: | ||
| + | * Possibility to work with several APIs. For this, each connector gets an API identifier assigned. Commands from an unknown API are simply forwarded to a Lua user callback. Hence the user can create new commands without changing the core. | ||
| + | * Allow Lua user code to start and stop connector child processes during runtime | ||