AXI DMA velocity and DCache doubts

This is a 2 question in one thread.
I'm basing my model on the matrix multiplication example,
First set of questions:
After some optimizations I have now a MM2S velocity of 1009 Mbytes/s and a S2MM velocity of 383 Mbytes/s.
1.1- Why is S2MM so slow when comparing to MM2S?
1.2- Are these the maximum velocities that you think I can get? Currently I'm not using interrupts and just waiting for each transfer to end before continuing. If I use interrupts will it be faster?
Second set of questions:
Following some advices I am going to divide my 512x512 matrices in 32x32 ones and treat each of them separately, since the Zedboard resources are not that big.
I already tested my design and the first 32x32 matrix is properly normalized. Input and output values are correct. However if I try and do a for cycle for all the matrices, the results are not correct and I think this is related to the cache flush and invalidate.
Here's my code:
#define DIM 32
//Start my IP block and enable auto-restart (doubts about this..)
XMm2s_Start(&BRAM_func);
XMm2s_EnableAutoRestart(&BRAM_func);
for(i=0;i<LIMIT;i++){
mm2s_bufferPtr=(u32 *)(SLOPE_ADDR+i*DIM*DIM*4);
result_Ptr =(u32 *)(FINAL_ADDR+i*DIM*DIM*4);
Xil_DCacheFlushRange((u32)mm2s_bufferPtr,DIM*DIM*4);
Xil_DCacheFlushRange((u32)result_Ptr,DIM*DIM*4);
Status = XAxiDma_SimpleTransfer(&axi_dma, (u32)mm2s_bufferPtr, DIM*DIM*4, XAXIDMA_DMA_TO_DEVICE);
if (Status != XST_SUCCESS)
xil_printf("ERROR! Failed to kick off MM2S transfer!\n\r");
return XST_FAILURE;
while (XAxiDma_Busy(&axi_dma,XAXIDMA_DMA_TO_DEVICE));
// Kick off DMA S2MM transfer
Status = XAxiDma_SimpleTransfer(&axi_dma, (u32)result_Ptr, DIM*DIM*4, XAXIDMA_DEVICE_TO_DMA);
if (Status != XST_SUCCESS)
xil_printf("ERROR! DMA transfer from Vivado HLS block failed!\n\r");
return XST_FAILURE;
while (XAxiDma_Busy(&axi_dma,XAXIDMA_DEVICE_TO_DMA));
print_matrix(result_Ptr,DIM,DIM);
Xil_DCacheFlushRange((u32)result_Ptr,DIM*DIM*4);
I already read this carefully about DCacheFlush and DCacheInvalidate but I still clearly have not understood very well.
Note: In the linker script I changed the heap and stack sizes to 10Kbytes instead of 1Kbyte.
Ty very much in advance for the help.

Hello jmales,
Right now my main IP (designed with Vivado HLS) is receiving a 32x32 matrix of floats. So, everytime I call my IP block within SDK I transfer 4096 bytes with the MM2S and then 4096 back with the S2MM transfer. So is 4096 my bandwidth ?
Oh okay, I see what you mean. The remaining question to answer first is:
- How often do you need to transfer a new 32x32 matrix? Or probably more useful question is how often do you need to transfer the 512x512 matrices? In other words, how fast are you acquiring new 512x512 matrices. What is your sample rate. This will tell you how much bandwidth you need.
If you only take in a new matrix every 10 seconds, then we only need to move data at a rate of 512 * 512 * 4 (bytes) / 10 = ~105KB/s in which case we don't really care about DMA efficiency because data is coming in so slowly. All we need to do is clock the DMA in the MHz range and you'll easily be able to keep up. The DMA will be sitting idle while we wait for new matrix for a while anyway, so any overhead associated with setting up the next transfer will be completely eclipsed and inconsequential. However, if you're taking in a new matrix every 10 milliseconds, we need to move data at 512*512*4/10e-3 = ~105MB/s which becomes a more difficult problem to solve and DMA efficiency may become a larger factor.
Another thing to think about is latency. Do you care about the absolute time (in milliseoncs) from when you acquire your matrix until it arrives at it's final destination? This will affect the rate that you clock your accelerator hardware (including DMAs, interconnects, etc). Take our 10 second matrix acquisition rate example. Even though the data rate is slow, if we need to pass data from DDR to accelerator, perform the matrix multiplication, then send data back to DDR all under 10 milliseconds, then you'll need to run your DMA operations faster. For minimal latency, every clock cycle counts so DMA configuration overhead might not be acceptable.
I was looking into this and actually posted a new thread regarding that meanwhile. So if I set the frequency of the MM2S and S2MM ports to 200MHz and the frequency of my custom IP block to 100Mhz, a FIFO ow 2 FIFOS will make sure everything runs smoothly?
Reading the other thread, I want to be clear about which problem this will solve. Doing this will ensure that your 100MHz clock domain will receive a continuous stream of data (i.e. no bubble cycles where the accelerator is not taking in new data). This is because the FIFO will have data in it which the accelerator can be processing while the DMA is being configured for the next transfer.
From a raw bandwidth (MB/s) perspective, this won't be as high as just running everything at 200MHz and allowing for those handful of buble cycles where the DMA is being reconfigured.
Maybe running some number will help to show the distinction:
1) FIFO case where you run processing at 150MHz with no buble cycles (in the processing clock domain) due to DMA downtime. 150MHz * 4 bytes per clock * 100% efficiency = 600MB/s
2) No FIFO, everything runs at 200MHz, DMA transfer length is 32*32 = 1024 cycles (or 4096 bytes), and say it takes 20 cycles to reconfigure the DMA for each transfer. The efficiency is 1024/(1024+20) = ~98%. So total bandwidth is 200MHz * 4 bytes per clock * 98% = 784MB/s
2) Again, no FIFO and everything runs at 200MHz with 20 cycles to reconfigure the DMA, but this time lets say we transfer the data one row at a time so our transfer length is 32 cycles (or 128 bytes). Now our efficiency is only 32/(32+20) = ~61.5%. So total bandwidth is 200MHz * 4 bytes per clock * 61.5% = 492MB/s
So if we figure out the number of matrices you need to process per second and the input-to-output latency requirements, then we can start deciding on architectural stuff about how best to move the data around.

