比如我要对60根电热丝进行通电加热。对电热丝通电的选项一个有两个,一个加热到的温度,一个加热的功率。60根电热丝的设置各不相同。用户想怎么设置就怎么设置。功率最大是10.设置为10表示一直加热。设置为0.表示不加热。设置为1-9的时候,表示加热1-9秒。比如设置为2,那就是加热2秒,停止加热8秒。然后再加热2秒,再停止8秒。(设置为3,就是加热3秒,停止加热7秒)循环下去,直到加热到指定的温度。60根发热丝的加热过程都是这样子的。我现在是用60个定时器控制加热的时间。60个定时器控制不加热的时间,总感觉这样设计有点太庞大了。有什么比较巧妙的方法进行加热吗?求解了,谢谢大家。

解决方案 »

  1.   

    what?什么意思?我程序都已经设计好了啊,但是我觉得这种方法不好啊,所以想求解大家。
      

  2.   

    用一个定时器可同时控制加热和停止的时间,这样就减少了60个。下面是个例子,不知我对LZ理解正确否:
    type
      TTimeRecord = record
        ExecTime: Integer;
        StopTime: Integer;
        Count: Integer;
        IsExecute: Boolean;
      end;var
      TimeRec: TTimeRecord;procedure TForm1.Button1Click(Sender: TObject);
    begin
      TimeRec.ExecTime := 3;
      TimeRec.StopTime := 7;
      TimeRec.Count := 0;
      TimeRec.IsExecute := True;
      Timer1.Enabled := True;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Count: Integer;
    begin
      Inc(TimeRec.Count);
      if TimeRec.IsExecute then Count := TimeRec.ExecTime
      else Count := TimeRec.StopTime;
      if TimeRec.Count = Count then
      begin
        TimeRec.Count := 0;
        TimeRec.IsExecute := not TimeRec.IsExecute;
        if TimeRec.IsExecute then
          Caption := '正在加热'
        else
          Caption := '停止加热';
      end
    end;
      

  3.   

    初始设定:
    Timer1.Interval := 1000
    Timer1.Enabled := False
      

  4.   


    只做一个frame,代码都在frame设计一次,然后拖60个进去.
      

  5.   

    可设计一个这样的type
      THot = recor
        ID: integer;  //代表每个加热丝的索引
        Watt: integer;//加热功率;
        StopTime: integer;//停止加热时间
        OK: Boolean;//已经完成
      end;然后用 TList 装载它;
    这样就可以用一个 Timer 循环 List 的列表项;
    这个只是思路,具体也没做过。
      

  6.   


    其实是这样的,加热与不加热时往板卡的通道里面写1或者0.比如加热7秒就是WriteDoChanel(1,index),7秒到了以后就是WriteDochanel(0,Index),时间到3秒以后就再一次WriteDoChanel(1,index),过了7秒后就再次WriteDochanel(0,Index),知道到达指定的温度,如上图所示,做左边的是监控温度,中间的是设置温度,最右边的是设置功率。
      

  7.   

    type
      THot = recor
        ID: integer;  //代表每个加热丝的索引
         maxc:integer; //最高温度
         Watt: integer;//加热功率;
        StopTime: integer;//停止加热时间
         p:integer; //当前进行的秒数, -1表示尚未开始或已经完成
        //OK: Boolean;//已经完成
      end;定时器周期为1秒;
    定时事件里循环检查Thot数组里的每一个p,如果是-1,则略过,否则根据p和watt来判断本秒该加热还是不加热 停止