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.
|