Jump to content

Joe Tauser

MVP 2023
  • Posts

    2,858
  • Joined

  • Last visited

  • Days Won

    308

Everything posted by Joe Tauser

  1. The advanced webserver does address the issue, but it adds an order of magnitude of complexity in developing the application. My opinion is if a user has already developed all his screens, why make them do it again? Remote Access and Remote Operator are just so damn convenient. The down side is the effort to develop and app for Android and Apple are two separate endeavors and you're looking a lot of time to do each - my limited research revealed at least a man-month. If the next generation has remote desktop capability it may solve this. Joe T.
  2. Of course you're right, Damian. To your point, AB doesn't have a P contact and my brain goes to autopilot using the ONS instruction. I used to do a LOT more AB programming than I do these days and I just wasn't thinking when I responded. Alex - heed Damian's advice on programming in bite-sized pieces. I've been doing Unitronics for 12 years now and I still do it that way - program a bit, download and test. It's so much easier to troubleshoot one problem at a time, especially on equipment you're not familiar with. It takes a little while with Unitronics to get used to the instant control of the displays. Joe T.
  3. Alex, Looked at your program. A couple of things- 1. You've got a positive transitional (functionally the same as AB ONS instruction) in the first network. Everything behind it will only be on for one scan. 2. Some of the system bits (SBs) have been re-labeled for your own use. DO NOT DO THIS!. The system will trigger these on internal events and not in the way you want them to. Read the Help on a particular system bit before you use it in your program (similar to AB S:2 file). Use only MBs for logic you want to control. 3. Add comments to the networks. This is general good programming practice and allows others to understand what you're trying to accomplish. 4. Use the HMI "Display Loaded" function to set a bit that you can place before calling something tied to a key. The button bits are always active. You generally only want certain keys to do certain things when the operator is viewing a particular screen. A traditional HMI shields you from this because when you program a button the operator is already viewing the screen the button is on. Joe T.
  4. I'm getting a significant number of requests these days from people wanting to view the PLC screen on their iPad / iPhone. Large corporations seem to be leaning towards Apple as their standard because Apple controls the O/S and the App store. I'm sure this is something that has crossed the Creator's minds. Any comments? Joe T.
  5. XP is dead. Long live XP! ...... Joe T.
  6. Is something else stomping on ML 2 in your logic? Joe T.
  7. You did not write that in 30 minutes Anyway, here you go. I added a few comments. I would highly recommend as an exercise that you print it out and re-enter the whole program in a blank project to learn how to use Visilogic. Joe T. RATE METER V120.vlp
  8. Alex, OK we're running two posts here on the same question. My ADD kicks in and I answer one post before reading all of them. See my reply in the other post - keep all future posts in that one. Joe T.
  9. The first part is to write some logic to determine the motor RPM. What kind of feedback from the motor do you have? Second, do you know that a given PWM setting will give a constant motor RPM? What frequency should the PWM operate at? Joe T.
  10. What you're asking for is not complicated; Visilogic has a TON of functions. There's a bit a of learning curve to finding them, though. Unitronics has long integers that I use for most counting applications. They are much more flexible than counters. I am curious why you're using a V120 instead of the newer V130. Let me know the model number so I can upload some code. If you could do a print-out of your RS Logix program and upload it as a pdf I'll bet I could translate it to a Visilogic program in less than 30 minutes. I have RSLogix version 5.00 - you could upload your program but I may not be able to open it. Joe T.
  11. Your question addresses a couple of areas. Are you using inputs to count or the HSC inputs? Can you post what you've done so far? Joe T.
  12. Simon- Thanks for the feedback. I posted at 2:45 in the morning and my frustration was just peaked out. If you have an Aussie slang term for this feeling I would be interested in knowing it. I had already tried the event-driven approach by creating a local buffer and triggering a Send to the others when it changed, but this triggered Sends based on change of the "new" data from the receivers so I had to figure out how to prevent that. One of the problems is the CANbus "Message Received" block is kind of dumb - all it tells you is that you got a message from a particular node. There is no "message number" or anything else that allows a programmer to make a decision on what to do with the received data. You're totally on your own to come up with an encoding/decoding scheme. I added this "message number" to the front of my CANbus data block I'm sending and then called different Struct blocks based on the message number. The code is not very pretty and a layman will have a hard time figuring out what I'm doing. Plus it gets increasingly complex as you add more separate blocks of user data. I also think there may be a bug in the Struct block if you use multiple instances of it operating on the same block of MI's separated only by a few nets. For testing, I have two V570's and a V350. When I changed a value on V570 #1, V570 #2 and V350 followed perfectly. When I changed the value on V570 #2, V570 #1 followed and V350 #3 somehow received 0s in the block and zeroed out the data. The transmit / receive code is identical in all three. I beat my head on this for two hours and couldn't figure it out. It seemed like the one of the Struct blocks was grabbing the MI's and not letting go. I was able to watch this happen online. I'll try to strip down the programs and remove the customer's data so I can post them. That's when I gave up and posted. I think you and I are on the same track with the token-passing idea, I've just never done it before. The trick is to communicate to the "locked out" units that they are receiving new data from the token holder and not to confuse that with a local edit. I'm going to do some research on this and I'll keep everybody posted - this problem will come up again. From time to time there are posts on the forum from users who want remote screens like this and I've never seen a solid answer on how to do it. I'm looking to generate something that is small, adaptive to multiple blocks, and elegant. If anybody has some thoughts or examples I'm all ears. Joe T.
  13. The optimizer doesn't know that the subroutines won't run at the same time. The fact is they CAN run at the same time; you're just programming them so they won't. Using the same normal coil twice in a program is really bad form anyway. A better way is to have a separate coil for the same function in each routine and then OR them to the real output in another subroutine. This way of programming is so much easier to troubleshoot - you don't have to check which subroutine is active. Just look at the coil that's on and you'll know. The PLC doesn't weigh any more or the program run any slower if you use more coil addresses. One of the arts of programming is writing it so someone else can figure out what you've done in case a tree falls on you or the machine gets shipped across the country or halfway around the world and you're not there when something goes wrong. Or you have to go back two years later and figure out what you were thinking. Joe T.
  14. I've got a programming methodology question. We have a project where a single V570 is connected to all the I/O for the system and runs the process. The problem comes in where we have two additional V570's on a CANbus network using UniCAN that need to duplicate the screens and allow the user to change many parameters on any screen. I am broadcasting the data via timers from each screen to the others, but as you can image we are getting into a data race and the logic is starting to look like a big rat's nest trying to keep the data updated based on who entered what last. I am doing this wrong. I can feel it. Can anyone suggest a structure that will bring order and serenity to a multiple-master system? How do you tokenize an n-order CANbus network? Joe T.
  15. I'm guessing you want to display all this on the PLC screen. That's a bit more work. Two solutions come to mind- 1. Use the built-in Alarms function and configure all your events as "alarms" with no reset or acknowlege. The time-stamping and logging take care of themselves. The only downside is it will look hokey. 2. Use two tables - one stores all your event descriptions and an index pointer. When an event happens, look up the description with the index pointer and stuff it into a second table with a timestamp, bumping all the rows down and putting the newest event at row 0. Then build a screen that will display the table rows of ASCII strings of the time and the descripton. You could use the arrow keys to increment/decrement a pointer that will retrieve selected groups of rows and update your ASCII variables. It's really not as complicated as it sounds. Take a swing at it and let us know if you get stuck. Joe T.
  16. Read the Help on the Linear block, which will do what you want in one function. The block is located in the Math dropdown menu. Joe T.
  17. +1 Those glasses in my user picture are X1.5 readers. I can't do anything without them. I didn't realize the Zoom button doesn't function when you start a 1040 or 1210 project. Multiple zoom levels would be nice. Joe T.
  18. Look at what I've done here and let us know what questions you have. You've got some more work to do adding multiple presets and a switch, but it shouldn't be too hard. Joe T. hzmen JT.vlp
  19. Could you upload your file so we can see what you've done so far?
  20. Answered in another section on the forum
  21. Unitronics does not have a native Gray code conversion block. I did some searching and found some examples of converting Gray code to binary- http://www.plcdev.com/using_ladder_logic_for_gray_code_conversion Once you've got the code in binary format you can use an MB->MI block to get the number. Joe T.
  22. Your question is not clear. Please elaborate. Joe T.
  23. You can do this pretty easily with a single data table reporting the state of all parameters when one changes or multiple data tables for each parameter. If you post more detail I can hack an example together. Joe T.
×
×
  • Create New...