1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 <2011> 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 <2011> 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: Epics C# Library problems |
From: | "Bertrand Alain" <[email protected]> |
To: | "Perrier Pierre" <[email protected]> |
Cc: | [email protected] |
Date: | Thu, 22 Sep 2011 11:34:08 +0200 |
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]] 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 De :
Bertrand Alain [mailto:[email protected]] 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 { 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 From: [email protected]
[mailto:[email protected]] On
Behalf Of Perrier Pierre 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.
|