Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


Saragani last won the day on January 20

Saragani had the most liked content!

Community Reputation

91 Excellent


About Saragani

  • Rank
    R&D Guru

Profile Information

  • Gender
    Not Telling
  1. Multiline Text

    Shift+Enter to start a new line.
  2. error with log user

    Well, I just tried to reproduce the problem with UniLogic and UniStream 1.21, and got the same result as with 1.23 (pre-released), and the Panel R&D team leader says that this bug was fixed long time ago, even before 1.21. I know that you are using the latest version, so if you can, please try reproducing the issue with an empty / new project. Just add 2 users (one admin and 1 operator), and add one button to a screen and link it to L3. Also add a textbox and hows the logged in user, and choose either to hide the button or to have the touch disabled (with disable color). Tell me if you were able to reproduce the problem where the button gets visible / enabled (I don't care about the user name that you see in the textbox, since I already saw that it happens). If the problem does not reproduces with a new project, then maybe something with the big project that you have on the PLC is causing the bug, and in this case we might need that project for debug. Thanks.
  3. error with log user

    Suggestions are always a good idea. Some of them, get accepted and improve the usability of the software.
  4. error with log user

    OK. I'm getting the information about when and on which version it was fixed. Maybe it was fixed after 1.22 was released. Anyhow, the video shows how to reproduce the problem. I was not able to reproduce the problem where the buttons get enabled, but I do see the problem where the User Access Control Tag shows the name of the last logged in user, even though no one is currently logged it (this along with some other invalid members values in the struct, like event type, and user group), so I'm passing this to the Panel R&D team and the Q.A team as well.
  5. error with log user

    BTW, just a heads up, I remember that you have Windows 7 64 Bit. There is a Windows update that was released about a week ago, and it causes UniLogic to stop working (as a matter of fact, it is causing a lot WPF .net programs to stop working). The problem is described here: https://github.com/dotnet/announcements/issues/53 Microsoft is working on a fix, but I'm not sure when they will release it, so in case your UniLogic stops working (splash screen closes without UniLogic starting), then use one of the workarounds suggested in that link (The easiest is #1, while #3 doesn't require installing or uninstalling anything, just overwriting a file).
  6. Improvements required

    Yes, both X and Y will not be changed. Strings, Arrays and structs are always passed by ref (with pointers). And you are also correct that the function out parameters are passed as pointers (Functions are currently always returning void). If you want to affect a numeric tag or bit tag in a UDFB, then pass it as function out (or pass it with a struct, it that makes sense in the UDFB. For example, a UDFB that handles PID, then there is some logic to pass the entire PID struct, and not 20 tags inputs and outputs of single tags inside the PID struct). "in this case if I use as function_in and function_out the same variable this will be affect by the UDFB operation...right!?." Well, when you define it as function-in and function-out, then you will have 2 different tags in the UDFB, for example: _a_IN, and _a_OUT. If you only change the value of _a_IN, then it won't affect the global tag. The UDFB doesn't know that _a_IN and _a_OUT are the same tag, since one come from the stack, and the other one from the RAM by pointer. Furthermore, in one call I can call Foo(A, &A), and in other call (A, &B). I've read your post, but I'm unsure that was the request. It is passing a numeric tag as function in, but choosing if they are passed by value or by reference?
  7. error with log user

    This issue seems to be already fixed.
  8. Improvements required

    OK, lets try explaining it differently. A function is just a piece of code (instructions) in memory. Lets say that I have a function called Foo(int32 A, Int32 B); When I call the Foo function with lets say A = 1, and B = 2, and the computer pushes to the stack the number A and the number B. Then the function pops B and A from the stack (it knows that it has 2 parameters, which each of them is 4 bytes). In this case, the values 1 and 2 were placed in the stack. This is sending something by values. Now if inside Foo, I change A or B, then it won't affect the Tag that was originally sent. Now assuming that I pass something by reference... Lets define A and B. A has the value 1 and B has the value 2, A is placed (for example) in absolute address in RAM at 0x1000000 B is placed (for example) in absolute address in RAM at 0x1000004 Now, lets define Foo differently. Foo(by ref int32 A, int32 B). When I call Foo, the computer pushes to the stack 0x1000000 (address of A), and 2 (the value of B). Then when the function starts, the computer (the code) pops the value of B, and then the address of A. The code knows (by the signature of the function), that 0x1000000 is not the value of A, but that is the address. Now if I write A = A + B, then the computer would go to the address 0x1000000, take the value from there, take the value of B, add them, and then go to the address 0x1000000 and place the new value (in this case, 3) in that address. Now, because we overwrite the value that sits on 0x1000000, then the value of A outside of the function was also changed. The address of A is called a Pointer.... because it points to an address in memory.
  9. Basic HMI elements usage

    Make a circle - Currently not supported (due to lack of requests to draw a circle). Just put an image with a circle. Multi-state image - User Binary Image if you have 2 states linked to a bit, List of Images if you have an image per index, or Range of Images of you want to have an image for a number within a range, and different images for different ranges, Group graphics - Will be supported from version 1.23 (should be released next month), with some other features like Layers, and per element Lock, etc... You can use Custom Control. Custom Controls allows you to use the same control multiple times with different parameters (it's like a UDFB for screens). Add a new custom control, put the elements you want inside it, and then go to a screen that you want to use the custom control in it, and drag the custom control from the toolbox. The custom control and all of it's elements will behave as 1 unit.
  10. Add an Binary Image or Binary Text Element, and in the configuration window of that element, set the "Toggle" checkbox. Set Image for 0 and Image for 1 for Binary Image element, or Text for 0 and Text for 1 for Binary Text element Set a link (Bit) to it, and that's it.
  11. Download the attached Rar file, and extract the files to UniLogic installation directory. This means that the "UniLogic Diagnostics.exe" (and all the other files) must be placed in the same directory where "Unitronics.Shell.UI.exe" is located (usually at: "C:\Program Files (x86)\Unitronics\UniLogic\") After you've extracted the files, run "UniLogic Diagnostics.exe" and click on Diagnose. Most chances that it will show "SQL Instance" as one that has problems. In case it find problems, the "Fix" button will become enabled. Click on Fix, and the program will attempt to fix the problem, and then it will re-diagnose the problems to confirm that they are fixed. Please tell me what problems it found . Also tell me if it managed to fix the problem that you're experiencing with UniLogic (that it is stuck in loading components). Thanks. UniLogic Diagnostics.rar
  12. Improvements required

    Each tag that you create in the Global tags, has an absolute address. Passing something by reference means that the function which gets it, gets the address of that tag. Passing something by value means that not the address, but the actual value is being passed. In the "Increment" element, although the number is being passed at the left side, it is being passed by reference, since an increment is being done on the tag itself. When you write your own UDFB, then numbers and bits that are being passed as Function-In, are being sent as values. Meaning, that if you pass a number as function-in, and then for example increment it inside the function, then after you exit that function, then you should see that the value was not changed. Arrays and Structs that are sent through a Function-In, are being passed by reference, so if you increment a number inside a struct or array, then it will affect the global tag. You can also pass a number or a bit as a function-out, and then it is being passed as reference. Strings, as much as I remember, are being passed as reference. (You can check it)
  13. Improvements required

    Btw, I have greatly improved the export import speed of functions / screens etc. The export itself would now take about 3rd of the time it would normally take, so it is less slower. Please check on the next release and tell me if it improved it by much for you. We will consider having a Duplicate Function in the future.
  14. Pass the bits as Function-Out or pass an entire array or struct that contains those bits as a function-in, and the set / reset coil will still affect the values. (Passing tags by reference vs by value).