Toggling in while loop

Hey !
I want to fit the scale of a graph thru button and undo the fit(when button pressed again logic 0 is latched) so that i can adjust it manually.
But  in while loop i cant latch the button's logic ...Any idea how to do this...
Regards,
DeWalker
Attachments:
ft.JPG ‏15 KB

You sem to have some misconceptions about these properties. Did you actually try my VI?
If you write a "2" to scalefit property, it will remain in effect until you change it again. It will autoscale whenever the graph receives new data until you change the property again with a new value. Only if you write a "1", it will scale only once. This is well documented in the LabVIEW help.
Your two-loop solution is silly. Your lower loop will consume 100% of the CPU, writing the same property over and over, millions of times more than the rate the graph is updated. All you do is waste electrons.   I also have no idea why you write the same property twice per iteration. Is this a government requirement. .
LabVIEW Champion . Do more with less code and in less time .

Similar Messages

  • Start, stop and restart while loops

    Hi, my qustion is i have 2 example a and example b. Example b lets u start counting up in seconds when u want to. as long as the toggle switchs are in correct position. it also lets u start, stop and restart if need be. i want to be able to that with example a, but for some reason the while loop always sets of running independent of what position the the toggle switch. Any help greatly appreciated.
    Thanks Stuart
    Attachments:
    examplealib.llb ‏202 KB
    exampleb.vi ‏25 KB

    An example as the attachment.
    Attachments:
    switch.vi ‏23 KB

  • Skipping a step in while loop when boolean is switched

    Hey guys,
    I have a program that controls a ventilator which pumps in gas at a certain rate. This whole process is executed in a while loop. When we switch gases by a toggle that's on the front panel, we'd like to skip one ventilating cycle immediately and then goes back to pumping gases at the previous rate, but we don't know how to realize this. Can you guys give any advices? Thank you!
    Sincerely,
    Le Z.
    Solved!
    Go to Solution.

    Make sure the mechanical action for the HP button is set to Latch When Released.  The button will automatcially reset when the terminal is read that way.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • While Loop Freezes game

    i am coding for GTA IV
    the game freezes when i use this while loop
    while (tb == true)
    if (Game.isKeyPressed(begkey) && ip == false)
    beg_playing();
    Game.Console.Print(begkey.ToString() + " Pressed");
    Game.Console.Print("Animation Cleared");
    Player.Character.Task.ClearAllImmediately();
    Player.Character.Task.PlayAnimation(beggarsitting, "beggar_beg", 8);
    Game.Console.Print("beggar_beg anim played");
    ip = true;
    gmoney.Start();
    while (bp == true) { Wait(100); }
    gback();
    return;
    if (Player.Character.isDead)
    cleanup();
    Here is the full code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Diagnostics;
    using System.Collections.Generic;
    using GTA;
    using GTA.Native;
    namespace Beggar
    public class ambBeggar : Script
    bool tb = false;
    bool bp = true;
    bool ip = false;
    Ped rped;
    AnimationSet beggarsitting;
    //AnimationSet beggarstanding;
    Keys begkey;
    GTA.Timer gmoney;
    public ambBeggar()
    gmoney = new GTA.Timer(120000);
    gmoney.Tick += gmoney_Tick;
    begkey = Settings.GetValueKey("Beg", "Beggar Mod", Keys.B);
    if(!File.Exists(Settings.Filename))
    Settings.SetValue("Beg", "Beggar Mod", Keys.B);
    this.Interval = 100000;
    this.Tick += new EventHandler(ambBeggar_get);
    this.ConsoleCommand += new ConsoleEventHandler(ambBeggar_ConsoleCommand);
    public void ambBeggar_get(object sender, EventArgs e)
    if(tb == true && !rped.Exists())
    rped = World.GetClosestPed(Player.Character.Position,20);
    public void gmoney_Tick(object sender, EventArgs e)
    if (rped.Exists())
    rped.Task.GoTo(Player.Character.Position.Around(2));
    Pickup.CreateMoneyPickup(rped.Position, 1000);
    rped.NoLongerNeeded();
    ip = false;
    if(gmoney.isRunning)
    gmoney.Stop();
    public void ambBeggar_ConsoleCommand(object sender, ConsoleEventArgs e)
    if (e.Command == "beggar_on")
    tb = true;
    Game.Console.Print("Beggar Mod By Mora Hannover");
    Game.Console.Print("beggar mod toggled");
    //Function.Call("REQUEST_ANIMS", "amb@beg_sitting");
    Game.Console.Print("loading anim set amb@beg_sitting");
    beggarsitting = new AnimationSet("amb@beg_sitting");
    Wait(5000);
    //Function.Call("REQUEST_ANIMS","amb@beg_standing");
    // if (Function.Call<bool>("HAVE_ANIMS_LOADED", "amb@beg_sitting") && Function.Call<bool>("HAVE_ANIMS_LOADED","amb@beg_sitting"))
    Game.Console.Print("amb@beg_sitting available");
    msg("Press " + begkey.ToString() + " To Beg", 5000);
    //beggarstanding = new AnimationSet("amb@beg_standing");
    Player.Character.Animation.Play(beggarsitting, "beggar_sit", 8, AnimationFlags.Unknown05);
    Game.Console.Print("beggar_sit anim played");
    while (tb == true)
    if (Game.isKeyPressed(begkey) && ip == false)
    beg_playing();
    Game.Console.Print(begkey.ToString() + " Pressed");
    Game.Console.Print("Animation Cleared");
    Player.Character.Task.ClearAllImmediately();
    Player.Character.Task.PlayAnimation(beggarsitting, "beggar_beg", 8);
    Game.Console.Print("beggar_beg anim played");
    ip = true;
    gmoney.Start();
    while (bp == true) { Wait(100); }
    gback();
    return;
    if (Player.Character.isDead)
    cleanup();
    if (e.Command == "beggar_off")
    cleanup();
    public void msg(string sMsg, int time)
    Function.Call("PRINT_STRING_WITH_LITERAL_STRING_NOW", new Parameter[] { "STRING", sMsg, time, 1 });
    public void beg_playing()
    if (GTA.Native.Function.Call<bool>("IS_CHAR_PLAYING_ANIM", Player.Character, "amb@beg_sitting", "beggar_beg") == false)
    bp = false;
    if (GTA.Native.Function.Call<bool>("IS_CHAR_PLAYING_ANIM", Player.Character, "amb@beg_sitting", "beggar_beg") == true)
    bp = true;
    public void cleanup()
    tb = false;
    ip = false;
    bp = false;
    Game.Console.Print("beggar_mod off :'(");
    Player.Character.Task.ClearAllImmediately();
    if(gmoney.isRunning)
    gmoney.Stop();
    public void gback()
    Player.Character.Task.ClearAllImmediately();
    Player.Character.Task.PlayAnimation(beggarsitting, "beggar_sit", 8, AnimationFlags.Unknown05);
    Game.Console.Print("beggar_sit anim played"); return;

    Hello,
    Have you tried to debug your code step by step? As it's very hard for others to reproduce your problem, I recommend that you firstly debug your code, find out which line causes the problem. And make sure that you don't cause infinit loop in your code, as
    I can see from your code, if the variable "tb" or "bp" is always true, your code will go into an infinit loop. This will cause the freeze of the application.
    while (tb == true)
    if (Game.isKeyPressed(begkey) && ip == false)
    beg_playing();
    Game.Console.Print(begkey.ToString() + " Pressed");
    Game.Console.Print("Animation Cleared");
    Player.Character.Task.ClearAllImmediately();
    Player.Character.Task.PlayAnimation(beggarsitting, "beggar_beg", 8);
    Game.Console.Print("beggar_beg anim played");
    ip = true;
    gmoney.Start();
    while (bp == true) { Wait(100); }
    gback();
    return;
    if (Player.Character.isDead)
    cleanup();
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • How to print an array out a while loop?

    Hi all,
    I'm very new with Labview (6h of Practice) and I meet a problem.
    I create a while loop in which a read the first characters of each line of three files and put it in an 2D array (3 rows and 50 lines).
    My goal is to print this array on the VI's panel in a Table or in a Multicolon Listbox. How to do this? In the While loop or out?
    I use Labview 6i.
    Thanks for your help

    Hi,
    I don't see any problems. I suppose that you can get a 2D array of strings from files.
    Now there are three solutions.
    1. Use of Arrays.
    Right-click on the wire with your 2D array and select "Create->Indicator" from pop-up menu. Now you have a 2D array on the front panel which will show you your data.
    2. Use of Tables.
    Select table control from "Controls->List&Tables". Paste it on the front panel of your vi. Right-click on it and select "Change to indicator" from pop-up menu. Then wire this indicato to your 2D array in the block diagram.
    3. Use of Multicolumn listboxes.
    Paste the multicolumn listbox to the front panel. On the block diagram right-click on it and select "Create->Property node" from pop-up menu. The property node of your control will appea
    r in the diagram. Right-click on it and change property to "Item Names" By selectring "Properties->Item Names" from pop-up menu. Now Right-click on the property node once again and select "Change to write" or "Change all to write" to toggle your property into write mode. Then wire your 2D array to this property node.
    The example is attached.
    Good luck.
    Oleg Chutko.
    Attachments:
    Tables.vi ‏26 KB

  • Stopping a while loop with a button in cvi

    Hi people,
    I am a newbie with CVI but I have used LabView Heaps. The issue I have is I want to be able to use a toggle button or a command button to stop a while loop. I used GetCtrlVal on the toggle before the while loop. I then enter the while loop and then GetCtrlVal at the end to see if the button has been pressed. The issue I have is that once I enter the loop I am unable to press any buttons on the Panel. I would normally have put a delay in the loop but the issue is I am wanting to control a robot in "realtime", thus any delays in the program results in the robot moving further than what I wanted it to. Any ideas? If you have any suggestions that would be much appreciated thank you.

    This should be in the CVI group but...
    At the tail end of your while loop add a call to function ProcessDrawEvents():
    When your program executes in a callback function or in code that does not call RunUserInterface or GetUserEvent, LabWindows/CVI does not update the user interface. Functions that are overly time-consuming can "lock out" user interface updates. To allow LabWindows/CVI to process these updates, call ProcessDrawEvents.

  • How to use one single boolean button to control a multiple while loops?

    I've posted the attached file and you will see that it doesn't let me use local variable for stop button, but I need to stop all the action whenever I want but more than one single button on the front panel would look ugly... The file represents the Numeric Mode of
    HP 5371A. thanks for your time
    Attachments:
    NUMERIC.vi ‏580 KB

    In order to use a local variable, you can change the mechanical action of stop button (Switch When Pressed will work), or create a property node for it and select values. You'll also have to do a lot of work changing those for loops into while loops so that you can abort them.

  • While loop doing AO/AI ... Performanc​e?

    Hi!
    I have been trying to get a VI to do concurrent Analog
    data in and out and both the input and output rates and
    waveforms can change while the VI is running. My problem
    is this:
    (a) If I try putting the read and write operations in
    separate while loops, one or the other loop will
    die in a buffer over/underrun.
    (b) If I put both into the same loop, then this works
    but I am limited in the choice of data-rate parameters
    because eventually one or the other DAQ VI will take
    too long.
    At this point I have only one loop and the buffers are big
    enough to hold 10 iteration. Every time one of the loops
    dies I reset it. Still this seems awkward. Is there a
    way of improving on the loop overhead and putting t
    he
    input and output in separate loops? Or any other way to
    improve performance?
    Rudolf

    Ok, I knew that ocurences did something useful but I am
    still a bit confused:
    * Can you set an occurrence for an output event. None
    of the examples I've seen say so but it looks like
    it should work
    * How do occurrences actually help with the "hanging"
    problem. Does the compiler see the occurrence in
    a loop and change the wait parameters?
    I looked at devzone but most of the stuff I found there,
    even the promising looking stuff was all about
    synchronizing and triggering, not about occurrences.
    Rudolf
    JB wrote:
    : Once in the read function, the program "hangs" until the number of
    : data points is in the buffer. The same applies to the write function.
    : This means that most of the time, your program is waiting.
    : To sol
    ve this problem, you must use DAQ occurrences (--> hardware
    : events).
    : For examples for using daq occurrences, type "daq occurrence" in the
    : search of the LabVIEW help or even better, at
    : http://zone.ni.com/devzone/devzoneweb.nsf
    : Hope this helps

  • Can not pass data after while loop

    Hello.
    I have created a VI for my experiment and am having problem passing data outside a while loop to save on an excel file. The VI needs to first move a probe radially, take data at 1mm increment, then move axially, take data radially at 1mm increment, then move to the next axial position and repeat. It would then export these data to an excel file. The VI is a little complicated but it's the only way I know how to make it for our experiment. I have tested it and all the motion works correctly, however I can not get it to pass the data after the last while loop on the far right of the VI where I have put the arrows (Please see the attached VI ). Is it because I'm using too many sequence, case, and while loops?  If so, what other ways can I use to make it export data to the excel file?
    Any help would be appreciated. 
    Thank you,
    Max
    Attachments:
    B.Dot.Probe.Exp.vi ‏66 KB

    Ummmm .... gee, I'm not even sure where to begin with this one. Your VI is well .... ummmm... You have straight wires! That's always nice to see. As for everything else. Well... Your fundamental problem is lack of understanding of dataflow programming. What you've created is a text program. It would look fantastic in C. In LabVIEW it makes my heart break. For a direct answer to your question: Data will not show up outside a while loop until the while loop has completed. This means your most likely problem is that the conditions to stop that specific loop are not being met. As for what the problem is, I don't even want to start debugging this code. Of course, one way to pass data outside of loops is with local variables, and hey, you seem to be having so much fun with those, what's one more?
    This may sound harsh, and perhaps be somewhat insulting, but the brutal truth is that what I would personally do is to throw it out and to start using a good architecture like a state machine. This kind of framework is easy to code, easy to modify, and easy to debug. All qualities that your code seems to lack.
    Message Edited by smercurio_fc on 08-17-2009 10:00 PM

  • Why writes LabVIEW only every 2 seconds the measured Value to a Excel (In a while loop with 100 ms tact)?

    Hi everybody,
    I use the myDAQ to measure speed, ampere, and voltage of a battery driven motor. (For Current measurement, i use a Sensor which outputs a 0-10 V signal). I placed all DAQ-Assitants in a while loop with a [Wait until next ms multiple] clock and set a value of 100 ms. I thougt, Labview will now write into my text file 10 times a second all values. In fact, as you can see in the attached text file, Labview only writes in a unsteady interval of 1-2 seconds a value, which is too less.
    The question: Did I do anything wrong, how can you create VI that writes you lets say 10 values a second into text file? Or is simply the DigitalMultimeter input of the myDAQ not able to sample a rate of 10 Hz? I couldn´t find any information in the specification handbook about the sample rate of the DMM?
    If anyone can help me would be great! Thanx a lot, Markus
    Attachments:
    Measure Speed+Current+Voltage into Excel.vi ‏175 KB
    Test7.txt ‏1 KB

    File I/O is not very efficient. I recommend that you do you file logging in a parallel task. Have one task do your data acquision. This task would then pass the data to be logged to the logging task via a queue. That way your file operations do not impact your data acquision. Also, express VIs are not very efficient. You would be better off accessing that directly using the DAQ VIs. The express VIs contain lots of steps that do not need to be done every time you call it such as initializing the device.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

  • How can I reset the value of an indicator in a while loop, from another synchronous while loop?

    I am running 2 synchronous while loops, one which is keep track of time, and the other is measuring periods. In the while loop that is measuring periods, I have a boolean indicator displaying whether the signal is on or off. My problem is that when the signal is off, the VI I use to measure the periods is waiting for the next signal, and displays the boolean value from the previous period measurement. While this VI is waiting, I want the indicator to display false and not the value from the last iteration of the loop.
    I am using LV 5.1 for MAC.

    Two things you can try:
    In preface to the first, the most common (perhaps ONLY) use of local variables should be in transferring data between parallel loops. This is a matter of discipline, and creates programs that are easier to understand, take less time and memory, and are just plain cleaner. Having said that, to transfer data between loops, use a local variable.
    Second solution: Instead of setting the value to false, just hide the indicator in question by using control references (property nodes for prev. version of LabVIEW). Control references are a great way to control items on a dialog or HMI screen.

  • Sir i am using datasocket read ,i am communicating with java but my problem is that bcz im using while loop to see if value has changed my labview consumes all the processors time ,sir i want a event like thing so that while loop is not in continuous loop

    sir i have given lot of effort but i am not able to solve my problem either with notifiers or with occurence fn,probably i do not know how to use these synchronisation tools.

    sir i am using datasocket read ,i am communicating with java but my problem is that bcz im using while loop to see if value has changed my labview consumes all the processors time ,sir i want a event like thing so that while loop is not in continuous loopHi Sam,
    I want to pass along a couple of tips that will get you more and better response on this list.
    1) There is an un-written rule that says more "stars" is better than just one star. Giving a one star rating will probably eliminate that responder from individuals that are willing to anser your question.
    2) If someone gives you an answer that meets your needs, reply to that answer and say that it worked.
    3) If someone suggests that you look at an example, DO IT! LV comes with a wonderful set of examples that demonstate almost all of the core functionality of LV. Familiarity with all of the LV examples will get you through about 80% of the Certified LabVIEW Developer exam.
    4) If you have a question first search the examples for something tha
    t may help you. If you can not find an example that is exactly what you want, find one that is close and post a question along the lines of "I want to do something similar to example X, how can I modify it to do Y".
    5) Some of the greatest LabVIEW minds offer there services and advice for free on this exchange. If you treat them good, they can get you through almost every challenge that can be encountered in LV.
    6) If English is not your native language, post your question in the language you favor. There is probably someone around that can help. "We're big, we're bad, we're international!"
    Trying to help,
    Welcome to the forum!
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • Getting data from a while loop while running.

    Hello,
    I did a program that call a sub-VI which is doing experiment and have its own timer.
    The sub-VI is a while loop and the stop condition of this loop is the elapsed time of my timer.
    What I want to do is to be able to get the elapsed time in my main program during the execution of the sub-VI (every second of its execution).
    First I assign the elapsed time in the sub-VI as an output of it. But of course the elapsed time is only updated in the main VI only when the while loop has finished. So I tried several solution: property nodes, local variable, global variable.
    When I am using global variable, I can see the elapsed time being updated during the while loop when I open the global variable VI. But the result is always the same: in the main VI the elapsed time is only updated at the end of the while loop.
    I think that is the global variable is updated every time, I could be able to get its data to my main VI?
    Does anyone have an idea?
    Thank you,
    Meach

    I tried using shared variable and reference without succes.
    I will keep searching.
    I enclose my VI that I simplify the most but with still keeping the shape of my real program. If you can take a look I will really appreciate.
    The goal is on the top-level VI to be able to see the updating data time in real time.
    Thanks,
    Meach
    Message Edited by Meach on 07-23-2008 04:13 PM
    Message Edited by Meach on 07-23-2008 04:14 PM
    Attachments:
    Elapsed Time.zip ‏25 KB

  • How to stop execution in while loop without stopping execution of other loops in the same vi

    HI
    I am quite a novice in Labview.
    I have a problem in my project. I used a while loop inside my vi to build an array of ten values along with other loops. Then I used a stop button to stop manually the while loop. But it seems like the loop doesn't stop in the middle of the array building and so other loops in the vi doesn't work until the while loop finishes building the array and as soon as while loop execution is over, the complete vi stops. But all that I wanted was to build the array using the shift register along with the control to stop building array anytime. And not to stop execution of other structures when the while loop finishes.
    Can anyone help me?
    Rahul

    Hi Rahul,
    Modified ur Vi to work with single button.
    But the subtract case is not in any loop.
    So, once both the loops stop, the subtract case will execute only once. Depending on state of subtaract boolean at that time, corresponding case will be executed and the Vi will stop.
    so think of a logic where u can put this also in a new loop.
    Or you can also incorporate it in one of the two loops and pass the other loop's data to it.
    Let us know how you will proceed in this regard
    I am posting your VI as well a VI with my modifications VI in Labview 7.0 so that Thomas can give his suggestions too
    Plus, always keep a time delay in your while loops.
    Oh sorry, the "arrayinouttestnewfinal.vi" is the modified vi
    Regards
    Dev
    Message Edited by devchander on 01-10-2006 06:15 AM
    Message Edited by devchander on 01-10-2006 06:19 AM
    Attachments:
    arrayinouttestnewfinalnew4.vi ‏59 KB
    arrayinouttestnewfinal.vi ‏63 KB

  • Problem with DAQ in while loop and Graphs

    Hello,
    I'm new here so I apologize if I posted this on the wrong board  
    This is my "situation":
    I need to make a simple PID controller which takes information (process variable) from an outside source (a NI's DAC connected through the USB port ) which is accomplished using NI-DAQ as an input, and the PID's output goes to the second NI-DAQ which is also connected using DAC to an actuator which in my case regulates the air pressure. (VI attached)
    My problem is the following.
    Both of the NI-DAQ I placed using DAQ Assist, require to be in a while loop.
    -If I place them in separate loops, I have the problem of passing information between the Input NI-DAQ and the PID, and also between the PID and the Output NI-DAQ.
    -If I place them both in one big loop, an error occurs saying that the selected buffer size is too small (Error -200609).
    The timing settings for the DAQ's N samples, 100 samples to read at the rate of 1k (I also tried with Continuous samples and many different combinations of Samples to Read an Rate but without success).
    Should I wire them with the same dt(s)?
    The other thing I need to do (I'm also writing it here in order not to open new topics) is show the following 3 signals on a Graph (process variable (dynamic data type)(range 4mA - 20mA), PID output (double)(range 4mA - 20mA), and the Set Point (double)(range 0 to inf))
    Firstly, is it possible to show the first two on a scale from 0 to 100 without changing the PID's output which needs to be 4-20?
    Secondly, which graph should I use if I have different data types? (I tried the Waveform Chart, and succeeded in showing the first two; the third just messes everything up)
    I would also have to make a legend explaining which signal is which (I see that this is possible with the Mixed Signal Graph).
    I know this is probably too much to ask, but I'd be grateful for any help
    Thank you in advance
    Attachments:
    PID while.vi ‏100 KB

    My problem is the following. Both of the NI-DAQ I placed using DAQ Assist, require to be in a while loop.
    -If
    I place them in separate loops, I have the problem of passing
    information between the Input NI-DAQ and the PID, and also between the
    PID and the Output NI-DAQ.
    This is the best option---Use QUEUE or Functional global or something else to tranfer the data to and fro
    How  do I make that QUEUE or Functional global?
    -If I place them both in one big loop, an error occurs saying that the selected buffer size is too small (Error -200609).
    Have
    you tried increasing the buffer? Is the acquisition happening
    parallelly (means to say the first DAQ not wired (error terminal) to
    second DAQ)
    Well the buffer is, at least how I understood it, the option Number of Samples when in Continuous Samples mode. Concerning the parallel acquisition, do you mean I should wire the error ports of both of the DAQs?

Maybe you are looking for

  • TS1702 save2pdf

    Anyone know about or has used EuroSmarz Ltd Print and Share, Write PDF, Save2PDF (all for ipad3) and had a hard time figuring out how to use it, then got led on to buy more peices to it to make it work? This morning, I started out just wanting to sav

  • My MBP can't detect my iphone4 once through usb hotspot?

    When I upgraded iTunes 10.7 on the MBP (Mac OS is 10.6.8) that cann't detect my iphne 4 through USB hotspot, event on the MBP internet service list there're can't find my iphone 4 device as well. but when I choose to blue tooth hotspot that is work,

  • AUC legacy assets with internal order update

    Hi, We are using AS91 to upload legacy assets.  AUC is assigned with a statistical investment order for budget control purposes.  We need the initial balance updated through AS91 be updated in the internal order as an actual line item also.  Please l

  • Procedure to create document

    Hi folks , I am new to FI module, can anybody tell me the step by step procedure for posting document using tocde fb01 and general posting f-02. thanks in advance. regards vishal

  • How to make the iPad camera accessible in a Microsoft Terminal Server Virtual Desktop?

    We have a Microsoft Terminal Server farm which we're using to host virtual desktops. We can connect to it and use it fine for most of our purposes using any of the standard RDP clients out there but none of them appear to enable us to access the iPad