Sorry for the spam, I found the
information for the big arrays (using the extended message header), I will now
try to implement is ASAP.
Sincerely,
Alain Bertrand
Currently the client implementation we
made support arrays up to 65K elements, as we use only the 16 bit element
count. I didn't found yet how Epics sends over arrays bigger than that and
until I find it, I can't implement a fix.
However I will try to check if there is
some hints somewhere.
If somebody do have the info about how the
header is constructed for bigger arrays (and at the same time for variable
sized array) it would help me adding those features inside the library.
Sincerely,
Alain Bertrand
From: Perrier Pierre
[mailto:[email protected]]
Sent: Thursday, September 22, 2011
10:42 AM
To: Bertrand Alain
Cc: [email protected]
Subject: RE: Epics C# Library
problems
Hello,
It’s what I’ve did for the monitor
and it doesn’t seem to work. With this context I’ve tested the
monitoring of a string waveform record which has a length 2 elements and all
seems ok. I think that the problem is caused by the length of my waveform
record which is 307,200
Cheers,
Pierre Perrier
For a simple get you should do the
following:
EpicsClient client
= new EpicsClient();
client.Config.ServerList.Clear();
client.Config.ServerList.Add("129.129.130.88:5064");
// replace with the broadcast
address or with the server / gateway one
EpicsChannel<int[]> record =
client.CreateChannel<int[]>("TOTO:INT");
int[] data
= "">
for (int i = 0; i <
data.Length; i++)
{
if (i != 0)
Console.Write(", ");
Console.Write(i);
}
Console.WriteLine("");
For a monitor:
static void Main(string[] args)
{
EpicsClient client = new EpicsClient();
client.Config.ServerList.Clear();
client.Config.ServerList.Add("129.129.130.88:5064");
// replace with the broadcast
address or with the server / gateway one
EpicsChannel<int[]> record =
client.CreateChannel<int[]>("TOTO:INT");
record.MonitorChanged += new
EpicsDelegate<int[]>(record_MonitorChanged);
Console.ReadKey();
}
static void record_MonitorChanged(EpicsChannel<int[]> sender, int[] newValue)
{
for (int i = 0; i < newValue.Length; i++)
{
if (i != 0)
Console.Write(", ");
Console.Write(newValue[i]);
}
Console.WriteLine("");
}
Personally I never use the Get
function.
Cheers,
Alain Bertrand
Hello,
I’m trying the EPICS C# Library in order to
create a client to manage a Camera IOC. Unfortunately, I have some problems
with the monitoring of waveforms records.
I want to monitor a waveform PV which contains data of
a 640x480 gray scale picture (integers from 0 to 255). So it’s a large
waveform of 307,200 elements. When I process the following code, I catch
a “Server did not respond in Time to Get Request” exception ( or ,
in debug mode, the code doesn’t return).
EpicsClient m_client = new EpicsClient();
try{
EpicsChannel<int> m_acquisitionCamera =
m_client.CreateChannel<int>(“CameraJAI :Acquisition”) ;
Int[] l_data = m_acquisitionCamera.Get<int[]>() ;
} catch (Exception e){
System.Console.WriteLine(e.Message) ;
System.Console.WriteLine(e.StackTrace) ;
}
Is there a way to fix this problem ? Any advices ? In order
to really create a monitor, someone can show me a short sample of an EPICS C#
monitor which manages an array record.
Ce message peut contenir
des informations confidentielles dont la divulgation est à ce titre
rigoureusement interdite en l'absence d'autorisation explicite de l'émetteur.
Dans l'hypothèse où vous auriez reçu par erreur ce message, merci de le
renvoyer à l’émetteur et de détruire toute copie.
P Pensez à l’environnement avant
d’imprimer.
|