ClassicLadder Changelog

What's new in ClassicLadder 0.9.101 Beta

Jul 31, 2017
  • Fixed random crash at startup if menu "view symbols windows" was checked (saved in .classicladder_prefs) - Because of
  • NBR_SYMBOLS undefined, now create blank lines when intializing window with NBR_SYMBOLS_DEF constant.
  • In function POW(a,b), should return 1 if b=0. Now corrected. Reported by Salvatore, thanks to him.
  • In monitor for distrib Linux version of target, if "/etc/lsb-release" not available, read "/etc/debian_version" instead.
  • Removed USE_TELINIT_TO_REBOOT_HALT define from classicladder.h to select between "telinit" or signals (with kill()) on
  • init process to reboot/halt the embedded target, and directly use "telinit" command if available.
  • Inverted GPIO leds (life/user) in classicladder.h for ClassicLadder_PLC_Arietta hardware card.
  • Can now modify /etc/hostname in network config window (usefull for Bonjour discovery service)
  • Replaced checkboxes for outputs by lamps off/on images (looks like an "out" and not an "in", without possible user
  • action...) - Judicious suggestion by Philippe Lagarde for learners students.
  • At startup afted loaded events log, write "1" to bool vars with corresponding pendings events (not previously finished).
  • Done to avoid to end/create a new event at startup...
  • Added menu View / "Syslog Linux debug" (uncompressed transfer, and then opened as text file with external associated
  • utility)

