HP prime entering simple routines

Hi,
I am trying the HP prime and I am somewhat disappointed. A couple of simple things have baffled me:
First of all I use RPN all the time.
With my 50G I could enter numbers, store them in variables and those would be available in the VAR menu by simply using the soft buttons. This is available on the prime, but I need to push a while bunch of buttons to get to my variables. Is there a smart way to get these to show in the home screen?
Also, simple but time saving routines on the 50G, like <25.4 *> then save this under "INCH" and you can enter a number and press this button and it saves a whole lot of presses to just convert from inch to mm. How does one do this with the prime?
Many thanks,

User-created variables can be accessed relatively easily by pressing the Vars key.  The vars that you create  in Home are under the Vars / User tab, and the vars you create  in CAS are under the Vars / CAS tab. The permanently built-in vars are under the Vars / Home tab, but those are probably easier to simply type (in ALPHA mode) rather than using the Vars key.
Example: In RPN mode in Home, type NICK and press Enter.  Prime will ask you, "Do you want to create a variable called NICK".  Tap OK.  Now type 123.456 Enter 'NICK' Sto, to store 123.456 into NICK.  Now accessing NICK only requires three keystrokes: Vars, then the digit in front of "User Variables", then the digit in front of NICK.   Once you get used to it, you can access all your variables very quickly that way.
No, there is no simple way to assign user variables onto the softkeys (AKA menu buttons), like the 50g can do.  Sorry!  But the Vars key shows them in vertical menus nicely.
Suggestion: The << 25.4 * >> program on your 50g is perhaps best replaced by a "User Defined Function" on the Prime.  Press Shift Define to start the user-defined function editor.  Type INCH for the name, and 25.4*X as the function.  Now in Home, press Toolbox [User] User Functions to access it.  It even works in RPN mode!
If you really want keyboard efficiency, you can customize what the keys do (in USER mode), so you can access your favorite variables, functions, and programs, with just one or two keystrokes.  Details can be found in the User Guide, starting at page 516.
Disclaimer: I do not work for HP.  I'm just another HP customer.
-Joe-

