I have a big delay in my real time pid control

hi ,
since i don't have a digital input module i tried to use the serial port RS232 on my Crio to read the data from an absolute encoder in order to perform PID control for  a dc motor, but the problem is that the data took too match time to be read; there is a big delay between the first read position and the next one,and when i change the slide controller the indicator took time to change, although it should be instantinouse, here is
a snapshot of my vi. 
please i need help.

Hi Moho,
Looking at your code I see a couple of things that might be causing the issue. How long is the delay that you are experiencing? You are trying to transfer 2000 bytes every loop which will cause some delay. You also have a lot of mathematical operations that can take time between loop iterations. Also what is the VI that you have manipulating your waveform? Have you looked into the PID VIs?
Scott B.
AE NI

Similar Messages

  • Real-time pid control

    Hi,
    I found a real-time PID control in LabView examples, for E Series boards. I used one of this boards a time ago and used this control. It works very well.
    Now, I have a M series board (PCI-6221, LabView 7.0) and I would like to use a similar program. I tried to use the DAQmx assistant and look at the examples, but I did not find anything similar.
    Could you please take a look in this example (attached) and help me in configuring the PCI-6221 to work in similar way?
    I really apreciate your support.
    Thanks,
    Jeferson
    Attachments:
    Real-Time PID Control2.vi ‏131 KB
    simple PID.vi ‏53 KB

    Jeferson,
    I no longer have LabVIEW 7.0 on my machine, but I know that in LabVIEW 7.1, DAQmx installs an example called "PID Control-Single Channel.vi." This should be exactly what you are looking for. It can be found in the LabVIEW Example Finder (Help->Find Examples) by searching for "PID."
    Basically, this VI uses hardware timing (the rate will depend on your computer specifications) to acquire a single point, calculate the PID output, then output that value on the next sample clock.  Please let us know if you have any additional questions!
    Hope this helps,
    Ryan Verret
    Product Marketing Engineer
    Signal Generators
    National Instruments

  • Real-time PID control and continuous buffered acquisition. Does it work together?

    I use the "real-time PID control.vi" that acquires single AI point and generate single AO point in every "while loop" iteration to control a piezo actuator motion. Simultaneously I need to do (in another loop) a continuous buffered acquisition of another two AI channels (in the same rate as first AI channel).
    It does not work together.
    Does anybody know how to fix it?
    Platform: LabVIEW 6.1
    Board: PCI-6024E

    Hi,
    I would try to avoid the idea of using a separate loop since the PID
    loop is a continuous acquisition and will require un-interrupted access
    to the Analog DAQ system of the board. The last thing it needs is for
    you to attempt to start other AI functions at the same time.
    Configure your AI in the PID loop to read in multiple channels (Just add
    some more channels to the Input Channels Control. Separate the data as
    it comes out of the AI single Scan function using Index Array or other
    Array functions into that needed for the PID and that needed for your
    other data (the example is already doing this to make sure it only gets
    1 channel of data into the PID). If you don't need to sample all your
    channels of data all the time you can throw some data away as
    required.
    Obviously your other channels are now arriving one sample at a time so
    if you might need to build an array, insert into an array or use Auto
    Index on the loop if you are data logging.
    Regards,
    Dave R.
    varmih wrote:
    > I use the "real-time PID control.vi" that acquires single AI point and
    > generate single AO point in every "while loop" iteration to control a
    > piezo actuator motion. Simultaneously I need to do (in another loop) a
    > continuous buffered acquisition of another two AI channels (in the
    > same rate as first AI channel).
    > It does not work together.
    > Does anybody know how to fix it?
    >
    > Platform: LabVIEW 6.1
    > Board: PCI-6024E

  • We have a PCI-6110S to run our VIs. But, we are planing to buy another card (PCI-6024E​) to run real time PID vi. So, if they are installed at the same computer, would it be a problem for LabVIEW to run both of them at the same time.

    We have PCI-6110 S series installed in our computer. We are planing to purchase PCI-6024 E series card. They will be both installed at the same computer.
    1) I am wondering if we run both of them at the same time, would we have any problem?
    2) To run PID real time, can any E series of PCI card be used?
    Thanks...

    Hello Baho,
    1) Using Traditional NI-DAQ, there could be problems with the fact that the NI-DAQ driver is not multi-threaded; meaning that while waiting for one operation to complete, the driver could cause another operation to time out. On the other hand, DAQmx is multi-threaded, and would eliminate this problem. At the time of this writing though, DAQmx does not yet support simultaneous-sampling boards like the PCI-6110S. A good solution then would be to use Traditional DAQ for the 6110S and DAQmx for the E-series board, and they would by default run in separate threads.
    2) No, using a PCI E-Series board, the LabVIEW VI would have to run in a Windows OS and would not be Real Time or run deterministically. You can run the PID program in Windows, but the
    results could be inconsistent. The advantage of a Real Time is that the OS is deterministic or that the OS allows you to tightly control or determine the maximum time any function takes to operate. This kind of control of the maximum operation time is not possible with non-Real Time OSs such as Windows.
    If you would like to get set up with a Real Time System, I suggest you contact your Technical Sales Representative.
    Regards,
    Chad Evans
    National Instruments

  • Trying to update channels in real time while controlling Agilent 34970a

    Hello all,
    I've gotten such valuable help on these forums and I am hoping that someone will be able to point me in the right direction with this issue. I'm still pretty new to LabVIEW so please bear with me.
    I am working with the LabVIEW driver for the Agilent 34970A connected over a GPIB-ENET 100/1000. The device was detected and works just fine. The reason I am writing today is that I am trying to update the channel list in real time. Currently I need to stop the whole process in order to edit the channel list but due to the nature of the tests we will be performing it is important that I can add more channels as I go without interrupting the testing going on.
    I've searched the forums and tried modifying the channel string control to "Update value while typing," and "Limit to single line." The motivation behind the latter change was so that I could modify the channel list and use the ENTER key to execute. I've also tried creating a while loop with shift registers but the construction ws so clumsy that it did not work either.
    I am pretty sure that the modification should occur right at the string control but cannot be certain since the pint is for it to reinitialize what channels to scan and that occurs further down in the VI. I've attached the VI I am working with; it is an only slightly modified version of the driver's Advanced Scan Example. 
    Thank you all in advance,
    Yusif
    Solved!
    Go to Solution.
    Attachments:
    HP34970A Advanced Scan Example_YN_5-16a-12.vi ‏77 KB

    You may have added a shift register, but you're not actually comparing anything. You need to compare the value of the control to the value of the data coming from the shift register to see if it changed. If so, change the scan list.
    If you need to have a delay after changing the scan list, then you should add the delay inside the case structure that calls the VI to reconfigure the scan list. You can use the Time Delay VI to cause the delay to occur after configuring the scan by using the error wires to force execution order.
    P.S. Your naming scheme for VIs implies that you are probably not using a source code control system. If so, you would be well served in taking the time to learn about source code controls systems and installing one. It's very easy, and there have been numerous threads in the LabVIEW forum on recommendations of source code control systems.
    Attachments:
    changed.png ‏15 KB

  • How would people like me link DSLR cameras to an iPad 2/3 for real time shooting control?

    Is it possible to link a DSLR camera to an iPad 2 (and 3) via HDMI in real time? I wish to use the new iPad 3 as a high resolution preview monitor to help me frame my shots (still and HD video). I know a few users have been asking similar types of questions, but I feel that my approach hasn't been fully thought out yet. I know many people want to use the camera display kit in tandem with their DSLR and SD card to obtain this mythic ideal, but obviously the camera display connector seems to be too slow.
    Will a hdmi connector theoretically help solve this or am I still at the mercy of the actual pin connector on the iPad itself?
    Thanks guys and gals in advance.
    Cheers!

    Yeah I was wondering if I could patch both the camera kit and the HDMI connector together to make this happen... seems like some hig level coding would be needed to create a working solution.
    Thanks for the fast reply!

  • Shared Variables for Real-TIme Robot Control

    I'm really stuck in my efforts to use LV real-time in my hardware control application. I have a 6-axis industrial robot arm that I must control programmatically from my PC. To do this I've developed a dynamic link library of functions for various robot control commands that I can call using Code Interface Nodes in LV (using 8.5). This has worked great, that is, until I tried to port parts of the application to a real-time controller. As it turns out, because the robot control dll is linked with and relies so heavily upon several Windows libraries, it is not compatible with use on a RT target, as verified by the the "DLL Checker" application I downloaded from the NI site. When the robot is not actually executing movements, I am constantly reading/writing analog and digital I/O from various sensors, etc.....
    This seemed to suggest that I should simply segregate my robot commands from the I/O activities, using my host PC for the former, and my deterministic RT loop on the target machine for the latter. I set up a Robot Controller Server (RCS) vi running on my host PC that is continuously looking for (in a timed loop) a flag (a boolean) to initiate a robot movement command. Because several parameters are used to specify the robot movement, I created a custom control cluster (which includes the boolean variable) that I then used to make a Network Shared Variable that can be updated by either the RT target or the host PC running the RCS. I chose NOT to use buffering, and FIFO is not available with shared variables based on custom controls.
    Here's sequence of events I'd like to accomplish:
    1) on my host PC I deploy the RCS, which continuously pools a boolean variable in the control cluster that would indicate the robot should move. The shared variable cluster is initialized in the RBS and the timed loop begins.
    2) I deploy the RT vi, which should set the boolean flag in the control cluster, then update the shared variable cluster.
    3) an instance of the control cluster node in the RCS should update, thereby initiating a sequence of events in a case structure. (this happens on some occassions, but very few)
    4) robot movement commands are executed, after which the boolean in the control cluster is set back to its original value.
    5) the RT vi (which is polling in a loop) should see this latest change in the boolean as a loop stop condition and continue with the RT vi execution.
    With the robot controller running in a timed loop, it occassionally "sees" and responds to a change of value in members of the shared variable cluster, but most times it does not. Furthermore, when the robot controller vi tries to trigger that the movement has completed by changing a boolean in the control cluster, the RT vi never sees it and does not respond.
    1) Bad or inappropriate use of network shared variables?
    2) a racing issue?
    3) slow network?
    4) should I buffer the control cluster?
    5) a limitation of a custom control?
    6) too many readers/writers?
    7) should I change some control cluster nodes to relative, rather than absolute?
    8) why can't I "compile" my RT vi into an executable?
    Any help would be greatly appreciated. Unfortunately, I'm writing this from home and cannot attach vi files or pictures, but would be happy to do so at work tomorrow. I'm counting on the collective genius in the universe of LV users and veterans to save my bacon.....
    David

    Hi David,
    I'm curious why you decided to build a CIN instead of developing the code in
    LabVIEW.  Is there some functionality that that LabVIEW couldn't
    provide?  Can you provide some more information about the LabVIEW
    Real-Time target you're using?  What type of IO are you using?
    It is impossible to get LabVIEW Real-Time performance on a desktop PC running
    an OS other than LabVIEW Real-Time.  Even running a timed loop in LabVIEW
    for Windows won't guarantee a jitter free application.  Also, no TCP based
    network communication can be deterministic.  This means Network Shared
    Variables are also not deterministic (they use a TCP for data transport) and I
    advise against using them as a means to send time critical control data between
    a Windows host and a LabVIEW Real-Time application.
    In general, I would architect most LabVIEW-based control applications as
    follows:
    - Write all control logic and IO operations in LabVIEW Real-Time.  The
    LabVIEW Real-Time application would accept set points and/or commands from the
    'host' (desktop PC).  The Real-Time controller should be capable of
    running independently or automatically shutting down safely if communication to
    the PC is lost.
    - Write a front-end user interface in LabVIEW that runs on the desktop
    PC.  Use Shared Variables with the RT-FIFO option enabled to send new set
    points and/or commands to the LabVIEW Real-Time target.
    Shared variable buffering and RT-FIFOs can be a little confusing.  Granted
    not all control applications are the same, but I generally recommend against
    using buffering in control applications and in LabVIEW Real-Time applications
    recommend using the RT-FIFO option.  Here's why:  Imagine you have a
    Real-Time application with two timed loops.  Time-loop 'A' calculates the
    time critical control parameters that get written to hardware output in
    timed-loop 'B'.  Loop 'A' writes the outputs to a RT-FIFO enabled variable
    with a RT-FIFO length of 50.  Loop 'B' reads the outputs from the shared
    variable, but for some reason, if loop 'B' gets behind then the shared variable
    RT-FIFO will now contain several extra elements.  Unless loop 'b' runs
    extra fast to empty the RT-FIFO, loop 'B' will now start outputting values that
    it should have output on previous cycles.  The actual desired behavior is
    that loop 'B' should output the most recent control settings, which means you
    should turn off buffering and set the RT-FIFO length to 1.
    There is also a clear distinction between buffering and the RT-FIFO
    option.  The RT-FIFO option is used to add a non-blocking layer between
    network communication and time-critical code in LabVIEW Real-Time
    applications.  It also provides a safe mechanism to share data between two
    loops running in a Real-Time application without introducing unnecessary
    jitter.  Network buffering is a feature that allows a client to receive
    data change updates from the server even if the client is reading the variable
    slower than the server is writing to it.  In the example I presented above
    you don't need to enable networking because the shared variable is used
    entirely within the Real-Time application.  However, it would be
    appropriate to send control set points from a Windows PC to the Real-Time
    application using network published shared variables with the RT-FIFO option
    enabled.  If it is critical that the Real-Time application executed all
    commands in the sequence they were sent then you could enable an appropriate
    buffer.  If the control application only needs the latest set point
    setting from the Windows host then you can safely disable network buffering
    (but you should still enable the RT-FIFO option with a length of 1 element.)
    Network buffering is especially good if the writer is 'bursty' and the reading
    rate is relatively constant. In the robot application I can imagine buffering
    would be useful if you wanted to send a sequence of timed movements to the
    Real-Time controller using a cluster of timestamp and set point.  In this
    case, you may write the sequence values to the variable very quickly, but the
    Real-Time controller would read the set points out as it proceeded through the movements.
    The following document presents a good overview of shared variable
    options:  http://zone.ni.com/devzone/cda/tut/p/id/4679
    -Nick
    LabVIEW R&D
    ~~

  • Error 53 PID Autotune with Real-time fieldpoint control

    Hi!
    I cannot perform the autotuning PID parameters in fieldpoint cFP-2000 (Real-time control).
    It gives me the error 53 as you see in the attachment file. It seems to be because of the autotune wizard vi...???
    How can i solve this problem?
    Thanks for your help!
    Nunix
    Portugal
    Attachments:
    error 53.bmp ‏166 KB

    Hello,
    LabVIEW RT does not currently support the autotuning feature, because the procedure invokes a wizard that requires user interaction. LabVIEW RT does not support this type of user interface. This wizard is tightly integrated with the PID function itself and would require significant redesign to work in LabVIEW RT.
    It is the autotuning VI itself that is not compatible with LabVIEW RT. You can use the "PID Autotuning.vi" as long as you are not targeted to your RT engine. Run your VI in development mode with the "PID Autotuning.vi" in your code. After you receive your tuned gain settings, replace the autotuning vi with the normal "PID.vi" and use your tuned gains for the inputs. You can now target to your RT engine with tuned gains.
    Hope it s help.
    Isabelle
    Ingénieur d'applications
    National Instruments France

  • Hypervisor: Create Standalone Real-Time Application (Error at deploying: File not found)

    Hello,
    I am using Hypservisor. With "Build Specifications" in the project explore I want to create a standalone real-time application.
    In my first try I only want to print some texts onto the real-time console (HyperTerminal) using the function "RT Debug String.vi". I built the real-time application successfully and got the rtexe-file locally on the windows system. But as I tried to deploy the application to the target system, I got the error: "File not found". Please check the attached file "error.txt" for details.
    I don't understand which file is not found. Or I used "\" as path separators. Is it wrong? I'd appreciate if you'd have any idea of the problem. Thank you very much.
    Regards,
    Scarletice
    Solved!
    Go to Solution.
    Attachments:
    ERROR.txt ‏1 KB
    builds.zip ‏153 KB

    Hello Casey,
    Thank you very much for your reply and your interest in our project. We are using Real-Time Hypervisor for the setup of our test stand. We use the Windows system to show the GUI and the Real-Time system for the real-time machine control and online data storage. We use shared variables and shared memory for the data exchange between the two systems.
    The system works generally quite fine now. But we still have to face new problems at each step forwards. I'm sure, I'll have more questions. I'd appreciate your advices. Thanks sincerely.
    Best regards,
    Scarletice

  • Using Vi server in real time application

    HI
    I am  using PXIe( 4330, 6363 and 4353) devices and I want to have executable file for the calibration program  ( AI,AO verification procedure and so on). So I think is necessary to have 2 programs for each 'verification procedure', one under host (executable file) and one under target (real time application).  in host program (exe file) I used VI server to call Real time application. There are some problems that I am phasing.
    First I can’t select the channels which the reason is abvious because my host program is under my computer not under target, but I do not know what is the solution?
     and second is, error number 7 occurred. which says : the path file is not correct , or the file is removed... 
    As I mentioned my goal is to have an executable file which contains Real Time application. Please specify If there are other ways to do that. I do not know wether the way I am doing is correct or is somethig impossible ?!!!!!!!
    Attachments:
    Analog input verification.png ‏158 KB
    AnalogInputFrontPannel.png ‏181 KB
    Error 7.png ‏148 KB

    Hi 
    there is no specific reason why I call vi dynamically, as I said I try to generate executable file which contains real time application, but before that I need to run host vi too see if it works or not. I did what you advised and I have same error still. I think there must be something wrong with path address and vi server, but I address .rtexe file or target vi to my host and for both I have error. 
    I have attached the projects here.and I have followed this example : 
    http://digital.ni.com/public.nsf/allkb/A7DBA869C000B5AE862570B2007C4170
    BTW , are there some special configuration for Real time application that I might missed ? 
    thanks 
    Attachments:
    PXIe-6363.zip ‏306 KB

  • Real-time data acquisition for HR datasources

    Dear Experts,
    I have a couple of questions on real-time data acquisition...
    a) Can you tell me if any standard HR datasources support real-time data acquisition?
    b) Can we apply real-time data acquisition for generic datasources? If yes, is there any difference in the process compared to working with business content datasources when using real-time data acquisition?
    Hope you can provide some answers...as always, points will be awarded for answers that effectively address the questions.
    Thanks a bunch.
    K

    Hi Karthik,
    a)The decision to go for SAP remote cube depends on the volume of data and the frequency of queries. It is advicible not to use the SAP remote cube if the data volume is high and also, the query frequency is high. Which module in HR are yuo implementing? In HR, the data volume is generally high. So, if you go for loading the data from R/3 every 3 hours, you are asfe as long as the loading volumes are less. For example, for implementing Time management, I would not advice frequent loads as it is time consuming process. So, make a decision based on the above mentioned lines. If the data volume is not high, I would prefer the SAP ermote cube as it will reduce managing the loads.
    b)I mentioned FM extractor just for the sake of control of data selection. You can even go for view/table extractor.
    Hope this helps.
    Thanks and Regards
    Subray Hegde

  • Remote Extractor and Real Time Infocube for SEM BCS

    Hi Experts,
    I have somes doubts about the integration between SEM and BW.
    There is a cycle that have the next processes:
    1.- begin in R/3 with the movements in FI, CO and/or general ledgers
    2.- Activate the extractors standards for replicate/extract data to BW. For example, 0FI_GL_XXXX.
    3.- Configure a method for take the information from BW to SEM.
    4.- My doubt begin here... For take the information from SEM to the real time infocube, where I configure?  What Have I for configure?
    The real time infocube, What is the proposal? Where take the data?  Here, Do the remote extractor begin to apply?
    Thank you very much for your collaboration.
    Regards,
    Jeysi Ascanio

    We're using 0FI_GL_20 to read directly from FAGLFLEXT into SEM-BCS via a BI remote cube.  There are some basic transformations in BI to "populate" the remote cube, then a standard Load from Data Stream in BCS to do final mappings.  In the BCS workbench, just create a source data basis off the remote cube.
    This works at my current project due to fairly low ECC data volumes.  If you are doing any complex mapping on the Company or Fiscal Year / Period infoobjects, you may need to create a inverse mapping routine in the remote cube to transfer selection criteria.  If you see messages in the monitor following a data load such as "xx,xxx of xxx,xxx records ignored", that means that you are reading too much data from ECC and it is only getting filtered on the BCS side.  We had this problem with a custom extractor and adding an inverse mapping routine cut the load from ~5min to 30sec.  (Basically, the custom, template-delivered, extractor only had 0FISCPER, not 0FISCPER3 and 0FISCYEAR, so we would read all 17 K4 periods into BI, map them into BCS, then BCS would throw out the unneeded periods.  Unfortunately, we did not have the option to change the extractor, so this was the best approach.).
    If I had large data volumes, I would use a regular BI basic cube for staging (or possibly a multi-cube with a mix of basic and realtime, depending on the load requirements to BCS).
    If you use 0FI_GL_20, I would strongly recommend you implement OSS Note 1245822, or be on SAP_APPL 603.0002 or later.
    Hope that helps,
    - Chris

  • Call web service from OBI dashboard to show real-time data alongside data from DW

    Hello,
    OBI = 11.1.1.7.0
    We have a requirement to pull in real-time data from an external, secure web service (WS) into an OBI report.  The OBI report also contains data from the data warehouse (DW) along with a calculation that is derived from multiplying the DW and WS data .  In theory, the behavior that were looking for is similar to the Action Link "Invoking a web service" whereby the call is made to the web service for each row of data.  How would it be possible to achieve this result on an OBI report?
    Desired Result of OBI Report
    Product.......Qty.........Price........Potential Revenue
    TV..............100...........$500..........$50000
    VCR.............22............$75...........$1650
    DVD..........2500............$20..........$50000
    Breakdown of the data source for each column on the OBI report
    Product.......Qty.........Price........Potential Revenue
    DW............WS...........DW..........Calculated_on_the_fly_(qty*price)
    DW............WS...........DW..........Calculated_on_the_fly_(qty*price)
    DW............WS...........DW..........Calculated_on_the_fly_(qty*price)
    Thank you,
    Mike

    Does anyone know if it's possible to call a webservice from an OBI report to populate a column's value?  Thank you for your input.

  • Calling 2 FPGA in Real-Time VI

    Im using an sbRIO and I have 2 FPGA in it. I program both to open in real time. FPGA 1 is regarding getting data from analog signal and FPGA 2 is sending PWM. If these 2 are seperated, I have no problem opening them in real time. When I combine them together in a single real time VI, only FPGA 2 is working. FPGA 1, which supposedly shows values in charts is just totally empty! 
    Question is, how do I integrate both FPGAs in a single real time VI? Will combining the codes in FPGA screw up the timing?

    I'm pretty sure the sbRIO cards only have 1 FPGA on them.  So when you load the second FPGA code, the first is being overwritten.  You need to make a single FPGA VI that can handle both functions.  If you post your code, we can give more detailed advice.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Desktop PC as LabVIEW Real-Time Target and DAQ ISA card

    I want to use LabVIEW Real-Time (Desktop PC + OS Pharlap ETS) for operation with DAQ ISA card.
    Pharlap ETS supports operation from Windows dll and can supports Third Party Device PCI.
    Whether there is a possibility to work with ISA card in Pharlap ETS?
    I want to work for example with card PC20TR from BMC Messsysteme GmbH.
    Does anyone have tricks for using ISA card in Pharlap ETS?

    Hi,
    If you have reviewed the requirements for a Real-Time target and verified that your computer is compliant you might want to check out this article.  The main issue that people encounter when using PC's as RT targets is have the correct network card.  Make sure the card you have is on the supported devices list on the webpage that Christian posted.  You should be able to develop a driver using low level VISA commands but it is not an easy task.  Read over the developer zone article to learn more about it.
    Eric A.
    National Instruments
    Distributed I/O Product Support Engineer

Maybe you are looking for

  • 'Show JInternalFrame Contents While Dragging'

    hi, I have a question I have an application that has internal frames, Basically it is a MDI Application. I am using JDK 1.2.2 and windows 2000. The question is that when you go to the desktop right click properties and in Effects tab you uncheck the

  • Proble with payload-body.jsp customization

    Dear Experts, I have customized payload-body.jsp, here I am having problem with <select> and <date_picker> html component. After the selection of specified value, if I press default save button , will reset to Initial value. My xml payload contains m

  • Serious bug when handling accented letters in language names

    Hello, While porting my linguistic plugin to CS5, I found a rather serious problem in the Windows version of CS5 (the Macintosh version works all right with the same code). Language names containing any accented letters (anything beyond the basic ASC

  • Creative Vision: M AV cable(watchin movies on

    I just got a creative vision:M and i got an AV cable for it but when i play videos through the cable to the TV all i get is sound and a somewhat white and black scratchy picture i dont know what i have to do to be able to watch my videos on my tv? He

  • Tax percentage and gross amount

    We have a requirement (South Africa) where we have the gross amount (final selling price) and tax percentage.  The net amount and tax amount has to be back calculated from the gross amount.  For example:  Gross price = 100 ZAR Tax % = 15% Therefore,