3

私はCAPL言語にかなり慣れていません。したがって、.txt ファイルへのデータの書き込みに問題があります。これは私が書いたコードです:

    includes
{

}

variables
{
  message Generate_Num Gen;
  message Logger Logs;
  msTimer tim_100ms;
  msTimer tim_500ms;
  int time_over; // 500 ms flag.
  dword handle=0;
  float val=0;
  long index=0;
  int val_arr[512];
}

on start 
{
  time_over=0; 
  setWritePath("C:\\Users\\Türker\\Desktop\\soft_pro");
  handle= openFileWrite("Log.txt",1);
  Gen.Num_Data=1;
}

on envVar Logger_Sw
{   

    if(@this)
    {
      setTimer(tim_500ms,500);
      setTimer(tim_100ms,100);
    }
    else
    {
      cancelTimer(tim_500ms);
      cancelTimer(tim_100ms);
    }

}

on envVar Save_txt
{   
  if(@Save_txt==1)
    {
      int i;
      float val_n;
      for(i=0;i<elcount(val_arr);i++)
      {
        val_n=val_arr[i];
        writeProfileFloat("1","1",val_n,"Log.txt");
      }
    } 
}

on timer tim_100ms
{
  output(Gen);
  Gen.Num_Data++; 
  setTimer(tim_100ms,100);
}

on message Generate_Num
{
  if(time_over==1)
  {
   val=this.Num_Data;
   val_arr[index]=val; 
   Logs.Logged_Val=val;
   output(Logs);
   index++; 
   time_over=0;
  }

}

on timer tim_500ms
{
  time_over=1;
  setTimer(tim_500ms,500);
} 

サンプリングしたデータを「val_arr」配列に格納します。これをテキストファイルに書きたい。ただし、書き込まれたデータは常に上書きされます。「Save_txt」環境変数が書き込みジョブを実行します。

乾杯。

4

2 に答える 2

2

別のアクセス モードでファイルを開きます。

OpenFileWrite ("Log.txt",2);

mode=0 の場合、書き込みは ASCII モードで実行できます。
mode=1 の場合、書き込みはバイナリモードで実行できます。既存のファイルは上書きされます。
mode=2 は、ASCII モードで使用するファイルの末尾にデータを追加します。
mode=3 は、バイナリ モードのファイルの末尾にデータを追加します。

于 2016-10-12T07:52:16.970 に答える