• Content Count

  • Joined

  • Last visited

Community Reputation

0 Neutral

About robbudge

  • Rank

Recent Profile Visitors

2,581 profile views
  1. Ok, just a Update. I have stripped the screen back and still IDLE draw time is 300ms, Active (Machine Running ) is 450ms. Now my button action is loading the required command into a string. I have a sequence monitoring the String length and then executes the string if the length >1. The first thing i noticed is the string did not always populate from the button action especially if i was using the mouse up action. When i changed the button to Mouse Down the string always gets populated. As the sequence returns the string to once executed i can verify that first the command is loaded into the string, and secondary the string has been executed. The 'Master Start' & 'Master Stop' channels are only read in the PLC and control a group start sequence. When the machine is running and the screen is busy the String Command does get cleared (So its Executed) but the OPC Tag stays TRUE not the String Command's target of FALSE. if i then switch to blank page with the buttons also on the stop command works fine. I'm confused how a Execute command running in a sequence can be effected by the screen re-draw activity. I'm going to change the priority of the Sequence to see if that helps.
  2. Ok, so offloading the command to a sequence doesn't really solve the problem as the click is often missed. so im back looking at my graphics. Question about processing time. Between Split Colors & Color threshold is there much processing time difference ? i would suspect that split color is probably the most intensive but by how much. That screen currently has 20 Objects that utilize split colors. i was thinking of changing to color threshold, or simply 3 different symbol options Green Closed / OFF, Yellow mid / active , Green Open / ON
  3. Most of the components are very heavily loaded and consist of multiple symbols and rules . shape for the background with multiple conditions and rules value with blink based on status text status, from any array. fill graphic based on value plus other items. off loading to a sequence to process the command string might be the way to go.
  4. ok, so its is a resource issue. My development the screen draw time maxes at 200ms, on the runtime we max out a 850ms when all objects are active. so the next question is how do make sure the Quick Action or the event on the buttons work correctly. One thought was to simply load the command into a string then call a function or begin a sequence that executes the command string. this would require quite a lot of work but thats my first thoughts. Upgrading the on site hardware isn't really an option, we run a Quad 2.14 ghz IP69K Stainless Steel HMI. now performance could be lower than normal as i am viewing via VNC so that is additional work. With the piece of equipment stopped the draw time is 400ms.
  5. I have a set of simple start and stop buttons. The Action is set to quick sequence and are very basic Pasturizer_Master_Start[0]=0 & Pasturizer_Master_Start[0]=1 Now i have copied the buttons to a blank page and they operate almost instantly. on the page in question with lots of active graphics the start normally works fine. once the machine is running and the screen update is busy with all the changing variables, then the stop button is very slow or doesn't work at all. I switch screens to the blank page with a copy of the buttons and the stop is instant. I suspect this is a result of the screen draw time and the quick sequence running in the same thread as the screen draw. The page is only set to update rate of 1/s so i'm guessing its the amount of symbols and values on the page causing the problem. i have a similar response to any popup windows that are called for on the same page. is there any way i can show thaw page draw time on the runtime licensed machine to verify if thats the issue. Also do you have any other suggestions without creating a sequence for every button command. Communications is via OPC with the updated DLL, its almost as if DF is so busy updating all the graphics on the screen the OPC Write gets missed or dropped.
  6. Found another problem and decided to switch to a single Master. I tried to remove the remote tags and that worked fine. But the graphic symbols didn’t detect that the tag was remote as it needs to be prefixed with the remote name. It was a nice idea. Probably just finding the limits. 3 PLC’s and 16,000 tags is probably up there. Will need to monitor the server load.
  7. Just realized , I have another problem. Is it possible from script to import a channel table. The project has ALL tags in the local database. The Cellar Master will have a connection to the BrewHouse. So the Same tag will be both local and remote.
  8. On occasion for both static text and Variable Display, we require the text to be vertical, also for variable display alignment options would be really good
  9. We are currently building a large brewery, this will consist of 3 separate HMI Masters. BrewHouse 4000 Tags OPC PLC1 Cellar 3000 Tags OPC PLC2 CIP 1000 Tags OPC PLC3. Plus a Common Client for out on the brewhouse floor. The project is currently built as single project and we 'Import' the channel table before deploying on the relevant HMI Master/Server We currently utilize start-up flags to indicate Master or Client and also in the case of the master its location. Now the interesting part. The remote client configuration does not need any local channel tables as it will create new connections to the BrewHouse,Cellar & CIP on the startup flag. Ideally i would have 3 LOCAL Channel tables, with the OPC Symbols configured, LOCAL-Brewhouse, LOCAL-Cellar, LOCAL-CIP. Then depending on the startup flags. Client, Disable all LOCAL Channels Master-Brewhouse, Disable LOCAL-Cellar and Disable LOCAL-CIP Master-Cellar, Disable LOCAL-BrewHouse and Disable LOCAL-CIP Master-CIP, Disable LOCAL-Cellar and Disable LOCAL-BrewHouse. All my Channels are prefixed BH,CIP,Cellar so I am tempted to import all 3 tables into the single project and use script to disable the specific prefixed channels when needed, just not to sure if they still get passed to the OPC Channel driver. Thinking there could be an easier way ??
  10. Hi, We HATE doing things over and over again, we have created a number of 'User' Symbols contains lots of script and on-load sequences to populate the various symbols in the group. The problem we now face, is the 'On-Page' instances are not linked to the master / User Symbol. They appear to be a simple copy. Our current project has over 100 valve user symbols. if we now wish to change the color coding for example we have to replace every single instance with the new one. Is there any work around ???
  11. Wa Already looking into Json Conversion, DO you have a Sample Json, or Sequence ???? On a Initial test I get a Class_Not_Found Error. Also I can't find a command to request the class members / Sub members to start building the channel table. I have also started to build the class list directly from the XML, with the hope of building the Channel table that way
  12. Due to having large projects 5000+ Tags, Codesys OPC Configuration is via a Symbol XML file this is a structured file with Class types and class instances. We use another HMI Package to Import the Codesys OPC Symbol File and basically turn it into a flat list. We then export the flat list as a CSV file. We have built a Sequence with DAQ that deletes the channel table and rebuilds it from the CSV file, Placing each Class instance in its own Group. We pre-specify the OPC Connection path This works really well but is very cumbersome. We are looking into building a Sequence from scratch to parse the Codesys XML directly, but before we spend a week designing and testing. Has this already been done ? is there a easier way ?? I was looking if i could browse the OPC Server Directly from with a Sequence almost like channel.ListAll , But OPC.ListAll ?? 92780517-18.Controller.Application.xml
  13. robbudge

    Local vs Remote Scripts

    I think i found it BeginSeq(Local.SequenceName)
  14. I am just testing my project operating with with a remote Client. My Default Connection is to the main server. Initially my project had a 'Screen Load' Script that would populate the screen objects with the required indexed Channels say Motor_0_Speed where _0_ would be the index. The buttons would simply call BeginSeq(Screen x Load). We Quickly realized that scripts ran on the Default connection and resulted in a screen change on the server. the code was moved to a Onscreen symbol, then the Component RedoLoadevent Was called to populate the screen. This works well. The problem i now have is Global Variables, Well more importantly Global Class Variables. On one page i have a sequence that turns Pump_0_Volume , Pump_1_Volume , Pump_xxx_Volume into a class that contains the array Pump[x].Volume. This is then used in a Table Screen component with lots of other indexed data turned into an array. The question is how do I run a sequence on the Non Default Connection. From with DAQ, From with DAQ I can right click and Begin Sequence Manually and all works well. I was hoping for a command like 'Local.BeginSeq(xxxxx) but i could not find one. I don't really want to be passing all my class information into a V.Channel.
  15. robbudge

    class being destroyed from edit box

    For some reason that only works once, fails on the second click