ca_connectをするとIOC上にそのEPICSレコードに対応する構造体が準備されます。 PC側はこの構造体に対してアクセスするので、一度ca_connectしてしまえば同じレコードに対して再びca_connectする必要はありません。これは、IOCをリブートしたときも同じで、勝手に再接続しますのでユーザーコードで同じEPICSレコードに対して2度とca_connectする必要はありません。実際には、ca_connect(に該当する操作)で確保される 構造体は不要になればfreeされるので、何度connectされても害はないはずですが、 freeの部分にバグがいて(EPICSかVxWorksかは不明)、だんだんIOC上のallocated memoryが増えたり、max blockを越えたりしてIOCがお隠れになります。
結果
ca_connectを1回だけするようにして、IOCがこけることはなくなった。
この現象にはいくつかの原因があったと思われます。
TeeChartのseries.addxyでxをtime関数を使っていると、timeは日付情報をもっていませんので23:59:59...のあと0になってしまいます。timeの代わりにnowを使えば大丈夫です。
結果
Timeではなくnowを使えばよい。
TeeChartのバグっぽいのですが、Chart editorで軸(bottom axis)のlabels/styleで styleをautomaticではなくvalueにしておくとちゃんと表示してくれるようです。なお、 何時何分と表示したいときはlabels/formatをhh:mmとしておきます。
結果
横軸のpropertyのlabels/sytleをautomaticでなくvalueにする。
TeeChart Pro V5からの新機能でprint preview機能があります。multi chartの場合 preview画面まではちゃんと(でもないが)出ますが、それを印刷しようとすると 一番最初のものしか印刷しません。これについてはSteema社(TeeChart製造元) に問い合わせのmailを出しましたがナシのつぶてです。また、前からある printpartial機能も同じように動作しません。どうもこのあたり、v4であった バグをツブしたおかげで全体にもっとひどいバグがとりついたと思われます。 とりあえず、form全体を.printで印刷することはできますので、うるさいことを 言わなければ我慢できます。
結果
未解決。form全体のprintを使えばとりあえずは、なんとかなるかぁ?
single chartの場合はTeeCommanderを使うのが楽です。multi chartの場合、 uses節にjpegユニットを追加し、ついでに次のようなボタンを用意すればできます。 (savePictureDialogをこのフォームに落としておきます)。もっと知りたい 奇特な方はhelpでjpegを探してください。
procedure THERbcm.SaveJpegClick(Sender: TObject);
var jp : Tjpegimage;
begin
  jp := TjpegImage.create;
  try
    with jp do
    begin
      compressionquality := 100;
      Assign(セーブしたいフォーム名.getformimage);
      if savePictureDialog1.execute then
       begin
         SaveToFile(savePictureDialog1.filename) ;
       end;
    end;
  finally
    jp.Free;
  end;
end;
結果
上のコードをみて考えてくだされ。
非力なPCで無理無理TeeChartてんこ盛り、更新スピード高速なアクセスをすると 色々超常(でもないこともあるが)現象が起きます。ここで非力なPCと言っているのは
結果
未解決です。解決の見込みもありません。
EPICS channel Access Reference manulaによると、ca_task_initialzeは "Should be called once prior to maing any of the other channel access calls."となっており、ca_task_exitは"Performed automatically at task (or process) exit."となっています。実はca_task_initialzeなしのコードを 間違って作ってしまい、動かしていたことがありますが、不思議なことに特には 問題なく動いてしまいました。とはいっても、なかでmallocとかしているようですから、 安全のためにもform createのときに初めにca_task_initializeはすべきでしょう。 ca_task_exitについては本当にしなくて良いのか分かりません。
結果
まあ、マニュアルに従うのが安全ですね。