New in ClassicLadder 0.9.100 Beta (Aug 10, 2016)

  • Reorganized Period/Sizes/Info tab in config window (major parameters on 2 columns + vertical separator, to have window less high).
  • Added optional #define HARD_LIFE_USERS_LEDS_CMD_INVERTED in classicladder.h to choose logic command of leds (inverted on my x86 PLC).
  • Fixed bug after doing "new project" impossible to edit because project not refreshed (state in "load") if not a run/stop done... since v0.9.020?
  • When "edit" in popup menu selected, put edit window in front (usefull if hidden...)
  • Sequential not displayed with active elements colored if in edit or not running (as already done in ladder).
  • Size of elements in sequential sized from 16x16 to 32x32 so that all cases could be used without overlap (for variables
  • transitions displayed).
  • Fixed cosmetic sequential bugs when drawing steps activated/desactivated simultaneously if left step not aligned with top
  • transition (seen in example_sequential_3).
  • For sequential can now reuse 'comment' field entry, only ladder before.
  • Added maximum scan execution for real-time stats.
  • In log events windows, added at the bottom a checkbox option "show only active events" (ones not ended).
  • On target monitor timeout on master, added asks resets to avoid for example a waiting reboot at next connexion ! :-(
  • (seen during hard reboot test of the Arietta card, without reply frame sended and so received...)
  • Added "halt target" menu (with sub-menu reboot/halt) + modified exiting monitor request command "RebootTarget" with new halt
  • option parameter.
  • Possibility to use "telinit" command (with "6" or "0" parameter) to reboot/halt the system. New define available
  • USE_TELINIT_TO_REBOOT_HALT in classicladder.h + different signal on init when using it for "halt" (instead of default "reboot").
  • For bools vars spys window switched layout to table (instead of many vbox/hbox).
  • When start to edit, close search bar. And during edit, not authorized to open...
  • When using rtc device to read time (set in classicladder_prefs), if failed to open "/dev/rtc", try with "/dev/rtc0" (Arietta).
  • Outputs coils with their var "setted" were not displayed with the blue rectangle element on it and real state...
  • GTK3 COMPATIBILITY MODIFICATIONS:
  • replace many (GtkSignalFunc)function by GTK_SIGNAL_FUNC(function)
  • use gtk_dialog_get_content_area(GTK_DIALOG(pDialogBox)) instead of direct vbox access in GTK_CONTAINER(GTK_DIALOG(pDialogBox)->vbox)
  • use gtk_dialog_get_action_area(GTK_DIALOG(pDialogBox)) instead of direct vbox access in GTK_CONTAINER(GTK_DIALOG(pDialogBox)->action_area)
  • gtk_tooltips deprecated, replaced with direct and easier gtk_widget_set_tooltip_text( )
  • function declaration SignalPageSelected( GtkNotebook * notebook, "GtkNotebookPage" => GtkWidget * page, guint page_num, gpointer user_data )
  • in manager window, switched old obsolete gtk_clist to use gtk_tree_view...
  • some gtk_signal_connect_object() => g_signal_connect_swapped()
  • gtk_combo_box_text replacements (just #define for now in 'classicladder_gtk.h'... so that can still be compiled on GTK versions < 2.24)
  • gtk_widget_set_usize() => gtk_widget_set_size_request() or deleted...
  • in edit toolbar, if compiled for GTK3 using Cairo Surface instead of GdkPixmap to create gtk_image displayed in radio buttons.
  • and many others (easy) deprecated (directs) replacements by viewing Gtk "V2" documentation !
  • for now, SOME REPLACEMENTS ARE JUST DONE WITH #define see classicladder_gtk.h - to clean-up in the future !
  • lot of warnings presents...! but well that's compiling!!!
  • Included precompiled Linux binary executable still compiled with GTK+2, see README.txt if you want to compile a GTK3 version !

New in ClassicLadder 0.9.30 Beta (Jan 19, 2016)

  • Compatibility with Xenomai 3 (Cobalt), big rework for tasks init and set cycle period using timerfd for Linux and Xenomai3
  • (based on "demo_periodic_thread_posix.c" example)
  • Added near logic task duration of last scan, info of nbr ticks missed in 'logic' periodic task when running in real-time.
  • wiringSam library use for I/O hardware (for Atmel AT91Sam9 as in the Arietta of AcmeSystems), files directly added to the project.
  • Do not add CR after CTRL-Z marker for end of SMS text (should not be send, and can trouble some models of modems differents than
  • good old Wavecom used and tested).
  • For print, sequential wasn't using full width page.
  • For print, not only "current section" but also "all sections" choice possible. new options tab added in printer window.
  • Can print new pages with symbols defined list, added in the new print options tab.
  • If no project loaded at startup, sections manager list was not updated (to have default ladder "Prog1" displayed), and so could
  • crash if someone have the bad idea to click on "properties" ! ;-)
  • Fixed possible crash on exit in modbus master thread if InfosGene (pointer) read but already freed (NULL).
  • Renamed "sources" directory as "src" (because I've already another mais "sources" directory, so easier for me...!)
  • Added vertical scrollbars on some tabs in config window and add 2 subs tabs with just one main "physical I/O" tab.
  • After loading a project, set vertical lift of symbols window at top.

New in ClassicLadder 0.9.23 Beta (Jun 1, 2015)

  • Moved all sources files and Makefile in a new sub-directory "sources" (easier now for users to see txt docs presents in the root ! yes they are somes...)
  • Trouble with vars %S40 & %S41 (system vars for modem) displayed as "???" because of bad init in vars names list array, fixed.
  • Display trouble on sizes tab in config window, fixed.
  • Sometime could crash when displaying log book events just transfered from target (because not using g_idle_add() in a thread !)

New in ClassicLadder 0.9.22 Beta (May 16, 2015)

  • For project infos, added comment field with possible multi lines.
  • New functions blocks 'Registers' (stacks) to store/unstore many words values series in FIFO or LIFO order.
  • 2 new sizes parameters : nbr registers + queue size per each register (same for each).
  • Data series stored in each register could be downloaded from menu View/RegisterContent => open a requester to type register number => download csv file and open it with default application.
  • For transfer file, added a sub-number file info (for register number choice with one type file).
  • Added a warning message if in current edit modifications, and project save asked !
  • If in 'stop', stats for modbus/master slaves where not correctly initialized (strangely was crashing when recompiled for Raspberry )
  • Now doing an init on stats when switched in 'run'.
  • Many abnormals SEGV on exit. fixed (perhaps? caused by free() with NULL on pointer done in v0.9.020) by adding a little pause before really ending (time to let running threads to exit)
  • In vars_system.c, ioctl( DeviceRTC, RTC_SET_TIME, tm_return => &tm_result )
  • In edit.c, for FullDeleteElement(), SEGV when deleting an element on third line (y=2) and last column (during verticals links cleanup).
  • Also modified select( 16, => FileDecrip+1, ... for serial (Linux) and modbus/master (socket/IP).

New in ClassicLadder 0.9.21 Beta (Jan 26, 2015)

  • Error on latest version released in 'DEBUG' so very big executables and without SEGV trap... (DEBUG not put in comment in Makefile).
  • Added a #warning if compiled in DEBUG now ! ;-)
  • Modified bad decimal calc stats frames/secs average for modbus/master.
  • Modified default GPIOs used for life/use LED on RaspberryPI, 27 and 17.
  • In monitor server, modified select( 16, => FileDecrip+1, ... somes should be done elsewhere
  • Now using wheel mouse and up/down, pages up/down and home/end keys to scroll view.
  • Shortcuts for right popup menu with ALT+xx keys.

New in ClassicLadder 0.9.20 Beta (Jan 6, 2015)

  • Cleanup of monitor log not working on target. bad speed test with one exec (so not really tested in fact...) in previous version, corrected
  • Totally review malloc/free datas, splitted static infos and dynamic sized project datas, so that can be used after each project load
  • set NULL each pointer after free() call done on it (and discovered following bug with that...)
  • Rewrite to avoid double malloc/mbuff_alloc/free huge parts, but using one commun functions MyMalloc/MyFree
  • So now each time a project is loaded we alloc datas with size configured for each in the project
  • Be carefull, not adapted for running in a "old-school" rt kernel RTLinux/RTAI module! but by the way, were still working?
  • No more used since a long time (for me...) since Xenomai!!!)
  • After project loaded, take into account new periodic values configured for tasks
  • Found a bug at gtk exit (reading InfosGene data just freed before !!! now segfault with NULL pointer on memory freed)
  • Bug when adding/inserting a rung with no more free rung available... now display an error message, and no more in edit mode
  • In target infos tab (of free vars windows), added embedded disk use/free/size (#DEFINE EMBEDDED_DISK_DEVICE_STATS in classicladder.h)
  • When reading set vars list, added a security to verify if not a var no more allocated in this project (out of size nbr inputs
  • or outputs configured)
  • In config window for nbr elements, added memory sizes of elements after "current alloc="
  • When connected to a target: added warning message when close main window asked, and new/load project no more allowed
  • Modbus/master slave stats, moved its display at bottom on new modbus/master monitor window
  • Also open config window no more allowed when connected to a target (now that modbus stats displayed moved...)
  • Failed to reveive a project from a target if no project loaded before (missing TmpDirectoryRoot init)
  • Now InitTempDir directly done at startup (before only loading/saving a project)
  • In modbus/master, for each slave added stats average of nbr frames exchanged per second

New in ClassicLadder 0.9.14 Beta (Sep 29, 2014)

  • When starting with project not existing (setted in prefs), version param string corrupted. Bad init fixed
  • 4 frames log windows more (for modbus/master and monitor slave IP&serial and modbus/slave)
  • added 'Copy to clipboard' button
  • frames log buffers added (that can be read from a connected target with an exported ascii/gz file, very usefull to look at
  • what is exchanged on embedded target! before we had to relaunch classicladder in a telnet session and look at printf messages...)
  • when target connected 'clean up' in frames log window reuse JSON frame "CleanUp" request (before only for the 'events log')
  • problem if --version or --help parameters in line command, were not exiting correctly (missing LaunchExternalCmd child end)
  • Added RaspberryPI GPIO access, new "Raspberri_GPIO" type in I/O config window
  • using WiringPi library. Pull-up activated on inputs
  • Added I/O config lines (from 5 to 15), as with RaspberryPI generally one line = one GPIO (not consecutives)

New in ClassicLadder 0.9.13 Beta (May 30, 2014)

  • For remote alarms, bug and limit in global flags sets: SMS only usable on slot '0', and emails on slot '1'... was just working ok with my first example! fixed.
  • Initial pipe/fork added at start of the main to launch external command like 'mailsend'
  • else not working when embedded with Xenomai)
  • To send email, use login/password authentification if defined (parameters never used before...)
  • Optional code PIN can be used with modem (for both slave and master).
  • Added 2 DNS servers in network config.
  • Little code rework: added function InitRung() common for InitRungs() and InitBufferRungEdited()
  • Init sequential elements (steps/transitions/comments) of a page deleted.

New in ClassicLadder 0.9.12 Beta (May 30, 2014)

  • Bug with monitor protocol, if setting to 0 an input/output already setted to 1, or setting to 1 one already to 0. fixed.
  • Save/load events log datas (in binary) + mutex added + cleanup after parameters loaded
  • when connected to a target can be transfered with monitor file transfer (csv/text gz compressed file save).
  • Added buttons "Refresh", "Export to csv" and "Clean up" (with monitor frame required if target connected) in log events window.
  • Save in preferences, check state of 'Display Symbols' in the windows.
  • I/O conf file read, added security if one day more line than planned in memory.
  • Added infos project site & company.
  • SMS & emails remotes alarms. For email, external command "mailsend" required in /usr/bin (https://code.google.com/p/mailsend/)
  • SMS send tested with a Wavecom chip modem.
  • Longuer comment possible in rungs (29 chars (more exactly bytes!) before, now 99). If used, new tag in file save to not overflow
  • in old versions + fixed possible overflow with accents characters using 2 bytes...
  • Arithm eval (in operator block), character conflict with '^' used for new xor (added in v0.5.5), but it was already used as POW
  • operator... Now POW(a,b) is a function and gives correct results ! Reported by Salvatore.
  • Added Xenomai version (if available) for target infos.
  • Updated cJSON library with latest version available on SourceForge, and modified again to not use float/double numbers
  • to avoid libm dependancy).
  • Config hardware for outputs done, even if checked that should be done only for target. Fixed.
  • Modified to avoid a mode switch under Xenomai with new/end event (with get time).

New in ClassicLadder 0.9.11 Beta (Feb 5, 2014)

  • In monitor connect window, added timeout widget entry to adjust timeout wait reply (usefull when using low serial
  • speed, modem, ...)
  • Can use PSTN/GSM dialup modem with Hayes AT commands for serial monitor (on slave serial link, and for master connection).
  • New tab "modem" in configure window to set AT sequences for slave monitor and master connect.
  • New menu entry, to be able to run logic only for one cycle, or freeze current running (when freezed, current rung status
  • displayed).
  • Added exit() in end with ctrl-c handler. Else was crashing on exit.
  • If no coil on rungs, and set/unset vars, blue background not refreshed to know that the var is setted. Fixed.
  • If previous project monitored has modbus slaves, and current project none, at a time, monitor asking modbus slaves stats in
  • loop, and nothing more. Fixed.
  • New window to set monitor serial config (port name, speed). port can be blank to let a port available for other function
  • modbus master, future modbus slave?, ...)
  • For this, added new monitor frame to be able to set speed and serial port name.
  • easier instead of having to edit 'classicladder_prefs' file with vi in telnet!)
  • In Gtk config window, new option in 'misc' tab, to auto adjust summer/winter time.
  • Moved from monitor protocol code to set time clock (Linux & Rtc) in a function to be used per auto summer/winter time
  • code to do summer/winter time switch.

New in ClassicLadder 0.9.10 Beta (Nov 2, 2013)

  • Modified some debug messages in serial port functions.
  • Optimized monitor protocol frames to be shorten (less bytes to exchange). interesting on serial link...
  • Frames the most exchanged now rendered in JSON without format (no space, no tab, no CR... a little harder to read if needed
  • but really shorter!)
  • Theses frames are no more compatible with previous version, you will have to upgrade embedded target version to be able to
  • continue to monitor it!!!)
  • In monitor, if a 'unknown' request asked received, now the slave add "ReqError" attribute so that the master knows that the
  • request has not been treated...
  • Calc rung, only lines used (also now used by monitor).
  • Set/unset inputs/outputs: new buttons for that in bools vars window, blue backgroud when a var is setted. When connected to
  • a target, do it on it with a new monitor frame!).
  • On rungs, displaying with blue rectangle elements which var is setted.
  • Modified end (removed exit() in function to end all).
  • After monitor decnx of the target, init all vars and update display.

