Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


Dz! last won the day on December 31 2017

Dz! had the most liked content!

Community Reputation

1 Neutral

About Dz!

  • Rank
  1. Improvements required

    I agree so much to you, 'hotwires'! Having everything pre-planned is one thing, having to modify the project from one (mostly similar) site to another "just by little" is another story. Currently I'm that far from original now, that I was forced to write entire HAL (hardware abstraction layer) to separate ever changing IO from base functionality. I hope, at least some will understand what that means to Alarms base. And, yes - having the Alarm system that sends e-mails or SMSs is another pain in the ... . I have currently written SMS system that has every alarm (>100) duplicated to it in all three languages (user configurable per recipient) with user configurable recipients base of up to 5 numbers.... "It's not that it's difficult, just time consuming". Thus having single place for configuring alarms both for on-screen display and distribution (via SMS & e-mail) would again improve productivity.
  2. Improvements required

    Nice to know the reason behind it - so let's do it the way it was designed - external edit (in Excel for example) and group (range) paste, no problem for me. Yes, I know. But it is a lot slower than simply duplicate. Actually, I assume, nothing should be checked by the internal logic at this simple yet powerful step (I mean duplication), because there is no reason to have two exactly similar functions - the duplicate function will be modified by user to some degree anyway (in turn eliminating anything that should not have exact duplicates).
  3. 1) When editing IO Inputs or Outputs Alias Names directly (from the table view, without going into window for editing single tag) - cold not put a space symbol between words while writing (later when the whole "Input5AbracadabraOpenSesame" is written, you can, of course go back and put spaces in between words finally getting to the "Input 5 Abracadabra Open Sesame"). Problem is not observed while editing in single tag editor window. This is new mis-behavior, which was not observed some versions earlier. 2) In Data Table view - String literals are center-aligned without any obvious reason, which detracts from readability of large tables. For Number literals it makes sense to have them centered within cells, which more likely adds readability rather than destroys it, but it's a different story for the Strings. 2.1) In the same Data Table view - it is unable to directly edit anything without explicitly going into editor window for each cell with double click... That's so tiresome and time consuming for large tables. Exception is direct Paste, which however helps little, if each cell is slightly different. 3) Alarms - ID's could not be freely changed... I see no obvious reason for not allowing to do that because there are gaps still allowed (by deleting some alarms in the middle) and no automatic reordering of ID's is then happening. Of course it does not change much, but adds to the overall order and clarity of the project. Thus why not allow to change them freely, of course, with checking for duplicates. 3.1) Alarms could not be moved around (between groups for example). Took me few weeks to reorder entire system of 100+ Alarms... 4) Ladder function could not be duplicated, like almost anything other could. 5) The XY Plot is wrong type of thing, or at least I need a different flavor (see attached pictures): a) XY_Beijer is the reference - a single clearly visible point of arbitrary size is drawn for each feed in data sampler; the lines referencing these point(s) to the X and Y axes are drawn (switchable on/off); the background where any arbitrary function could be drawn or at least a clear background where any arbitrary picture could be put into (switched during runtime, not statically linked); b) there is always a cause - see the Weather_compensation; c) and a workaround - see the Comfo_Uni which is far from ideal, but at least works, somehow... Why all of this - I was asked to implement Comfomatic (Weather compensation for central heating) functionality as addition to primary functionality. Typically it is done in special hardware like Danfoss ECL series controllers, however the underlying mathematics is rather simple, so why not.... It worked out - making a usable user interface is a major pain on the Unistream platform.... d) of course in ideal world, I'd be asking the Unitronics team to implement the entire functionality in specialized function block, both for GUI as well as for Ladder, however I understand there are so many uses for these PLCs that implementing separate function block for each of them would lead to the same clutter which was seen in VisiLogic series software and which the Unitronics guys were presumably trying to avoid in Unistream. e) and there is always a workaround of the workaround - or better, I call it suggestion 2: The the simple Canvas control could be added to the GUI section - thus allowing users to draw whatever they need to solve such challenging tasks... (or if the screen is already a canvas itself, then at least allow to draw some primitives - dots, lines & rectangles from the Ladder (yes I know there is a Line element in GUI, but it is static, you can not even put a variable as its X1,Y1 and X2, Y2 points... thus it's unusable). 6) Each MODBUS target has the Modbus Remote Slave structure attached. This structure has very useful variable 'Fail' within it. It could be ideally suitable for checking for communication problems, and throwing Alarm to the user if any. But what's next - user cannot clear the alarm, because there is now way to drop it to the zero (I mean, there is no way to write 0 to this structure). Yes, of course there is again a workaround - copy the contents to another variable and then compare to it, not the 0, But why always a workaround? Why not do the things right the firsthand. 7) I'm still begging for ability to reorder members of the struct, like it's done in SMS Message composition with the List Of Text Variable - simple control to move members up and down. It has no meaning while the project is little and simple, but when it becomes large enough, when various functionality is added to different parts all the time, when structs determine what is written to different tables back and forth, then keeping various recent additions together with their primary counterparts rather than at the end of the struct, could be soooo meaningful. At present its a tremendous and very time consuming job to reorder the structs, by renaming and replacing every single appearance everywhere, when it could so easy be made to happen automatically. Not to mention, that is so easy in plain C, just cut one and paste above each other... Many thanks for the product already that great (light years away from said Vision or Samba), but of course, any improvement would be warmly welcome. P.S. Please double-check the communication with Cinterion BGS2T modem - it tends to drop from time to time (worse with USB-COM, better with UAC-01RS2, but still not ideal) and then it's unrepairable till the next complete reboot of the PLC... (re-initialisation has no effect).
  4. This is typical behavior after update to the latest version with "improved" UAC (v1.21...) It even forced me to update my PLCs to the latest project software via USB flash disk rather than usual Ethernet, because it simply didn't work. Finally I chewed through this. First, you need to disable UAC, then completely remove the old passwords, and finally re-enable UAC and configure it as you wish. And ,voila, everything works as it should. The "the password for Uniapps Administrator bla, bla, bla..." error is gone. What I would like to suggest to the Unitronics team - could you do the old password cleanup step for the users automatically upon they're changing to UAC, or at least warn them they'll be in trouble if they didn't do that before proceeding to UAC world.
  5. Dear fellows, Anybody might be knowing - what type of string and what length is necessary to store IP address for IP Address Edit and IP to String and String to IP elements. Official help file is scarce on that. Additionally, are the IP fields contained within Modbus Remote Slave structs editable or read only (as primarily these get their information from Modbus Ethernet Masters configuration screens)?
  6. BSOD in Windows 10

    Confirmed to be just a single event type of a glitch.
  7. Analog Input Error

    Could it be a wiring problem? Sounds like that... Try to put your transducers on a test wiring as close to the AIs as you can. Another clue is bad/incorrect reference to the system 0V or 24V somewhere in the system. That, not necessarily has to be close to AIs. It could be as far as any voltage fed back in into digital outs. Unistream is quite sensitive on that. Check everything - any voltages should be where they're supposed to be and shouldn't where the they're not. Disconnecting as much as you can from the PLC and then step-by-step putting everything back could be helpful as well.
  8. BSOD in Windows 10

    Recently switched to v1.21.51. Know what - it crashed when opened together with project (I mean - by clicking on project file, and waiting for it to open the UniLogic via Windows file type associations). I have yet to confirm if it is repeated or just a single event. Application as well as the project opens normally if done sequentially - 1st application, then project within it. No BSODs however. That's why I counted it as minor glitch and didn't open a new thread... My box is i5 laptop with Win 7 x64 onto it.
  9. Modbus word to bit array

    I stumbled upon exactly the same problem the very first moment I begun working with MODBUS on Unistream. I'd rather disagree with the method Ofir proposed. It is nevertheless correct way how to accomplish that, however it is redundant and unnecessarily bulky. There are a lot of MODBUS devices that keep their status information (in form of bit fields) in their holding registers and receives commands the same way - by changing bit values of input registers. Not a single coil is even made available. Thus it would be very conventional way to gather whatever commands are needed via separate bits of the bit array, and wtite them to MODBUS target in single register-wide operation. Exactly the same the opposite way - read holding register directly into bit array of fixed length (8;16;32) and then use the bits for whatever they are meant for. The method Ofir proposed - doubles the amount of data storage necessary (first for storing int, then once again for storing bits), plus the unnecessary ladder elements for conversion. When doing the same thing in C it is done the most simple and conventional way it could be done - you can reference the same chunk of memory in whatever way you may imagine - as bits, as array, as ints, words, chars... I guess the underlying software of UniLogic/Unistream is written in C anyway, thus it could not be very hard to arrange the data within it the same way. So, what I'm asking for is a single change within MODBUS data definition part - please remove restriction to use Bit Array (of fixed length, or even of arbitrary length with automatic padding with leading zeros) as Tag for storage of Register transmission contents.
  10. ASCII String to MI?

    Hi! I hope someone of you, both Kings of Uni, might be able to help... The long story short - Unitronics worked hard to make protection of some piece of software a nightmare.... 1) System.CPU HW Version. Serial number returns string "Serial number" (wtf?) 2) There are three at least meaningful IDs - CPU, FPGA and Flash, from which I hope, at least one changes from system to system - but to make things harder to accomplish - all are strings as well... (of course, we have function 'String to Num', but as I said Unitronics tried hard to make simple things a nightmare) Typically I would convert them to nums, XOR them one with another, do some other trick, and, voila, have a "magic number" to compare with for each and every system, the software was put on. But not this time. 3) At least one of those IDs (the FPGA) is HEX! Thus the 'String to Num' isn't working on it. 4) Ok, I thought - let's do it the harder way - cut the string into chars (strings of lenght 1) with 'Middle of String' function (which fortunately works) and then compare them one by one with the 'hex space" ('123456789ABCDEF') which should hopefully return it's position within string, which is exactly the decimal representation of the Hex, by coincidence. BUT... The 'Find Substring' is a "do it yourself" function, because in addition to, of course, requires parameters 'Source string' and 'Find substring' it also requires 'Index in source' (which I assume, works like - Ok give me the string, give me what to find, AND GIVE ME POSITION WHRE IT SHOULD BE, and THEN I WILL TELL YOU IF IT'S THERE).... That's not exactly a 'find', that's do-it-yourself.... Or at least I have got something wrong. But I never got any meaningful result back from the 'Find Substring' function, except 255 (which, I guess, means 'not found'). Anyway, Unitronics lack ANY information on Strings.... So, I'm stuck... I could not get "serial number" because it isn't there; I could not do math on hardware IDs, because these are strings; I could not even convert them to numbers, because these are HEX, and there is no function to convert 'String containing HEX to Num'; I could not make function to convert Hex to num, because 'Find substring' is made for nothing (or at least I hadn't found a way to make it work, and there is no help describing how exactly it works). HEEEELP!