Jim
> --
> You received this message because you are subscribed to the Google Groups "IADS" group.
> To post to this group, send email to ia...@googlegroups.com.
> To unsubscribe from this group, send email to iads+uns...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/iads?hl=en.
>
If you give me a ballpark rate, I'd probably be able to tell you if you should be concerned,
Jim
--------------------------------------------------
From: "Mike" <michael...@navy.mil>
Sent: Tuesday, March 27, 2012 10:32 AM
To: "IADS" <ia...@googlegroups.com>
Subject: [IADS] Re: Multiple outputs vs blobs
Wow... that is quite a load. So essentially you're going to have an
algorithm that produces blobs packet with 550ish parameters at a sample rate
of 806. Yes if that's the magnitude then let me retract my other statement.
Maybe you should process these blobs in a custom display. The total sample
rate will probably well exceed 200k samples per second so in that case, stay
blob all the way to the display. Having 550 parameter of that sample rate
going all to one display is going to be a pretty big performance hit... on
the other hand, having a single blob parameter at 806 sps with 2k unit
length is probably doable.
> So, the tie in with the blob question, is I am considering a derived
> algorithm, possibly run as an IAP, to generate the 6+ results for each
> parameter as a blob and then just fetching those results in the
> activex display for additional processing and display. My concern
> is the number of parameters in this option is 3000+ parameters to
> fetch after decoming the blobs. I think I can run at a much lower
> rate, but still a lot of data to retrieve.
Yes, I see what you mean and I would avoid that 3000+ parameter idea to a
single display if at all possible. The reason why I mentioned to crack the
blobs with the decom function is because all the results can be used in
other non-custom displays.... but in this case, for performance sake, I
would say just send the whole 'bulk' down to the custom display and process
it en mass.
Having said that, if you need to use an element from the blob for another
display, you can pinpoint a number of decom derived functions for this
purpose.
Yep, I would go IAP and I would also use the "SetTriggerParam" directive to
force this function to be processed as a trigger based function (compute on
the occurrence of given parameter's value or better known as 'order
arrival'). Using this mechanism, you can ensure you've taken a good clean
snapshot of the entire array of incoming data from the PCM using the oldest
entry in major frame as the trigger (or whatever is appropriate based on the
PCM frame filling technique).
So how do you intend on getting that many input parameters into your
function? If you use the MultiIn technique, that will unfortunately prevent
you from using the Trigger technique above. Also, performance wise, it's a
lot slower than the MultiIn technique using dataGroups (as in the code
example). Notice that the helper function creates an individual parameter
for each data element (expensive).
We haven't actually put the two methods together to create bulk input
arguments from a list while working in the order arrival world (I'll add
that to the list). For something of this magnitude, the function line input
interface gets cumbersome, but in truth, there's no limit to how long your
equation is in the PD table. You could output your equation with the 500
arguments programmatically and then copy the function into the equation.
Honestly, at this point, I think it's your only choice given the magnitude
of the data processing. If you're constrained on time, I would go this
safest route. However, if you have time on your side, you could go the
multiIn/DataGroup route and then assess the performance hit on the Iap
server. If it's overwhelming the server then you can easily convert the
function to an argument based function.
I'm sure I've generated more questions than I've answered, but I'm glad you
asked before you implemented ;)
Jim
Jim
It's possible you have an older version of the tutorial.
Go to http://iads.symvionics.com/downloads/ and download "Creating a Custom
Derived Function using VS2005". In the PDF file, look on page 22 "Returning
Multiple Results from your Custom Function". Read that section over.
If you have any questions, let us know,
Jim
--------------------------------------------------
From: "Sherman, Paul" <pshe...@smartronix.com>
Sent: Friday, March 30, 2012 9:18 AM
To: <ia...@googlegroups.com>
Subject: [IADS] IADS - blobs
Good question.
Unfortunately, at this point in time, Iads won't allow you to create a
"blob" property in order to connect the data (like all the other common data
types). This is probably due to shortsightedness on our side. I suppose we
were thinking that if you were processing blobs, you probably wanted to
process every data sample (in a streaming fashion). That may not be true if
you are willing to let some of the video frames pass by without being
displayed (and might be desirable in some instances).
Consequentially, it's going to make the programming job a bit more involved.
If you want to send blob data to your display, you will have to use the
"IAcceptIadsParameter" and "ISynchronizeOutput" interfaces. I just looked on
the web site and found that the VS2005 C++ example does not include the
"SampleEveryDataPoint" class. Not good.
Let me attach it to this post, but we need to get it up on the web site
asap.
Read through the code and see if it makes sense. If you're not accustomed to
implementing interfaces in C++/Com then it might be a bit of a challenge. If
you can send me your zipped up project (again privately jim at iads-soft dot
com), I can probably add all the necessary code and send it back.
If you can't send me the project, then I can step you through adding the
code. It shouldn't take too long,
Jim
--------------------------------------------------
From: "Sherman, Paul" <pshe...@smartronix.com>
Sent: Monday, April 16, 2012 9:14 AM
To: <ia...@googlegroups.com>
Subject: [IADS] Another blob related question
Check out the code I sent. If it's confusing then try to send me the zipped
up display project (in private email). I can easily get the code to the
point where you have a pointer to the 16 bit data payload. At that point
you'll have to bitslice the data and draw it to the appropriate scan line on
the screen. We can probably help with that as well if you get stuck.
If it helps, you can just send me the h/cpp file from the ActiveX control. I
don't actually need the entire project. I can build up a test project and
inject in your existing code and then add all the "every data sample" items.
Jim
--------------------------------------------------
From: "bkelly" <goo...@bkelly.ws>
Sent: Monday, April 16, 2012 10:25 AM
To: "IADS" <ia...@googlegroups.com>
Subject: [IADS] Re: Another blob related question
I received an email from you, but here is the attachment. From the google
site I expected some code. Please reply to all so Paul will get it, and in
case the Air force blocks it, I will get it at home.
Bryan Kelly
Wyle Systems Analyst
83FWS/DO4
1287 Florida Ave
Tyndall AFB FL 32402
Phone: 850-283-8667
Brett,
One of our developers will look the C++ code over and reply with the changes for C#.
The process should generally be the same, in that you will have to create a blob as output, but how the necessary Arrays are handled in C# may be a little different.
Thank you,
Adam Chant
Symvionics, Inc.
IADS Application Engineer
(661) 273-7003 x 210
To unsubscribe from this group and stop receiving emails from it, send an email to
iads+uns...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/iads/31a48f2b-e469-42e2-9afa-95625a82a537%40googlegroups.com.
Brett,
I’m not sure if this has ever been done before in C# honestly. You’d be breaking new ground.
Essentially we would need to figure out how to mimic the C++ code in the tutorial to return a blob (see below).
So you’d need to allocate an array of ‘bytes’, the inject the size of the blob (in bytes) into the first 4 byte field, the pack
in the N arguments into the array, and return that array.
I’m not sure how to do this in C#, but maybe you do.
If anyone on the group has done this before, can you post a code snippet?
Jim
// Get a pointer to the safeArray data that we allocated in the "initialization stage" above
BYTE* sa;
::SafeArrayAccessData( mSA, (void**)&sa );
// Now access the first 4 byte integer so we can inject the Blob size (in bytes). This step will become vital when variable size blobs are implemented
unsigned __int32* blobSizeInBytes = (unsigned __int32*)sa;
// Set the blob size in bytes
*blobSizeInBytes = mBlobSizeInBytes;
// Now let's inject the data into the remaining part of the Blob.
// Get a pointer to the payload portion of the Blob (starting at 5th byte)
float* payloadValues = (float*)(sa + sizeof(unsigned __int32));
// Set arg2 and arg3 into the blob payload (array), plus their sum, product, and ratio
payloadValues[0] = (float)arg2;
payloadValues[1] = (float)arg3;
payloadValues[2] = (float)(arg2+arg3);
payloadValues[3] = (float)(arg2*arg3);
payloadValues[4] = (float)(arg2/arg3);
// Likewise, if you had your own internal function to compute the results, you could simply pass in the input args
// and a reference to this array. Your function would simply write the result directly into the array
// Make sure you maintain a consistent order to your outputs, because we'll have to extract them "one by one" later
// CalculateMyResults( arg2, arg3, payloadValue );
SafeArrayUnaccessData( mSA );
// Finally, set the blob output type and reference the safeArray we just built
dataOut->vt = VT_ARRAY|VT_UI1;
dataOut->parray = mSA;
From: ia...@googlegroups.com [mailto:ia...@googlegroups.com] On Behalf Of Adam Chant
Sent: Monday, June 10, 2019 8:44 AM
To: ia...@googlegroups.com
To view this discussion on the web visit https://groups.google.com/d/msgid/iads/9DDBD42642D5B74CBB6127A40A2492E3A0EE75%40EXCHANGE2010.symvionics.com.
Brett-
Below is a function that returns a blob in C#. To access the different pieces you need to use our DECOM() function in a derived parameter, like so:
Decom( Class1Blob, 0, 4, 0,31,0,1,0)
Where Class1Blob is of ParamType = blob and DataSourceArgument = IadsFunctionBlob.Class1()
This would return the first 4 bytes of the data that comes from this function as an integer ( which you must also indicate in the ParamType column of the configuration editor ).
There might be better ways to handle the “byte transfer” between the return array and your native data in C#. As Jim indicated, none of us here at IADS are C# programmers. 😉
-Kathy
namespace IadsFunctionBlob
{
public class Class1 : IadsFunctionLib.IIadsFunction
{
byte[] dataOut;
byte[] arraySize;
byte[] intOut;
public void Compute(ref object dataIn, ref object returnData )
{
Array dataInArray = (Array)dataIn;
if (dataOut == null)
{
//first time through
dataOut = new byte[32];
arraySize = BitConverter.GetBytes((int)32);
for (int i = 0; i < 4; ++i)
dataOut[i] = arraySize[i];
}
for (int i = 1; i < 32/4; ++i)
{
intOut = BitConverter.GetBytes(i);
for (int j = 0; j < 4; ++j)
dataOut[i * 4 + j] = intOut[j];
}
returnData = dataOut;
To view this discussion on the web visit https://groups.google.com/d/msgid/iads/01c801d51fba%24cbcfd0b0%24636f7210%24%40gmail.com.
To unsubscribe from this group and stop receiving emails from it, send an email to ia...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iads/31a48f2b-e469-42e2-9afa-95625a82a537%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "IADS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ia...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/iads/9DDBD42642D5B74CBB6127A40A2492E3A0EE75%40EXCHANGE2010.symvionics.com.
--
You received this message because you are subscribed to the Google Groups "IADS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ia...@googlegroups.com.