New in ClassicLadder 0.9.9 Beta (Aug 23, 2013)

  • When closing config window, do not try to set ioperm() for physical i/o ports if option "Use real physical inputs/outputs only on the embedded target" is checked...
  • Label/comment entries disabled per default if no project loaded.
  • Cleanup label/comment data of an old rung reused when adding a rung
  • With monitor, when setting time even if RTC device selected, also set Linux time clock (useful for dates on filesystem!)
  • For sequential, if step is an init (or not) displayed in the properties (on a new line property True/False), and can be modified directly here (better as some bugs remaining in the edit when deleting elements...)
  • For trying to advance debug in sequential edit, displaying internal infos of transitions in properties (steps lists can be manually edited)
  • Properties strings that are not editable are now disabled!
  • Monitor timeout for serial now use same time than in IP (longer only when transfering files).
  • 38400 serial speed per-default in monitor window.
  • In sequential, bad highlight of transition with � variable.
  • Sequential, now 32x32 elements (instead of 16x16). Does not cost any more memory (steps and transitions stored with coords)
  • Sequential, destroy step ok (for transitions) if not first one of many steps activated simultaneously.
  • Sequential, now correctly displaying jump cross step where there is a transition on top of it
  • Monitor slave in serial, not pause if some characters received (even if frame not complete).

