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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: Epics C# Library problems |
From: | "Bertrand Alain" <[email protected]> |
To: | "Bertrand Alain" <[email protected]>, "Perrier Pierre" <[email protected]> |
Cc: | [email protected] |
Date: | Thu, 22 Sep 2011 11:45:29 +0200 |
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 From:
[email protected] [mailto:[email protected]] On Behalf Of Bertrand Alain 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.
|