Similar Messages

  • Synchronizing 2D axis movement with indepedent velocity and position

    I am coding a motion control system using an NI-73xx motion control board and 2 stepper motor linear slides.  The requirement is for both slides to move at the same time (synchronously) yet each slide must have its own velocity and travel distance.  I coded the two axis successfully so they both will run one at a time within a state machine.  Then I created a state where the two axis ran in parallel.  This worked but the 2 axis were out of sync.... duh, I should've known that!
    Anyway, I rewrote the state machine "Run Both" instance using the Start Motion.flx set with Axis\VS Map configured to run axis 1 and axis 2 along with the Resource input set to Axis Control (0).  I'm still having problems. The x axis only runs 1 time.  the y axis runs too many times?  I'm not sure whats going on.  Can someone look through the block diagram and tell me what I am missing.  I have been staring at it too long and I know I am overlooking something(s).
    Thanks,
    Christian
    Attachments:
    2D axis synch - front.JPG ‏85 KB
    2D axis synch - block.JPG ‏228 KB

    Because of the specific VI's used in this program, I am not able to save it for previous version.  However, I have taken a screen shot of the block diagram so that you can build it yourself.  It is a very simple program and most of the VI's should still have the same name in 2011 as in 8.6.  One thing I will point out is that the synchronization occurs in the flat sequence structure.  By having the smart motion VI's within the sequence structure, the motors will not be updated until both VI's receive data.  This is still software timed synchronization, and so it will be dependent on Windows OS jitter which can be as much as 500ms depending on how many processes are running.  Depending on your application though this might be a sufficient amount of synchronization.  Please let me know if you have any questions about this program or the VI's I used.
    Regards,
    Chris L
    Applications Engineer
    National Instruments
    Certified LabVIEW Associate Developer
    Attachments:
    Control 2 Axes BLOCK DIAGRAM.png ‏22 KB

  • Axi DMA correct parameters

    I'm making my design with Vivado HLs and Vivado and I'm doing some somewhat big transfers between DDR and my custom IP block and vice-versa.
    Each transfer from DDR to custom IP is of 256x256x4=262144 bytes and it happens 4 times.
    My MM2S (Memory Mapped to Stream) velocity is at 350Mbytes/s and by S2MM is at 200 Mbytes/s.
    I know I can get better velocities and I guess these slow ones are related to the parameters of the Axi DMA block.
    That's what I came here to ask you, to help me understand which should be the correct parameters since I still can't understand it from reading the logicore product guide.
    Width of buffer length n
    From what I understand this is the maximum length of the transfer in bytes like so 2^n. So in my case as 2^18=262144 shall I put 18 in here?
    Memory Map Data Width
    Data width in bits of the AXI MM2S Memory Map Read data bus. I have no idea here. My words have 32 bits and I defined the entrance stream of my block to have a length of 32 bits but what is this?
    Stream Data Width
    I guess here I should put 32 correct?
    Max Burst Size
    Burst partition granularity setting. This setting specifies the maximum size of the burst cycles on the AXI4-Memory Map side of MM2S. Valid values are 2, 4, 8,16, 32, 64, 128, and 256.
    Again, I have no idea what to put here.
    I could do a trial-and-error approach and change parameters until I find the best ones but the problem is that each re-synthesyze and re-implementation in Vivado takes a lot of time...

    Hi,
    The meaning of those parameters is rather simple, however  it may be difficult to understand from the documentation:
    Width of buffer length register - Length of internal counter / register in the DMA which stores the length of DMA operation data. It should be in your case at least 19 bits as 2^18 give you max length 262143 bytes which is lower than the requested length 262144. This parameter does not directly impact performance. It mainly impact maximal achievable frequency and has slight impact on utilized FPGA resources.
    Memory Map Data Width - This specifies data-width of AXI4 interface, data width 64 bits when connected to HP or ACP port can significantly improve throughput (when connected to 64bit AXI Stream). This parameter is independent on the AXI stream data width. With 32 bit AXI Stream the improvement will be insignificant in your case. Setting this parameter to 64 has impact on utilized FPGA resources.
    Stream Data Width - Width of AXI Stream interface. Set 32 here, if your component has 32 bit AXI Stream Interface.
    Max Burst Size - Data on AXI interface can be transferred in bursts - N words can be transferred in one transaction on AXI. Higher burst size leads to better throughput. This parameter should be set to at least 16. You can set in to 256 (Maximum allowed by AXI4), however speedup against 16 will be small. It is caused by the fact that PS AXI interfaces are AXI3 compliant, which limits the burst size to 16. Therefore the AXI interconnect must split the AXI4 burst to several AXI3 bursts.
    To improve throughput you can use:
    Higher design clock frequency.
    Scatter-Gather DMA to improve throughput by hiding latencies of direct register mode by utilization of multiple buffer descriptors.
    64 bit AXI Stream interface in your component.
                              VK

  • Axis resource allocation and the MID-7654

    Hello All,
    I am currently transferring my application over to use the MID-7654 instead of third party drives.  Below is the start up process I am using to allocate the axis resources:
      //kill and disable all axes
      flex_stop_motion(boardID,0,NIMC_KILL_STOP,0x000F);
      flex_enable_axes(boardID,0,3,0x00);
      //unmap all axis resources
      flex_config_axis(boardID,NIMC_AXIS1,0,0,0,0);
      flex_config_axis(boardID,NIMC_AXIS2,0,0,0,0);
      flex_config_axis(boardID,NIMC_AXIS3,0,0,0,0);
      flex_config_axis(boardID,NIMC_AXIS4,0,0,0,0);
      //map encoder resources to axes 1 and 2
      flex_config_axis(boardID,NIMC_AXIS1,NIMC_ENCODER1,0,0,0);
      flex_config_axis(boardID,NIMC_AXIS2,NIMC_ENCODER2,0,0,0);
      //enable axes 1 and 2
      u8 mask = MASK1|MASK2;
      status = flex_enable_axes(boardID,0,3,mask);
    Basically, I want to use the encoder resources for each axis for position/velocity monitoring and control the analog outputs directly to change the torque of the motors.  Since my impedance control software is closing the position and velocity loops, I do not want to use the PID controller onboard the PCI-7344.
    The above code worked fine with the third party drive.  However, after starting up my application with the MID drive, all of the orange inhibit LEDs turn on and remain that way (I assume it is to do with killing and disabling all of the axes and not mapping output resources to them).  Since I wasn't previously using the inhibit output from the motion controller, my application worked fine with the third party drive (I was still able to read the encoder feedback information).
    Also, when I was using the MAX '1-D interactive' interface to verify my encoder feedback, if I move either encoder immediately after initialization the 'Motor off' and 'Following error' lights turn red.  I assume this is due to the encoder moving without a command sent from the motor).
    Can anyone see any problems with the above code segment or suggest an initialization procedure that would solve my problems.  Or if all else fails, is it possible to control the inhibit signals directly to enable/disable the axes on my own?
    Wow... I certainly rambled on a bit there....  If you need clarification on any points let me know.  Also, I am on a bit of a time crunch, so a prompt reply would be greatly appreciated.
    Thanks,
    Chad

    Chad,
    I'm a bit astonished that you don't want to use the PID controller on the board. Onboard PID control is one of the main reasons why you would like to use a motion control board instead of a simple multifunction I/O device. The onboard PID loop of the 7344 can run with up to 16 kHz with very low jitter whilst using the DACs directly from your host application will result in a control loop with less than 200 Hz and a high amount of jitter - even if you were using a real-time OS. This will result in poor control behavior.
    This is caused by the architecture of the board. The DACs can be controlled directly by the DSP on the board with high rates in a determenistic way but the host can access them only through the board's µController that runs the host communication in 5 ms cycles that can't be synchronized with the application on the host PC. So for this usecase a combination of e. g. a PCI-6229 (multifunction DAQ board with 4 analog outputs) and a PCI-6601 (4 counters with direct quadrature encoder connectivity) would do a much better job at even a lower price.
    With this said I really can't reccomend the usage of a PCI-7344 as a pure I/O-board. Please provide some information why you want/need to choose this approach. There are a lot of options to build customized motion control systems. Please follow this link for some further information.
    A key feature of every control system is deterministic behavior so you will need to run your application on a real-time OS. Otherwise you won't be able to get a reliable control behavior.
    I can give you some more specific advice if you post some background information about your application.
    Best regards,
    Jochen Klier
    National Instruments Germany

  • Compiling AXI DMA linux drivers in SDK.

    Hi guys,
    I think I'm doing something wrong and It's making me crazy. I've got:
    Vivado 2015.2 w/ SDK.
    Zynq zc702.
    Tested in Linux 14.04 and Windows 7.
    And I want to use the axi dma drivers in a Linux application so that I downloaded the axidma_test.c example. At first most of the linux libraries threw an error until I linked somehow the libraries I found in the git repository "linux-xlnx/include".
    Then all of the "linux/*.h" libraries are recognized, but a new error appears: fatal error: asm/linkage.h not found. I tried to include this last one but I just made it worse. I cut down the code so that I only have a small snippet, having the same error:
    #include <linux/dma-mapping.h>
    int main() {
        printf("Hello World\n");
        return 0;
    I'm starting to think that I'm making it more difficult than it should be.
    Could anyone give me some advise how to successfully compile that small snippet? I would really appreciate it.
    Regards,
    Leroy
     

    Hello Leroy,
    Hmmm okay I found the one that I was thinking of:
    http://forums.xilinx.com/t5/Embedded-Linux/AXI-DMA-with-Zynq-Running-Linux/m-p/523105#M10658
    There's a presentation there with some code. About halfway down the pdf is an explanation of the software architecture for the AXI DMA linux driver and an explanation of where you need to add your application-specific layers and an example of doing so.
    As far as compiling, you really need two pieces still (bear in mind, I'm a little out of my area of expertise talking about the linux software side, so someone with more knowledge may correct the finer details. This is based on what I've gathered...):
    1) Kernel module to interface from the driver to userspace (for simplicity, you might use UIO for this like the second pdf that linnj posted in that link)
    2) Some application that runs in userspace that communicates with 1 above.
    For 1, you don't use SDK. You build a cross compile environment dependent on your kernel configuration and follow build steps:
    http://www.tldp.org/LDP/lkmpg/2.6/html/x181.html
    For 2, you'd use SDK as you are to build a Linux 'Application' (the word seems to have the connotation of running in userspace).

  • Multiple AXI DMA channels on zedboard

    Hello All,
    I am trying to use the two HP ports in zedboard by connecting axi-dma [instantiating two times] in a loopback fashion. I have already written a linux driver for single axi-dma connected to one HP port in a loopback fashion and it is working fine. Now I am extending to use multiple HP ports but could not able to do it successfully. I have also updated the device tree file with new axi-dma instantiation, created the necessary bitstream and loaded into the board.
    I referred the xilinx website, 
    http://www.wiki.xilinx.com/DMA+Drivers+-+Soft+IPs
    They say "NOTE: Multi-channel mode of AXI DMA is not supported in the driver."
    Meaning, I cannot able to use the remaining HP ports with axi-dma driver? 
    Could you please give me some suggestions or websites or threads for this concern?
    Thanks,
    Mani...

    Hello  and All,
    I forgot to ask one more thing.... While I was doing experiments with Xilinx axi-dma I was not able to get the interrupts working... 
    Well I will try to explain bit more,
    Linux driver is developed using the dma generic engine with the following procedure,
    i)   Get the dma slave channel with proper mask and filter.
    ii)  prepare for the dma copy with the correct direction.
    iii) Register a callback [On completion this callback should be called automatically]
    iv) Submit the transaction
    v)  Issue the transaction....
    vi) Wait for a flag until it becomes some specified value for termination... and this flag will be set to the proper value only in the callback....
    If I follow this procedure, then every time my driver get hangs since there is no callback being called after completion.....
    So I removed the final step and it seems everything works correctly.... I could able to see the updated and correct values....
    Of course, this is not the proper way of assessing the time taken for writing data using dma..... 
    Any idea about this issue? 
    I made sure the F2P thing is enabled and also I could able to see cdma interrrupt is getting registered in /proc/interrupt....
     

  • Reading of Velocity and Displaceme​nt is incorrect while accelarati​on is correct (Sound Vibration toolkit)

    Hi,
    I'm trying to read vibration using the following system:
    Sensor: Accelaration sensor
    Device: NI Hi-speed USB carrier NI USB 9162, NI 9233 4 ch 24 bit IEPE analog input.
    Software: LabVIEW, NI Sound and Vibration Toolkit, DAQ assistant
    The VI that I've for reading accelaration, velocity and displacement is attached. It is giving correct output for accelaration but incorrect result for velocity and accelaration.
    The problem seems to be in the use of intergration VI supplied with Sound/Vib toolkit.
    I'm also unable to drag drop cursor in the graph of the attached VI.
    Can anyone help me getting the correct readings and use the graph?
    thanks in advance,
    Aniket
    Attachments:
    vibration.vi ‏223 KB
    vibration.jpg ‏74 KB

    Hi,
    Have a look at the following VI. This seems to solve the problem.
    Regards,
    Vaibhav
    .......^___________________^
    ....../ '---_BOT ____________ ]
    ...../_==O;;;;;;;;_______.:/
    Attachments:
    vibration.vi ‏140 KB

  • Axis label, Legend and Title

    Hi,
    I am new to DIAdem, I have been struggling for too long so I have decided to ask for some help, I hope someone can help me.
    I am writing a script to plot a graph and add axis labels, Legend and Title.
    So far I have just been able to draw the graph but no success with the rest. I have found a few answers to my question but none of them work, I don't know why. I am using Diadem 2012 and this is my code:
    Can someone tell me how I make the changes I need?
    Thanks 
    Call PicDelete() 'Deletes all objects. Without this I won't show the curve but with it it deletes the Picloaded previously
    Call GraphObjNew("2D-Axis","New_2DAxis") 'Creates a new 2D axis system
    Call GraphObjOpen("New_2DAxis") 'Opens the axis object
    D2AxisTop =25 'Sets the position
    D2AxisBottom =30
    D2AxisLeft =20
    D2AxisRight =30
    Call GraphObjNew("2D-Curve","New_Curve") 'Creates a new curve
    Call GraphObjOpen("New_Curve") 'Opens the curve object
    D2CCHNX ="Y_Accel" 'Defines the x-channel
    D2CCHNY ="Strg_Angle" 'Defines the y-channel
    D2CurveColor ="red" 'Defines the curve color
    Call GraphObjClose("New_Curve") 'Closes the curve object
    Call GraphObjClose("New_2DAxis") 'Closes the axis object
    Call Picupdate

    Hi Leillo
    If you are using DIAdem 2012 you should use the new API. To get a starting point create the layout as you like and then open the corresponding dialog box and press CTRL-Shift-C. Then you have a lot of code in your clipboard, which you can past in you script editor and edit. The contents of the clipboard depends of the dialog box you opened.
    You can also select an object in Report and press CTRL-Shift-C
    For the new API you will also find tons of small scripts in the help, which shows you how to create labels, legend and titles:
    http://zone.ni.com/reference/en-XX/help/370858K-01/reportapi/objects/report_objects_irepaxislabelint...
    http://zone.ni.com/reference/en-XX/help/370858K-01/reportapi/objects/report_objects_irepcurvelegendi...
    Hope this helps
    Winfried

  • Java velocity and eclipse rcp

    hi,
    please attach some useful books on velocity and rcp pls.thank u.

    Hi
    Known bug in Oracle JVM.
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=465693
    Regards
    Ed Willink
    On 09/07/2015 10:13, Ed Willink wrote:
    > Hi
    >
    > Is anyone using Eclipse Modeling successfully on Windows 8.1 with a
    > Java 8 VM?
    >
    > I tried six months ago, with perpahps Mars M4, and got regular Java
    > crashes and so dismissed it as a bad install aberation and reverted to
    > Java 7.
    >
    > A couple of weeks ago, on two Windows 8.1 machines, with more recent
    > Java and more recent Eclipse (Mars), I still get a Java crash every
    > couple of hours.
    >
    > Does anyone see this? Is there some trivial Java 8 setup that I have
    > overlooked?
    >
    > Regards
    >
    > Ed Willink
    >
    >

  • Behaviour of AXIS with Spring and Java, in response to bad webservice call

    This is a stretch, but I wonder if you can help me - I'm new to this, and working in a project that has already been configured to work with Axis.
    We have a Java project built with the Spring framework, in order to provide webservices for access via SOAP. As I understand it (ie not very well!) Axis works to accept these SOAP messages from the client and transform them into calls on our Java methods, and do the reverse with the responses - cool! Which is excellent, and it works well with the config files we have already set up.
    But I have two problems/questions, which may well be related�
    2) In trying to test what exactly happens in which case, I sent some test messages to the service, and found that I could send incorrect parameter names, and sometimes the service still gets called! Axis seems to match the data it recieves to the parameters of the method in some clever way that I don�t understand. Sometimes this works, sometimes it shows a type error. But it seems to depend what parameter I rename as to what exactly happens, so the results are (superficially, at least) unpredictable! I'm sure this behaviour is configurable in some way, but I can't seem to find out how this is done. I'd like to make it so that missing parameters are passed into the method as nulls (as is happening now), but that badly named, duplicated or extraneous parameters are refused, with a specific errormessage stating what the issue is. Similarly, I'd like to reply with an explanatory message if a parameter is passed wth an incorrect type, rather than just a message "org.xml.sax.SAXException: Bad types" that does not detail which parameter is problematic.
    1) The client can receive a "500" response, with an "Internal Server Error" message, although I'm having trouble figuring out exactly when this happens. I'd like to be able to configure what message they receive, in order to give them more information about what they got wrong.
    I just don't know where to start with this - I'm sure there must be ways of configuring all this!
    As much info about an example of what I'm looking at as seems sensible follows. Please forgive me if I've used incorrect terminology somewhere! :)
    Thanks a heap,
    Tracey
    ======================
    So, let's say I have a Java class called DiaryService, with a method called createDiary that takes the appropriate data and returns a confirmation/error message - it starts like this :
        public String createDiary(final String library,
                final BigDecimal companyCode, final Date diaryDate,  final Date actionedDate,
         final String diaryMessage) throws RemoteException And another called GetDiary that returns a Diary as a SOAP bean which looks like this :
        public DiarySoapBean getDiary(final String library,
                final BigDecimal companyCode, final Date diaryDate) throws RemoteExceptionAxis very helpfully lets me access the createDiary and getDiary, by sending XML messages like this example:
    <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <ns1:createDiary soapenc:root="1" xmlns:ns1="http://localhost:8080/morph_zta/services/DiaryService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
    <library xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">ZRMORPHTA</library>
    <companyCode xsi:type="xsd:Decimal" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">1</companyCode>
    <diaryDate xsi:type="xsd:date" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">2007-01-01Z</diaryDate>
    <actionedDate xsi:type="xsd:date" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">2007-01-01Z</actionedDate>
    <diaryMessage xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"/>Blah blah blah</diaryMessage>
    </ns1:createDiary>
    </soapenv:Body>If I rename a parameter, the service may get called, with some other data in that parameter or not, or may not get called at all and the user get a "SAXException: Bad types" error message. I would like it to return a message stating that the parameter is not expected.
    If I duplicate a parameter, the first occurrence appears to be used, and the next ignored. I would like it to return a message saying tnat the extra parameter is not expected.
    If I add gibberish parameters, I get a "No such operation" message. I would like to be able to tell which parameters are incorrect.
    We have entries like this in web.xml:
        <listener>
            <listener-class>
                   org.apache.axis.transport.http.AxisHTTPSessionListener
         </listener-class>
        </listener>
        <servlet>
            <display-name>Apache-Axis Servlet</display-name>
            <servlet-name>axis</servlet-name>
            <servlet-class>
                   com.workingmouse.webservice.axis.SpringAxisServlet
         </servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>axis</servlet-name>
            <url-pattern>/servlet/AxisServlet</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>axis</servlet-name>
            <url-pattern>*.jws</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>axis</servlet-name>
            <url-pattern>/services/*</url-pattern>
        </servlet-mapping>     And these bits in our server-config.wsdd :
        <!-- Global config options -->
        <globalConfiguration>
            <parameter name="adminPassword" value="admin"/>
            <parameter name="attachments.Directory" value="./attachments"/>
            <parameter name="attachments.implementation"
                    value="org.apache.axis.attachments.AttachmentsImpl"/>
            <parameter name="sendXsiTypes" value="true"/>
            <parameter name="sendMultiRefs" value="true"/>
            <parameter name="sendXMLDeclaration" value="true"/>
            <parameter name="axis.sendMinimizedElements" value="true"/>
            <requestFlow>
                <handler type="java:org.apache.axis.handlers.JWSHandler">
                    <parameter name="scope" value="session"/>
                </handler>
                <handler type="java:org.apache.axis.handlers.JWSHandler">
                    <parameter name="scope" value="request"/>
                    <parameter name="extension" value=".jwr"/>
                </handler>
        <handler name="acegiAuthenticationHandler" type="java:{our}.AcegiAuthenticationHandler"/>
            </requestFlow>
         <responseFlow>
              <handler name="OutgoingSOAPMessageViewer" type="java:{our}.OutgoingSOAPMessageViewer"/>
         </responseFlow>
        </globalConfiguration>
        <!-- Handlers -->
        <handler name="LocalResponder"
                type="java:org.apache.axis.transport.local.LocalResponder"/>
        <handler name="URLMapper"
                type="java:org.apache.axis.handlers.http.URLMapper"/>
        <handler name="Authenticate"
                type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
        <!-- Axis services -->
        <service name="AdminService" provider="java:MSG">
            <parameter name="allowedMethods" value="AdminService"/>
            <parameter name="enableRemoteAdmin" value="true"/>
            <parameter name="className" value="org.apache.axis.utils.Admin"/>
            <namespace>http://xml.apache.org/axis/wsdd/</namespace>
        </service>
        <service name="Version" provider="java:RPC">
            <parameter name="allowedMethods" value="getVersion"/>
            <parameter name="className" value="org.apache.axis.Version"/>
        </service>
        <!-- Global config options -->
        <transport name="http">
            <requestFlow>
                <handler type="URLMapper"/>
                <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
            </requestFlow>
        </transport>
        <transport name="local">
            <responseFlow>
                <handler type="LocalResponder"/>
            </responseFlow>
        </transport>
        <service name="DiaryServices" provider="Handler" style="rpc">
            <parameter name="handlerClass" value="com.workingmouse.webservice.axis.SpringBeanRPCProvider"/>
            <parameter name="springBean" value="diaryServices"/>
            <parameter name="springBeanClass" value="uk.co.trisystems.morph.ta.diary.soap.DiaryService"/>
            <parameter name="allowedMethods" value="createDiary getDiary"/>
            <parameter name="scope" value="application"/>
            <beanMapping qname="ns:diary" xmlns:ns="urn:DiaryService" languageSpecificType="java:uk.co.trisystems.morph.ta.diary.soap.DiarySoapBean"/>
        </service>Cheers
    Tracey Annison

    Hi,
    I have solved the problem, I forgot a parameter in the select, so java tells the an error. But now I have another problem. The procedure doesn't execute the order by. I pass the couple column_name order_type in a string as ("provider_description desc") dinamically but the procedure doesn't execute the ordering. Why?
    Thanks, bye bye.

  • I have a graph with the x axis for volume and the y axis for mass, I need the data to correlate with the volume and mass, I can not simply label the axis this way, how can i do this?

    This is extremely urgent and please help!!!

    Do you mean something like this?
    If so, go to the Chart inspector. On the Axis tab of the Chart Inspector you can set the format for each axis. Choose "custom" then type in the units at the end of the format that is there.  You can't get fancy, like having superscripts or anything.
    Alternatively you can show the axis titles, also in the chart inspector:

  • Static method and variables doubts

    i have a doubt
    i have the following method
    private static void checkActionType(String action) {
    if (action.startsWith(" a")) {
    ++totalAddedActions;
    } else if (action.startsWith(" c")) {
    ++totalChangedFolders;
    } else if (action.startsWith(" p")) {
    ++totalPersonalizedActions;
    } else if (action.startsWith(" r")) {
    ++totalRemovedActions;
    } else if (action.startsWith(" v")) {
    ++totalViewedActions;
    } else if (action.startsWith(" u")) {
    ++totalUpdateActions;
    to use it, i need to declare my int variables static, because im calling this method from another static method that is called by main method.
    but this can cause me problems ?
    if i have two instances of this class running, my statics int will show the right value?
    there is a better approach?

    Here is my class, i want some advices to know if i am doing right, because everything is a little new for me.
    My class, read a log file and based upon a regular expression, it can retrieve a general statistic or a personal statistic.
    package br.com.organox.aggregator;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Vector;
    import org.apache.oro.text.regex.*;
    public class LogFileReader {
    private static Pattern regexpPattern;
    private static PatternMatcher patternMatcher;
    private static PatternCompiler patternCompiler;
    private static PatternMatcherInput patternInput;
    private static MatchResult matchResult;
    private static final String patternString = "^[^\']+User\\s+\'([^\']+)\'[^\']+session\\s+\'([^\']+)\'\\s+(\\S+)";
    // Integers used to store number of user, sessions and specific actions
    private static int totalUsers;
    private static int totalSessions;
    private static int totalAddedActions;
    private static int totalChangedFolders;
    private static int totalPersonalizedActions;
    private static int totalRemovedActions;
    private static int totalUpdateActions;
    private static int totalViewedActions;
    public static void main(String[] args) {
    if (args.length == 0) {
    System.out.println("No file name was specified");
    printClassUsage();
    } else if (args.length == 1) {
    printGeneralData(args[0]);
    } else if (args.length == 2) {
    System.out.println("You must set file name, data value and data type in order to " +
    "this class run properly");
    printClassUsage();
    } else {
    printSelectedData(args[0],args[1],args[2]);
    public static void printGeneralData(String fileName) {
    String data = "";
    //Users and the Session Vector are used to avoid count repeated values.
    Vector usersVector = new Vector();
    Vector sessionVector = new Vector();
    patternCompiler = new Perl5Compiler();
    patternMatcher = new Perl5Matcher();
    try {
    regexpPattern = patternCompiler.compile(patternString);
    } catch (MalformedPatternException mpe) {
    System.out.println("Error Compiling Pattern");
    System.out.println(mpe.getMessage());
    try {
    FileReader fileRead = new FileReader(fileName);
    BufferedReader buffRead = new BufferedReader(fileRead);
    while ((data = buffRead.readLine())!= null) {
    patternInput = new PatternMatcherInput(data);
    while(patternMatcher.contains(patternInput,regexpPattern)) {
    matchResult = patternMatcher.getMatch();
    // Avoid to insert repeated data in user and session Vectors
    if (usersVector.lastIndexOf(matchResult.group(1)) == -1) {
    usersVector.add(matchResult.group(1));
    if (sessionVector.lastIndexOf(matchResult.group(2)) == -1) {
    sessionVector.add(matchResult.group(2));
    increaseActionType(matchResult.group(3));
    for (int i=0;i<usersVector.size();i++) {
    totalUsers++;
    for (int i=0;i<sessionVector.size();i++) {
    totalSessions++;
    fileRead.close();
    buffRead.close();
    } catch (IOException ioe) {
    System.out.println("An I/O error occurred while getting log file data");
    ioe.printStackTrace();
    System.out.println("Users logged : " + totalUsers);
    System.out.println("Sessions opened : " + totalSessions);
    System.out.println("Added contents : " + totalAddedActions);
    System.out.println("Changed folders : " + totalChangedFolders);
    System.out.println("Personalized contents : " + totalPersonalizedActions);
    System.out.println("Removed contents : " + totalRemovedActions);
    System.out.println("Viewed Contents : " + totalViewedActions);
    System.out.println("Updated contents : " + totalUpdateActions);
    public static void printSelectedData(String fileName,String value,String valueType) {
    String data = "";
    String user = "";
    //Flag used to print the right result on screen
    String printFlag = "";
    Vector sessionVector = new Vector();
    Vector userVector = new Vector();
    Vector actionVector = new Vector();
    patternCompiler = new Perl5Compiler();
    patternMatcher = new Perl5Matcher();
    try {
    regexpPattern = patternCompiler.compile(patternString);
    } catch (MalformedPatternException mpe) {
    System.out.println("Error Compiling Pattern");
    System.out.println(mpe.getMessage());
    try {
    FileReader fileRead = new FileReader(fileName);
    BufferedReader buffRead = new BufferedReader(fileRead);
    while ((data = buffRead.readLine())!= null) {
    patternInput = new PatternMatcherInput(data);
    while(patternMatcher.contains(patternInput,regexpPattern)) {
    matchResult = patternMatcher.getMatch();
    if (valueType.equalsIgnoreCase("-user")) {
    printFlag = "userPrint";
    if ((matchResult.group(1).equalsIgnoreCase(value))) {
    userVector.add(matchResult.group(1));
    // avoid insert a repeated value inside session vector.
    if (sessionVector.lastIndexOf(matchResult.group(2)) == -1) {
    sessionVector.add(matchResult.group(2));
    increaseActionType(matchResult.group(3));
    if (userVector.size() == 0) {
    printFlag = "userPrintError";
    } else if (valueType.equalsIgnoreCase("-session")) {
    printFlag = "sessionPrint";
    if ((matchResult.group(2).equalsIgnoreCase(value))) {
    user = matchResult.group(1);
    sessionVector.add(matchResult.group(2));
    increaseActionType(matchResult.group(3));
    if (sessionVector.size() == 0) {
    printFlag = "sessionPrintError";
    } else if (valueType.equalsIgnoreCase("-action")) {
    printFlag = "actionPrint";
    if ((matchResult.group(3).equalsIgnoreCase(value))) {
    if (userVector.lastIndexOf(matchResult.group(1)) == -1) {
    userVector.add(matchResult.group(1));
    actionVector.add(matchResult.group(3));
    if (actionVector.size() == 0) {
    printFlag = "actionPrintError";
    fileRead.close();
    buffRead.close();
    } catch (IOException ioe) {
    System.out.println("An I/O error occurred while getting log file data");
    ioe.printStackTrace();
    if (printFlag.equals("userPrint")) {
    for (int i=0;i<sessionVector.size();i++) {
    totalSessions++;
    System.out.println("Sessions opened by user " + value + " : " + totalSessions);
    System.out.println("Added contents by user " + value + " : " + totalAddedActions);
    System.out.println("Changed folders by user " + value + " : " + totalChangedFolders);
    System.out.println("Personalized contents by user " + value + " : " + totalPersonalizedActions);
    System.out.println("Removed contents by user " + value + " : " + totalRemovedActions);
    System.out.println("Viewed contents by user " + value + " : " + totalViewedActions);
    System.out.println("Updated contents by user " + value + " : " + totalUpdateActions);
    } else if (printFlag.equals("userPrintError")) {
    System.out.println("This user " + value + " was not found on log file");
    } else if (printFlag.equals("sessionPrint")){
    System.out.println("Session " + value + " was opened by user " + user);
    System.out.println("Added contents by session " + value + " : " + totalAddedActions);
    System.out.println("Changed folders by session " + value + " : " + totalChangedFolders);
    System.out.println("Personalized contents by session " + value + " : " + totalPersonalizedActions);
    System.out.println("Removed contents by session " + value + " : " + totalRemovedActions);
    System.out.println("Viewed Contents by session " + value + " : " + totalViewedActions);
    System.out.println("Updated contents by session " + value + " : " + totalUpdateActions);
    } else if (printFlag.equals("sessionPrintError")){
    System.out.println("This session " + value + " was not found on log file");
    } else if (printFlag.equals("actionPrint")){
    System.out.println("Action " + value + " was performed " + actionVector.size() +
    " times for " + userVector.size() + " different user(s)");
    } else if (printFlag.equals("actionPrintError")){
    System.out.println("This action " + value + " was not found on log file");
    } else {
    System.out.println("Wrong search type!");
    System.out.println("Accepted types are: ");
    System.out.println("-user -> Search for a specified user");
    System.out.println("-session -> Search for a specified session");
    System.out.println("-action -> Search for a specified action");
    private static void increaseActionType(String action) {
    if (action.startsWith("a")) {
    ++totalAddedActions;
    } else if (action.startsWith("c")) {
    ++totalChangedFolders;
    } else if (action.startsWith("p")) {
    ++totalPersonalizedActions;
    } else if (action.startsWith("r")) {
    ++totalRemovedActions;
    } else if (action.startsWith("v")) {
    ++totalViewedActions;
    } else if (action.startsWith("u")) {
    ++totalUpdateActions;
    }

  • Select and Cursor doubt

    Dear All,
    I got a doubt b/n select and cursor.
    I read in one oracle book that select into clause will actually tries to get the data twice, Whereas the cursor will query only ones.
    Is this the case in Oracle 10g or both the select and cursor will fetch the data only ones.
    Ex
    select sal into v_sal from emp where empno = 7788 --> Ones it hit the data, oracle will again scan the entire set of records in the emp table for another match.
    Whereas
    Cursor c_sal is select sal from emp where empno = 7788; --> This will do the fetch operation only ones.
    Is this the case still True in Oracle 10g or 11i.
    Appreciate your help.
    Thankyou very much
    Madhu K

    the query is processed as follows (this is from ora doc)
    Parse:
    – Search for identical statement
    – Check syntax, object names, and privileges
    – Lock objects used during parse
    – Create and store execution plan
    Execute: Identify rows selected
    Fetch: Return rows to user process
    for cursor also same things are performed, but cursor is private sql area in which you can processes one row at a time, you can use cursor in your pl/sql program and access one row a time,
    so if you say,
    cursor c1 is select * from emp;
    c1 is private sql area where you can processes single row of emp , make comparisons, calculations etc,
    once you close the cursor this area is released and can be used by another cursor,
    the basic query processing rules remains the same,

  • SAP CRM and ECC doubt

    Hello,
    Could anyone help me for my doubt in the SAP CRM.
    When have a Two systems SAP CRM and ECC, If we create a role in CRM (Eg. Employee) how this role is transfered to ECC ?

    Go to http://help.sap.com/search/sap_trex.jsp, Select "SAP Best Practices" instead of "SAP Documentation" on top.
    Hope this helps.
    Regards,
    Kaushal

  • Userdefined reports chart, x-, y-, z-axis ( 440 views and no solution)

    Hello,
    is there an option to add a third axis to a userdefined report of the charttype? If so, how? and if it is not possible does anybody know of a workaround? Some sort of integration of Anychart into SQL Developer similar like it is done with APEX?
    kr
    JR
    null

    Don't you think if there was a solution, one of those 440 people would have suggested one.
    You could write your own extension to integrate Anychart (whatever that is ), but if you have sophisticated reporting requirements you would be better off looking for a proper reporting tool.

Maybe you are looking for

  • Hp officejet pro 8600 plus will print but won't scan.

    Recently I had some kind of software conflict with my printer in Windows 7 so I deleted it and reloaded the printer software. I selected enable scanning at set up. It is a network printer and everyone can print to the printer. When I went to scan tod

  • Re: BT Home Hub Manager problems.

    Just rung 0800... and been told to use the 'PAPERCLIP' to reset the HH; this was needed to help improve my 0.35MB D & 0.29MB U speed! Best speed should be 3MB for download; which I've obviously never had! We've continued to experience this terrible s

  • Osx lagging badly

    Hi, I have a Macbook Pro Late 2011 and I have been having major problems with it in the last 24hours, I shut it down and when I restarted it it laggs like crazy everytime i open a site it freezes for about 1-2 minutes eachtime i try to open a new pro

  • Can't generate code from class diagram

    I have installed Studio Enterprise 8. I tried to create a class, but when I right-clicked on a class, there was no "Generate Code" on the contextual menu. I've tried the Help guide as pasted below. Would appreciate anybody's help. Thanks. To generate

  • Can't login

    Hi, i've 2 issues: 1) if skype is already logged in - it constantly switches status from offline to online and back 2) if i logout, i can't login again. tested @ Mac (6.15.335) (10.6. and 2 WinClassic clients (6.21.0.104) (win8 and win8.1) On all aff