Similar Messages

  • Must hit option key to enter simple PIN since upgrade to WM6

    In WM5, if you had the treo lock option set to simple PIN, you could just enter the numbers on the keypad to unlock the phone without having to hit the Option key first. I assume the phone knew since it was a simple PIN password, that I would want to enter numbers. With the 1.24 upgrade to WM6, I have to hit option first before each number, which is a royal pain the butt, as our company's Exchange server forces the device to lock every five minutes.
    Is there a fix for this?
    Post relates to: Treo 700wx (Verizon)
    Post relates to: Treo 700wx (Verizon)

    This issue has been brought to Palm's attention and is currently under investigation as to why the 700wx windows mobile 6 update has caused this issue to occur. I will keep you posted as to what I find out.
    Post relates to: Centro (Sprint)

  • Help with a 'simple' routine (code)

    Hello all,
    I know I should be better at writing routines but I just cant seem to get the time to practice!
    Please help me with the following.
    I have an infoobject ZHE_YRSES that has 2 attribute 0FISCYEAR and ZFSCYR_ED (both of which are going to be 4 digit years)
    I also have a I have a cube that includes object ZHE_YRSES and a counter ZUQSTUDT
    When the data come into the cube I would like
    ZUQSTUDT to equal (ZFSCYR_ED minus  0FISCYEAR ) + 1
    Please could you let me know what code I need to put in a transformation for something like this!
    I will get better at this I promise!!
    The template is  
    METHOD compute_ZUQSTUDT.
    *   IMPORTING
    *     request     type rsrequest
    *     datapackid  type rsdatapid
    *    EXPORTING
    *      RESULT type _ty_s_TG_1-/BIC/ZUQSTUDT
        DATA:
          MONITOR_REC    TYPE rsmonitor.
    *$*$ begin of routine - insert your code only below this line        *-*
    ... "insert your code here
    *--  fill table "MONITOR" with values of structure "MONITOR_REC"
    *-   to make monitor entries
    ... "to cancel the update process
    *    raise exception type CX_RSROUT_ABORT.
    ... "to skip a record
    *    raise exception type CX_RSROUT_SKIP_RECORD.
    ... "to clear target fields
    *    raise exception type CX_RSROUT_SKIP_VAL.
         RESULT = .
    *$*$ end of routine - insert your code only before this line         *-*
      ENDMETHOD.                    "compute_ZUQSTUDT

    Hi,
    First of all you will have to read the master data and related attributes in start routine, create an internal table of type p table of infoobject ZHE_YRSES and fetch all the reocords.
    Start Routine********************
    Data: i_t_data type  standard table of /bic/pzhe_yrses.
    select zhe_yrses 0fiscyear ZFSCYR_ED from /bic/pzhe_yrses into table i_t_data.
    Field Routine****************
    Later in field routine you can put following code, take ZHE_YRSES infoobject as input to your field routine,
    Inside routine you will have to read the internal table.
    Read table i_t_data into wa_data with key zhe_yrses = source_fields-zhe_yrses.
    if sy-subrc = 0.
    RESULT = wa_data-zfscyr_ed-wa_data-0fiscper+1.
    endif.
    You will get the required value.
    Regards,
    Durgesh.

  • "Play" on remote vs. "Enter" - Simple Encore Menu Question

    Hi All,
    I haven't been able to find a good answer to this question as of yet, so I am hoping someone has a clear answer!  I am creating one of the simplest menus possible for my project.  It is composed of a screen capture from my timeline as the background image and a text button which is the name of the short film and acts as the "Play" button.  My project is only one timeline, so nothing complicated.  I am able to make the video play from the menu when I use the remote and physically push the "enter" button, but I would like it to play whether I push the "enter" button OR the physical "play" button on the remote.  I can't understand why pushing play on the remote wouldn't count as using the button?
    Thank you for your time, and if there is any solution or work around, this would be great!  Some of the people who watch my videos don't understand the difference between "enter" and "play" and then the whole thing feels much less professional.
    Thank you!

    I'm having this same issue.
    I have a single menu with one item that is going to play one timeline of video.
    I'd like to have it set up where the user presses play or enter and the video plays.
    I'm not able to do that. I haven't enabled any overrides. Would appreciate any help.
    Thanks so much.
    Victor

  • Exchange Rate: Routine to copy  the "Exchange Rate" value From TCURR table

    Dear experts,
    I have created a cutomised Key Figure (ZEXCHRATE) with the 0currency as the unit and this field is included in my ZCOPA_C21 Infocube.
    In the update rule, it was then appointed with a simple routine below;
    (PROGRAM UPDATE_ROUTINE.
    $$ begin of global - insert your declaration only below this line  -
    TABLES: TCURR.
    DATA: IT_TCURT Type TCURR occurs 0 with header line.
    $$ end of global - insert your declaration only before this line   -
    FORM compute_data_field
      TABLES   MONITOR STRUCTURE RSMONITOR "user defined monitoring
      USING    COMM_STRUCTURE LIKE /BIC/CSZCOPA_TPL_IS
               RECORD_NO LIKE SY-TABIX
               RECORD_ALL LIKE SY-TABIX
               SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
      CHANGING RESULT LIKE /BIC/VZCOPA_C21T-/BIC/ZEXCHRATE
               RETURNCODE LIKE SY-SUBRC
               ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
    $$ begin of routine - insert your code only below this line        -
    fill the internal table "MONITOR", to make monitor entries
      SELECT        * FROM  TCURR appending corresponding fields of table
      IT_TCURT
             WHERE  KURST  = 'M'
             AND    FCURR  = 'USD'
             AND    TCURR  = 'IDR'.
          AND    GDATU  = ___.
          AND    UKURS  = ___.
      Sort IT_TCURT by GDATU descending.
      Loop at IT_TCURT.
        Move IT_TCURT-UKURS to RESULT.
        Exit.
      Endloop.
    result value of the routine
    RESULT = space.
    if the returncode is not equal zero, the result will not be updated
      RETURNCODE = 0.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    $$ end of routine)
    Which will basically copy all the contents of TCURR into an internal table (IT_TCURT), sort it and then only copy out the UKURS (Exchange rate) data into the customised ZEXCHRATE to get the latest exchange rate value.
    Routine was checked and its fine.
    The problem is, upon checking the update rule, it returned an error message;
    "No Unit maintain for Key Figure Exchange Rate Local".
    Double checked the declaration of ZEXCHRATE, the unit was there.
    My questions;
    1. Is this the correct way of doing it ? I just want to be able to show the exchange rate value in my query (hence the existence of ZEXCHRATE).
    2. Is there an alternative way of achieving the same result ?
    Your help or advice will be greatly appreciated.
    Thanks
    KG

    Hi Sreeni,
    Referring to the " but the conversion from VEF to USD is happening at a rate @0.23256 which is valid till 02/13/2013 only" part in your post, the date given in OB08 for currency rate is valid from and not valid till.  Hence, please check the setting once.  Once you enter the rate from 02/13/2013, the rate is valid till you enter another date later than 02/13/2013.
    Regards,

  • Routine problem in transformation

    Hi sdners
                   following is the secenrio, i had a doubt in that. i have to create a transformation routine for the field cost performance index= budegt cost of work performed * percentage of work complete/ direct effort + direct expences. these for infoobject loaded by flat file. so how to do write the code, weather i have to map all calcultion field in traget field. please guide me how to write the code.
    hari

    Hi Hari,
    I am assuming you have the fields budegt cost of work performed, percentage of work complete/ direct effort and direct expences in the data source.
    Now when you enter into routine, scroll up. There you will find CLASS lcl_transform DEFINITION.
      PUBLIC SECTION. Under that  you will see TYPES: BEGIN OF tys_SC_1,
    Under that you will find the the technical names of all fields that you have mapped i.e budegt cost of work performed, percentage of work complete/ direct effort and direct expences. You will have to use it in result.
    Now what you have to do is scroll down again and then go to :
    Start of code *************
    CLASS lcl_transform IMPLEMENTATION.
      METHOD compute_ZPYENTDT.
      DATA:
          MONITOR_REC    TYPE rsmonitor.
    Skip all these, keep them as it is:
    $$ begin of routine - insert your code only below this line        -
        ... "insert your code here
    *--  fill table "MONITOR" with values of structure "MONITOR_REC"
    *-   to make monitor entries
        ... "to cancel the update process
       raise exception type CX_RSROUT_ABORT.
        ... "to skip a record
       raise exception type CX_RSROUT_SKIP_RECORD.
        ... "to clear target fields
       raise exception type CX_RSROUT_SKIP_VAL.
    RESULT = Technical name of budegt cost of work performed * technical name of percentage of work complete/ direct effort + technical name of direct expences.
    End of Code **************
    Hope this helps.
    Thanks,
    Rahul

  • How to call routine and pass data to routine in vofm

    Hi Experts,
    I need to update KBETR and KWERT values present in 'Conditions Tab' in Purchase Order (ME21N/ME22N).
    I have created a new customer tab in which we enter amount field and  percentage filed. When user enters some value in this and clicks on 'Conditions Tab', calculation has to be done and the calculated value has to be appeared across a specific condition type.as i am new to abap  i dont know how to create routine and pass data to routine in vofm from customised tab in me21n .
                                                                                                                                                                          Thank's in advance

    Hello Rajendra,
    You can get plenty of forums in SCN related to it. Follow below steps to create VOFM routine.
    Go to VOFM Transaction Code
    1. On the Menu Select required Application i.e Pricing
    2. Enter any Number in between 600 to 999 for Custom Developments.
    3. On entering Pop Screen appears ask for Access Key(We have to remember that Every New Routine needs an Access Key)
    4. Once the Access Key is received we can do modification.
    5. Enter the Routine Number ,description and insert the Access Key
    6. Now the ABAP Editor will open and required code can be copied from Standard SAP Routine and Custom Code Can be developed.
    7. Once the coding is completed we have to Activate the Routine
    8. Select the Routine and Go to Edit – Activate
    9. Ensure that Active check box is ticked upon Activation of the Routine.
    10. Double click on the routine will enter into ABAP Editor, we have to generate the Routine
    11. Go to Program and select Generate
    12.A screen pops up with the related Main Programs  and select all required main programs wherever the Routine is being called.
    13. Once the Routine is Generated and Activated, We need to configure the Routine in the config.
    ** Important SAP note: 156230.
    Check the below document too.
    http://www.scribd.com/doc/35056841/How-to-create-Requirement-Routines
    Regards,
    Thanga

  • Routine help

    Hi All,
    I need help in abap code for writing routine in Transfer structure........
    some records are posted with  value "Y" for field  N_WBSEOM and some are posted without any value " " BLANK into field N_WBSEOM at R/3 Side.
    Now in BW i have same field N_WBSEOM.
    Now when i updated these records to BW, Can these blank records can be assigned to value "N"(New Value).
    Please suggest
    Regards
    Raj
    Edited by: Raj on Jul 29, 2009 10:59 AM
    Edited by: Raj on Jul 29, 2009 10:59 AM
    Edited by: Raj on Jul 29, 2009 11:00 AM

    Hi Raj,
    Sure u can. Just write following simple routine for the field which u will be loading N_WBSEOM into .
    IF TRAN_STRUCTURE-N_WBSEOM IS INITIAL.
    RESULT = 'N'.
    ELSE.
    RESULT = TRAN_STRUCTURE-N_WBSEOM.
    ENDIF.
    Hope it helps.
    Regards,
    Rathy
    Edited by: Rathy Moorthy on Jul 29, 2009 11:03 AM

  • Help Need Transformation Routine

    Hi ALL,
        I want to write a routine in transformation which generates sequence number(Surrogate key) whenever i load the data in cube/ODS  ,since i don't any idea on ABAP Coding i can't proceed further. Can anybody help me in writing ABAP code generate sequence number in object based on the number of records.
    Please can anyone help me on this.
    Thanks & Regards
    Sameer Khan

    Hi Sameer
    Please let me know whether my understanding is correct or not
    You need to create a sequence number for each record of the cube
    In that case you can write a simple routine to generate a number and assign it to any infoobejct. After the last record of the data package just store the last value of sequence into a temp memoey location.
    and at the start of the routine just retrive the value of that memory loacation.
    Thanks & Regards
    Rohit

  • Copy of VOFM Routines

    Hi All,
                  I Had Requirement to creata a new routine ( Copy of Standard Billing Routine - 003 ) .I need to copy the standard Routine -003 code and add some more code to it. When I see the standard code there are Enhancement Sections.Do i need to copy that also..? OR Can any one Guide how to create a Custom Routine..?
    Edited by: Prakash Naga on Nov 4, 2010 10:31 AM

    Hi Prakash,
    1. To create the custom routine goto VOFM transaction>Requirement>Output control.
    2. Enter the routine number start with 9xx and enter the application as V3 (billing)
    3. when you click on create button system ask you the access key for the new requirement routine.
    4. get the Access key and enter the required logic in the requirement routine.

  • Working on the same start routine

    Hi
    I just want to know if two people can work on the same start routine using includes at the
    same time.
    Thanks in advance.
    Regards,

    Hi Kate,
        In any case if you enter into update rules in change mode it gets locks by user. So you cant see the start routine or update routine /rules.
        In the Editor for Start/ Update Routine you dont have change display button like you have in SE38, because you select the mode before entering the routine. So after this event a lock object gets created in SM12.
         So you can delete lock object in SM12 then you can use. I think simultaneous usage is not possible.
    Thanks,
    Srinivas.

  • Call library function node with array of clusters using array data pointer

    Hello all.
    I am writing a LabVIEW wrapper for an existing DLL function.
    The function has, as one of its parameters, an array of structs.  The struct is very simple, containing two integers.  I am using the call library function node to access it.
    In Labview I created an array of clusters, where the cluster has two 32-bit integers as its members.  So far, so good.
    Now I have to pass this in to the Call Library Function Node.  Here I am running into trouble.
    I have used The topic in LAVA and The topic in the knowledge base as my primary sources of information, though I have read a bunch of forum topics on the subject too.
    I do understand that I could write a new function which takes as a parameter a struct with the size as the first member and an array as the second, and I might just do this and have it call the regular function, but I was hoping to do it more simply.
    According to the C file which LabVIEW generates for me from the CLFN when I choose "Adapt to Type" and "Array Data Pointer", the prototype it is expecting is:
    int32_t myFunc(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, void data[], int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex);
    And the prototype of the function in my DLL is
    int borland_dll myFunc(DWORD handle, usint channel,
    int FIFOnumber, struct mStruct *data, int numWords, int *actualLoaded, int *actualStartIndex);
    This looks like a match to me, but it doesn't work (I get garbage in data).  From the topic in LAVA referenced above, I understood that it would work.  It does not.
    If I cast data to the pointer-to-pointer I get when I generate c code by wiring my struct to a CIN and generating, then I seem to get what I expect. But this seems to work when I choose "pointers to handles" too, and I would expect array data pointer to give a different result.
    Is there any way to get this to work directly, or will I have to create a wrapper?  (I am currently using LabVIEW 2011, but we have customers using 2009 and 2012, if not other versions as well).
    Thank you.
    Batya
    Solved!
    Go to Solution.

    OK, here is more detailed information.
    I have attached the VI.
    This is the code from the  "C" file created by right-clicking the CLN and creating a "C" file. 
    When the parameter in the CLN is set to "array data pointer":
    /* Call Library source file */
    #include "extcode.h"
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, void data[], int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex);
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, void data[], int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex)
    /* Insert code here */
     When the parameter is "pointers to handles":
    /* Call Library source file */
    #include "extcode.h"
    /* lv_prolog.h and lv_epilog.h set up the correct alignment for LabVIEW data. */
    #include "lv_prolog.h"
    /* Typedefs */
    typedef struct {
    int32_t control;
    int32_t data;
    } TD2;
    typedef struct {
    int32_t dimSize;
    TD2 data[1];
    } TD1;
    typedef TD1 **TD1Hdl;
    #include "lv_epilog.h"
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, TD1Hdl *data, int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex);
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, TD1Hdl *data, int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex)
    /* Insert code here */
     When the parameter is set to "handles by value":
    /* Call Library source file */
    #include "extcode.h"
    /* lv_prolog.h and lv_epilog.h set up the correct alignment for LabVIEW data. */
    #include "lv_prolog.h"
    /* Typedefs */
    typedef struct {
    int32_t control;
    int32_t data;
    } TD2;
    typedef struct {
    int32_t dimSize;
    TD2 data[1];
    } TD1;
    typedef TD1 **TD1Hdl;
    #include "lv_epilog.h"
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, TD1Hdl *data, int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex);
    int32_t Load_Transmit_FIFO_RTx(uint32_t handle, uint16_t channel,
    int32_t FIFOnumber, TD1Hdl *data, int32_t numWords, int32_t *actualLoaded,
    int32_t *actualStartIndex)
    /* Insert code here */
    As to the DLL function, it is a bit more complicated than I explained above, in the current case.  My VI calls the function by this name in one DLL, and that DLL loads a DLL and calls a function (with the same name) in the second DLL, which does the work. (Thanks Rolfk, for helping me with that one some time back!)
    Here is the code in the first ("dispatcher") DLL:
    int borland_dll Load_Transmit_FIFO_RTx(DWORD handle, usint channel, int FIFOnumber, struct FIFO_DATA_CONTROL *data, int numWords, int *actualLoaded, int *actualStartIndex)
    t_DispatchTable *pDispatchTable = (t_DispatchTable *) handle;
    int retStat = 0;
    retStat = mCheckDispatchTable(pDispatchTable);
    if (retStat < 0)
    return retStat;
    if (pDispatchTable->pLoad_Transmit_FIFO_RTx == NULL)
    return edispatchercantfindfunction;
    return pDispatchTable->pLoad_Transmit_FIFO_RTx(pDispatchT​able->handlertx, channel, FIFOnumber, data, numWords, actualLoaded, actualStartIndex);
    borland_dll is just "__declspec(dllexport)"
    The current code in the DLL that does the work is:
    // TEMP
    typedef struct {
    int control;
    int data;
    } TD2;
    typedef struct {
    int dimSize;
    TD2 data[1];
    } TD1;
    typedef TD1 **TD1Hdl;
    // END TEMP
    int borland_dll Load_Transmit_FIFO_RTx(int handlertx, usint channel, int FIFOnumber, struct FIFO_DATA_CONTROL *data, int numWords, int *actualLoaded, int *actualStartIndex){
    struct TRANSMIT_FIFO *ptxFIFO; //pointer to transmit FIFO structure
    usint *pFIFOlist; //pointer to array of FIFO pointers to FIFO structures
    int FIFOentry, numLoaded;
    usint *lclData;
    usint nextEntryToTransmit;
    // TEMP
    FILE *pFile;
    int i;
    TD1** ppTD = (TD1**) data;
    TD1 *pTD = *ppTD;
    pFile = fopen("LoadFIFOLog.txt", "w");
    fprintf(pFile, "Starting Load FIFO with %d data words, data pointer 0x%x, with the following data&colon; \n", numWords, data);
    for (i = 0; i < numWords; i++) {
    fprintf(pFile, "%d: control--0x%x, data--0x%x \n", i, data[i].control, data[i].data);
    fflush(pFile);
    fprintf(pFile, "OK, using CIN generated structures: dimSize %d, with the following data&colon; \n", pTD->dimSize);
    for (i = 0; i < numWords; i++) {
    fprintf(pFile, "%d: control--0x%x, data--0x%x \n", i, pTD->data[i].control, pTD->data[i].data);
    fflush(pFile);
    // END TEMP
    if ((handlertx) <0 || (handlertx >= NUMCARDS)) return ebadhandle;
    if (cardrtx[handlertx].allocated != 1) return ebadhandle;
    pFIFOlist = (usint *) (cardrtx[handlertx].segaddr + cardrtx[handlertx].glob->dpchn[channel].tr_stk_ptr​);
    pFIFOlist += FIFOnumber;
    ptxFIFO = (struct TRANSMIT_FIFO *)(cardrtx[handlertx].segaddr + *pFIFOlist);
    //use local copy of ptxFIFO->nextEntryToTransmit to simplify algorithm
    nextEntryToTransmit = ptxFIFO->nextEntryToTransmit;
    //on entering this routine nextEntryToLoad is set to the entry following the last entry loaded
    //this is what we need to load now unless it's at the end of the FIFO in which case we need to wrap around
    if ( ptxFIFO->nextEntryToLoad >= ptxFIFO->numEntries)
    *actualStartIndex = 0;
    else
    *actualStartIndex = ptxFIFO->nextEntryToLoad;
    //if nextEntryToLoad points to the last entry in the FIFO and nextEntryToTransmit points to the first, the FIFO is full
    //also if nextEntryToLoad == nextEntryToTransmit the FIFO is full and we exit without loading anything
    if (( (( ptxFIFO->nextEntryToLoad >= ptxFIFO->numEntries) && (nextEntryToTransmit == 0)) ||
    ( ptxFIFO->nextEntryToLoad == nextEntryToTransmit)) && (ptxFIFO->nextEntryToLoad != INITIAL_ENTRY)){
    *actualLoaded = 0; //FIFO is full already, we can't add anything
    return 0; //this is not a failure, we just have nothing to do, this is indicated in actualLoaded
    numLoaded = 0;
    lclData = (usint *)data; //must use 16 bit writes to the module
    //conditions are dealt with inside the for loop rather than in the for statement itself
    for (FIFOentry = *actualStartIndex; ; FIFOentry++) {
    //if we reached the end of the FIFO
    //if the module is about to transmit the first element of the FIFO, the FIFO is full and we're done
    //OR if the module is about to transmit the element we're about to fill in, we're done - the
    //exception is if this is the first element we're filling in which means the FIFO is empty
    if ((( FIFOentry >= ptxFIFO->numEntries) && (nextEntryToTransmit == 0)) ||
    ((FIFOentry == nextEntryToTransmit) && (FIFOentry != *actualStartIndex) )){
    *actualLoaded = numLoaded;
    //set nextEntryToLoad to the end of the FIFO, we'll set it to the beginning next time
    //this allows us to distinguish between full and empty: nextEntryToLoad == nextEntryToTransmit means empty
    ptxFIFO->nextEntryToLoad = FIFOentry;
    return 0;
    //we reached the end but can continue loading from the top of the FIFO
    if ( FIFOentry >= ptxFIFO->numEntries)
    FIFOentry = 0;
    //load the control word
    ptxFIFO->FifoData[FIFOentry * 3] = *lclData++;
    //skip the high of the control word, the module only has a 16 bit field for control
    lclData++;
    //now put in the data
    ptxFIFO->FifoData[(FIFOentry * 3) + 2] = *lclData++;
    ptxFIFO->FifoData[(FIFOentry * 3) + 1] = *lclData++;
    numLoaded++;
    //we're done because we loaded everything the user asked for
    if (numLoaded >= numWords) {
    *actualLoaded = numLoaded;
    ptxFIFO->nextEntryToLoad = FIFOentry+1;
    return 0;
    //if we reached here, we're done because the FIFO is full
    *actualLoaded = numLoaded;
    ptxFIFO->nextEntryToLoad = FIFOentry;
    fclose (pFile);
    return 0;
     As you can see, I added a temporary diagnostic with the structures that were created in the "Handles by value" case, and print out the data.  I see what is expected, whichever of the options I pick in the CLN!  
    I understood (from the information in the two links I mentioned in my original post, and from the name of the option itself) that "array data pointer" should pass the array of data itself, without the dimSize field.  But that does not seem to be what is happening.
    Batya
    Attachments:
    ExcM4k Load Transmit FIFO.vi ‏15 KB

  • Need help in fetching data - 0CALDAY and 0FISCPER

    Hi BW Gurus,
    Have a doubt in creating a query in a multi provider..
    The multi provider has three cubes.
    Two of them have data at Calday level, while another has data at fiscper level..
    fiscper is not maintained in the cubes having data at calday level ..
    I have to create a query on the multiprovider pulling data from all three cubes .. And the data to be restricted on the basis of fisper level ..
    Could anyone suggest me how to go about it ..
    Regards.

    Hi saugata,
    Both the selection will work.
    But I was wrong when I said Fiscal period will be easy.
    Because getting the date from fiscal period will be quite tricky in the case your user selection is range for Fiscal period As after user enters a fisacl period value you will always have to get the last date of the month for that fiscal period and which will require you to write the code to get last date of month  as 30 or 31 . Also you will have to take care of the leap year in the case of feb to get 29
    So that will requier you to write the complex code.
    Better is you should go for the calendar day range for the user input as it will just require you get the fiscal period which can be just done by offset and concatenation
    01.01.2006 can easily be converted to 001.2006
    and 12.02.2006 can be converted 002.2006
    There is one more solution
    Check if your Cube contains 0CALMONTH/YEAR in your Cube where you have 0CALDAY or you can bring just by mappping your day with it.And check whether your fisacl variant is K4 coming up from R/3 it is always compounded with 0FISCYR then you can restrict your data with 0CALMONTH/YEAR only. and the conversion of 0CALMONTH/YEAR is pretty simple.
    All these are options upon which you can work
    I would say you should go for calmonth year as it will be a simple routine.
    Hope it helps you understand better.
    Thanks

  • Program that sends G-code pages to a machine tool's controller

    I am looking for some advice and examples (if possible) of programs that are able to send G-code programs to a CNC machine's controller.
    In other words I would like to build a program that could send the G-code program to the CNC brain of a machine tool (possibly through the serial port of the computer) . Also, I would like to read back programs from the CNC brain of a machine tool, bring them on the screen and possibly write an ASCII file that could be opened with notepad or word.
    Could somebody help?
    Thank you

    I think you want to use the parallel port rather than the serial port.  I've done what I think you want to do, but not in LabView. 
    I have a Taig benchtop milling machine that I built my own stepper control box for (based on the allegro chips).  It like every hobby CNC machine I've seen uses step and direction lines for each axis.  IE, when the direction line is pulled high, each pulse on the step line moves one direction, when the direction line is pulled low, each pulse moves the stepper the other way.  This very low-level of control is quite popular in CNC machine tools and allows the controller to blend axes for circles etc. 
    You've got a couple issues with trying to do this level of stepper control with LabView, the main issue is windows itself, the latencies out the parallel port is quite long due to the hardware abstraction layer in windows.  Second is the lack of determinism in windows.  So even after your pulses (IE data) start spewing out the serial port, there is no guarantee that all your data will come out in a smooth consistent manner.  Rather, there will be a splatter of data, a pause while windows does something else, then another splatter of data. 
    This is a real issue when controlling either steppers or servos with step and direction type of controls.  Because the step pulse train is directly linked to motor speed.  Any fast changes in the pulse train period will cause motor stalls or other very undesirable behavior.  You can get around this to some extent by working very slowly.
    My workaround is to use TurboCNC (you get the source code when you register), which is a turboPascal program that runs in DOS.  DOS is so simple that it's quite deterministic and you can get nice consistent pulse trains out the parallel port.  I use various windows programs to build my parts, and generate G-Code (Autodesk inventer, meshcam, MasterCam, etc).  I've also written some, not-for-prime-time, Labview routines to edit G-code, view toolpaths, and unroll loops, etc. 
    To use a non-real-time OS to control real-time critical tools like this, you can always build a hardware buffer.  Imagine a hardware Queue where your pulses are pushed into one side of the queue sporadically, and a hardware clock pops them out of the queue to your controller in nice smooth increments.  I've been toying with building such a thing, but honestly, the DOS turboCNC program works so well that it's not high on my list. 
    The beauty of DOS and turboCNC is that you can use a $40 small laptop to control your machine.  I have a 486 HP laptop sitting on top of my controller next to my mill.  Small, cheap and effective, everything I want. 
    Pushing your data out of the parallel port is fairly easy in LabView, and parsing G-code is also quite easy, but before you spend much time on it, make sure the data coming out your parallel port is suitable for your needs from a timing standpoint.
    Hope that helps,
    Sheldon
    Message Edited by Sheldon Stokes on 09-27-2005 09:01 AM
    Technical geek, engineer, research scientist, biodegradable...

  • Suggested utility for SECURITY -using Photo Booth! Apple? Third Party?

    (If this isn't the proper venue for suggestions, please forward this accordingly)
    If anyone knows of some shareware/freeware/commercial ware out there that already does this, PLEASE share the info here.
    Otherwise, code writers, PLEASE CONSIDER THIS IDEA FOR ENHANCED SECURITY. Password protection's fine, and, properly used, very effective for deterring casual snoopers. Still, existing Mac OS and equipment needs probably just a few lines of code to offer SUBSTANTIALLY improved evidence of who's been trying to peek into my files.
    For all Macs with the built-in camera and Photo Book, consider this little trick:
    Anytime a password-protected login screen comes up, Mac first opens Photo Booth (unannounced, completely unbeknownst to the user). If user enters a wrong password, FOOSH -- that white flash of the screen captures the would-be user's face looking directly into my screen. It repeats the process for every failed entry until an administrator-determined threshold says to shut down everything for an administrator-determined time frame.
    Given the right password, or course, Photo Booth quits. This security utility comes back up anytime a password is required to gain access.
    Further, as I remember from Kensington's Pass Proof program, OSX saves a journal entry (accessible only to Administrator) of "failed logon attempts" with that image, the time of day, and the wrong password (to help me get an idea of who's perhaps gotten an idea of what my password MAY be.) When it happens, Mac does NOT tell the uninvited guest. If he/she's no threat, fine, I just apprise the person of the proper logon. And if I find a photo of someone I really do NOT want anywhere near my stuff, I have PHOTO EVIDENCE of the attempted log on — and some insight into his/her knowledge of my passwords.
    Seems like a fairly simple routine to program. Can't someone come up with this as a new security feature of OSX? Or maybe even a third party? I'd gladly pay $10 for shareware that gives me this definite, undeniable information.
    Thanks for listening.

    "If this isn't the proper venue for suggestions, please forward this accordingly"
    http://www.apple.com/feedback/

Maybe you are looking for