New in ClassicLadder 0.9.8 Beta (Jun 22, 2013)

  • Get an error message, if abnormal "incomplete" project loaded (we can have the case with ClassicLadder/Windows running
  • with an old zlib version, when loading zlib compressed project transfered from target).
  • Also now testing if seen end tag line = project file really complete.
  • Fixed bad 'week of day' value on a target using RTC (always sunday).
  • Added max string length test in symbols convert functions.
  • Save in preferences, latest state selected (so that ClassicLadder starts back with project loaded and stopped if wanted,
  • instead of always in run after project loaded!)
  • When upgrading a target from 0.9.7, you will have to set it to "run" with monitor one time...
  • New %QLEDx variables available. %QLED0 = Green info led on the ClassicLadderPLC hardware.
  • Modbus master stats available for a target added in monitor protocol (just displayed in the console for now).
  • Avoid second launch in run script (test if already running).

New in ClassicLadder 0.9.7 Beta (May 10, 2013)

  • Can use RTC device to get time clock (preferences file) + new thread "not real-time" to read time (RTC or standard Linux time) then copied in logic thread for system vars (that can be real-time).
  • RTC also used in that case when set with monitor.
  • Missing search init (can be seen if search next/previous without new search at start).
  • "Embedded in code" Icons for windows and cursors during edit
  • Popup menus with right click button available to edit and select element to add.
  • Selecting also current element in toolbar window (if opened).
  • New beautiful toolbar (instead of old basic buttons) in sections manager window
  • New network config window + monitor frames required with target (manual reboot required to be taken into account).
  • Can use in priority preferences file /etc/classicladder_prefs if available.
  • Added current time clock info before each monitor frames displayed.
  • Added scripts to run/update target in the embedded archive.

New in ClassicLadder 0.9.6 Beta (Apr 22, 2013)

  • Fix many trouble with g_idle_add() usage (a function called by it should return FALSE to be done one time only!)
  • In monitor transfer, uncommented and fixed pb 100% cpu usage after displaying message in status bar...(read before!)
  • Review refresh of button "run/stop" from monitor.
  • Second time monitoring, the "run/stop" for the target state was not refreshed.
  • In monitor, can also transfer an embedded archive soft to easily update a target (at end of transfer an update script can be launched)
  • Do not refresh status bar, in case of no ladder element properties when mouse outside of current rung (to get displayed current message)
  • Removed 'hardware' word in error messages title (also used for monitor...)
  • Was not stopping logic before doing "new" project. fixed.
  • In monitor, can modify variable value of the target (from window "free var spy").
  • Fixed life led: if not also used in an outputs register + keep logic in stop if no project loaded per default (case for embedded).
  • When a program including i/o access transferred (and ioperm() on theses i/o not already done), was crashing when setting target in 'run'.