Jump to content

tmoulder

External Moderators
  • Posts

    196
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by tmoulder

  1. As a further test, I repasted everything into the new project and opened the original pasted list of text and checked memory usage in the dialog. After this, everything was fine. Possible work-around if anyone else is seeing this problem. Thanks, TM
  2. Greetings all, Running Visilogic 8.6.3 on Windows XP. I decided to restart my current project afresh, so I created a new project, copied the buttons, frames, images and list-of-text from the main screen of my old project, and pasted them into the main screen of the new. I then went to set my background image and got the following error: Run-time Error '3021': Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. This is followed by another error on any attempt to change from the current HMI page: Run-time Error '-2147418105 (80010007)': Automation Error The callee(server [not server application]) is not available and has disappeared; all connections are invalid. The call may have executed. Followed by Visilogic crashing. I recovered from the crash and "cut" the buttons from the screen, then I could change the background image normally. I re-pasted the buttons and deleted the list-of-text variable and this allowed me to change the background normally. I then created a new list-of-text and could still change the background. It seems like something may be messed up in the list-of-text variable, at least as regards copy-paste, that is impacting the background image. Thanks! TM
  3. Greetings all and Happy New Year! I'm poking around some more on trending, and I saw again something I would like in this feature. My current project involves recording the lifespan of a product under test. I'd like to record the processing time of each test cycle, and trend the results on screen. Unfortunately, trending is strictly time-based, and these tests can be several minutes long, and as the product wears, duration increases. This could be solved with an operand that, when transitioned low to high, would input a data point into the trend. Basically, a "manual record" feature. Thanks! TM
  4. One more observation: In the source program, I linked ML 400 to an INC FB with a 1 sec pulse to change data for testing purposes. I've since tried it linked directly to a rail, and the buffer quickly overflowed, despite constant SD writes. The 100mS pulse worked fine, and gradually brought the buffer down as well. It may be my card is not fast enough, but it looks like 100mS would be the best write speed, since you do want the buffer to eventually empty out. Thanks, TM
  5. Hi guys, As far as the File Info FB, I couldn't get anything from it besides a status of 16 and a success bit going high, everything else was "0". I shut down all SD Write operations and toggled the FB manually, and that was still the result. I was a little confused by the busy bit on this command, it uses (and requires at compile) SB 359, the Folder Report in Progress bit to control itself. However, there is also SB 343, File Report in Progress, which appears to be unused. After exporting the various parts of the program for further import, I then imported them into a blank program to make sure everything came in and started properly. The only problem I saw then was in the View SD Contents object, the Folder to View (set to Excel 1 in the source program) was blank. I made a note of that and published. Later yesterday evening, I tried importing the code into one of my own programs. This time, the View object's folder was randomly set to 100 (DT1). Lastly, a bug report of my own - in the Data Tables Copy Rows function in Net 23 of the source, the Target Row Number operand is set to "MI 0". This should be a constant "0". It didn't produce a problem in the test program, since MI 0 wasn't used for anything. Updated module attached. Thanks, TM SD Card with Buffer Rev 1.zip
  6. Attached is a program that writes a vector of 10 ML to the SD card as excel CSV data via a Data Table that acts as a buffer. This allows you to remove and re-insert the card without losing information. I developed it for my own education, and wanted to share. In the Read Me text are instructions for importing it into your own program, including used memory ranges, and some important info I discovered along the way, so be sure to read it. A couple of notes from the readme - I was unable to get the File Information FB to work, it always returned a status 16, so I did not use it. And there seems to be a bug in exporting / importing an Explore SD Contents screen object, the folder to open does not come across, and must be assigned manually (Excel 1, by the way). Enjoy! TM SD Card with Buffer.zip
  7. Thanks Emil! I'm trying to create a data collection function to store to SD. My original plan was to create a file each day based on RTC. But with the 64-file limit per folder, this was becoming very complicated (check folders, count files, route to this folder or check the next, etc, etc. One suggestion - It would be splendid to do away with the File Report FB and somehow roll that function into System Operands that update periodically, like the capacity count does now. Thanks, TM
  8. Hi All, When writing an excel CSV delimited line, what's the largest the csv file can grow on the SD card? Thanks, TM
  9. Hi Stein, In the image attached, the excel-looking cells are 4 copies of a .PNG file I created to get a nice, clean layout of a mass of servo-related data for display. The text elements in this are not Text objects, they are binary text variables. If I place a standard (non-variable) text object over the bitmap, when I download it to the 570, the text is "hidden" behind the bitmap and invisible on the PLC screen. If I use a text variable, linked to SB 0, then the text displays correctly as it does in the image I attached. But I don't like doing this, because it's a variable, when all I need is text. I thought that the HMI Draw Order Utility would allow us to address this, by telling the PLC to draw the bitmap, then draw the text over it. Draw Order does allow me to change this, but it has no effect on what's displayed on the screen once downloaded. Thanks, TM PS: I've discovered that Tahoma is a really great and legible small font for the 570. Just wanted to share...
  10. Sorry, couldn't resist I've been wracking my brain about this, and was wondering if anyone has tried it - or perhaps if it's even necessary. I'm working on a project where data is to be stored by the Vision to an SD card as an excel file (.csv if fine). Periodically, the user would remove the SD card to collect data. Simple, right? But when the card is removed, the system may continue to run, and I don't want to lose any data. My first thought was to use a data table as a buffer. Data collected goes into the buffer, and when the buffer is full, write to SD card, wipe the table and restart from the beginning. Simple, right? Thing is, it seems from the docs that I can write a DT to an SD, but not in the form of a CSV. It's two separate functions. And I don't want the user to have to convert the DT to a CSV via SD Suite, because that's one more piece of software and one more step to getting their data. It occurs to me I could read each row of data out of SD into operands, then write that line to CSV, then repeat. I get the sense this could take a long time to accomplish with a substantial buffer DT full of ML values, and my gut tells me this could be fraught with pitfalls. Is there a utility somewhere I am overlooking that writes DT to SD as CSV, or has anyone else faced a similar challenge in the past, and have some handy advice? Thanks! TM
  11. Greetings! I'm trying to place a bitmap of a grid (sic) on an HMI in a 570, and drop some text on top of it. The bitmap hides the text. I've fiddled with the draw order with no effect. I know I can make the text into text variables and it will show, but that's... clunky. Is this a bug in the draw order, or perhaps something that can be changed? Thanks, TM
  12. Hi again, I finished updating a project in an old V280 (thanks Ash) that brought back some fond memories along with the modbus headaches. One that I recalled fondly was the way a V280 ALWAYS downloaded the project to the controller for future upload. I'd like to see an option in Visilogic I could set to always download and burn upload project. This would include streamlining the download process so it happens without me having to sign off on a couple of pop-ups warning me about doing it. Essentially, make that portion behave like a 280. Thanks, TM
  13. Another suggestion: I've been using grids on my screens of late (like an excel sheet) because they make a nice way of displaying alot of data, and are also useful for aligning buttons. Drawing these in paint is a nuisance, and I can't use one and stretch it because the lines get messed up. It would be nice to have a grid object. Say, specify row height and column width, then as you stretch it, it adds additional rows and columns. Then populate the cells with either text or operands. To be really nice, allow cell backgrounds to be set individually. Thanks, TM
  14. >>Just thought I'd throw something in on the HMI Display Jumps - I know most of the time we use Buttons to Jump between Displays, but at times we still use MB's or SB's on the HMI Jumps List Box that aren't hooked up to buttons and are either controlled by the OS or by us Users in Ladder.<< Hi Ash, Yeah, I thought of that too. Fortunately, there is already the Jump to Screen function in Ladder that makes that capability redundant. Speaking of redundancy, I do think it's time to consider some editing to Visilogic itself. The growth has been pretty organic, and in some respects it shows. Consider this - in the current form, you can make a screen jump by: 1. Assigning a boolean operand in a Jump link, triggering by touch 2. Assigning a boolean operand in a Jump link, triggering from ladder. 3. Use the Jump to HMI ladder FB, triggered from ladder. I'm as big a fan of options as anybody, but by adding a "jump to hmi" function in the button properties, you can streamline #1, eliminate the entire jump table, and manage ladder-based jumps via FB. I'm all in favor of Joe's idea for streamlining modbus. Instead of relying on the user to make every decision regarding busy bits, trnamsission times and the occasional dodo using Scan_EX in an illegal context (d'oh!) set up a config box like CanOpen has, and let the OS sort out the most efficient way to manage it. If CanOpen can do it behind the scenes, why not Modbus? I'd still like to see individual bar graphs eliminated and replaced by a trends-style bargraph object that would be easier to configure, scale, etc, etc. Did I mention adding change-of-state to CanOpen? I just think maybe it's time to prune the tree a bit. Thanks! TM
  15. Hi guys, Playing around with the new beta, generally loving it. Definitely loving the 16k colors, can't wait for the official release, and the 1040 to go on the market! The new tab structure for HMI. It seems to me the zoom feature is "zooming" further, which I like. Not sure how I feel about having to change tabs for jumps, let me try a project on it and I'll have more thoughts. But one thing that did occur, in Visi we've always assigned screen jumps by placing them in the list box under the HMI. I was thinking that if a "screen jump" option were placed in the button properties box, we wouldn't actually need that at all. Additionally, assigning a screen jump button is a multi-stage process: 1. Create button 2. Assign MB to button 3. Assign Jump to MB I have a vector of 10 MB set aside entirely for navigation. If you could configure a button for screen jump, you wouldn't need an MB at all. Now that we have 16k colors and the new resolution on the 1040, I have a new challenge for you - gif playback. I know, we can brake gifs down to individual images and use list-of-images, but frankly, it's a pain in the neck. I'd like to see a gif object that can be set to play continuously or once, either from MB or touch. Thanks! Everything's looking great so far. TM
  16. Hi All, When using the Trends to SD function, when I open the trend file in SD Suite, can I extract the data underlying the trend to an excel or CSV file? Thanks, TM
  17. I'm rocking the beta version right now, and the colors are spectacular! Can't wait for the official release, so I can put it to work!
  18. In gratitude for everyone's assistance on this problem, I wanted to share with you the program structure I was originally trying to achieve throughout this whole misadventure. You may have already been doing this, but if not, you may find it useful. My current application is a V280 communicating to the Trio motion controller. The 280 issues command codes and target values to the Trio, which does all the grunt work. The 280 also polls the Trio for current positions and IO data. In this application, the V280 doesn't need to talk that much, comparatively. It gives a homing command, the Trio executes, and the 280 watches the reply line to see the command is complete (for example). Ash's very nice program demonstrated what I already knew from previous research, an RHR cycle took about 60 mS, and a PHR cycle took the same, for a total latency of 120 mS (approx). This was very inefficient, since 99% of the writes were transmitting the same data, and ate bandwidth I would rather have spent getting real data back from the Trio. So I applied a little CanOpen technique to the PHR, and made it change-of-state. If the values to be sent are changed, the polling of the Trio data is interrupted, and when the Function in PRogress goes idle, the values are sent. Full latency of a complete RW cycle is still 120 mS, but the latency when not writing is only 60 mS, so I get much faster updates to the data coming out of the Trio. Thanks again guys! TM Modbus Example Rev 2.vlp
  19. I finally found the culprit. Scan_Ex I removed it from my program and it started working properly. I added it to Ash's program and Scan_Ex killed it. Checked the help file, nothing there about this sort of behavior, so perhaps the gurus in Support can chime in on it. Thanks, TM
  20. So I put the integer tokenized scheme back into my program and it failed magnificently. Great... So I began looking at differences between the modbus schemes. I noticed that your program used MB10 as function in progress, I was using 2041. So I replaced it with MB7. No change. Also noticed MB10 had no power-up status, mine was reset. Cleared that, no change. Added the NC SB2 to condition the IO Handler subroutine call. No change. Eh, I'm going to lunch. TM
  21. Hi Ash, Thanks for the program, I analyzed it this morning and tried it out, and it did indeed work. So I set about trying to duplicate the problems I was seeing. First, I made a couple of modifications to the original, since I'm only using Unit 2. This worked fine as well (0 Original) Second, I made a copy and blew away everything pertaining to Units 3 and 4 (1 ID2 Only), just to make it more clear for myself. Third, I converted the bit-based token scheme you used into an integer based one (the way I normally do things) to see if the integers could be the source of the problem. The program worked normally that way as well. (2 Int Token) Fourth, I went back to the bit-based program and replaced the NC contacts on Function in Progress (MB10) with negative-transition bits to see if that would replicate the problem. While I did have to toggle MB10 manually in online mode to kick-start the sequence, after that, it ran fine. (3 Pulse) At this point, my theory got flushed down the toilet, but that's cool - I want to figure out where I'm going wrong. The thing that's confusing me is I tried both of these latter methods with no effect previously, so now I'm doubly curious. One thing I did observe is that you use a NC bit on SB2 to ensure the configuration scan is done before launching transmissions. I thought the issue might be there, so I created still another routine based in 2 Int Token, and set it to scan immediately at powerup instead of waiting (4 Imm On). Still the program runs perfectly. I noticed I'd left the PHR vector length at 2 instead of 25, so I changed it in 4 Imm On, and still it ran fine. Dude! This is a fine piece of code. I wish american cars were this well constructed, I might buy one again! Unfortunately, it still doesn't answer why my attempts in my own program, several of which were the same as these, didn't pan out. I'm now going to install this on my own program and see how it works. Thanks for the help! I've attached the program with the revs for your perusal. TM Modbus Example Rev 1.vlp
  22. Hi Damian, I believe the pulse timers like SB3 and SB7 are square waves, on for one period, off for the same amount. Not sure if SB7 is on for 50 mS /50 mS or 100/100. I used to know this, but I turn 40 in a week, and my mind is not as clear as it used to be Personally, I'd like to see a bit on the transmission blocks indicating function complete, rather than a single Function in Progress bit for the entire comm system. Then we could trigger changes for a block executing, instead of the entire comm line stopping. Thanks, TM
  23. I should clarify, this is a vision 280 with OS # 5.04 (B18)
×
×
  • Create New...