CPU服务

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI Services > Communication classes > CPU class >

CPU服务

Restart method

重启 方法允许CPU以不同的模式(BootMode)  启动。一旦与CPU建立连接,就可以使用 BootMode 属性查询当前的启动模式  。调用重启方法会自动放弃与CPU的连接(Disconnected 事件)。一旦在所需的模式下启动,就会重新建立连接(连接重启 事件)。

Delete memory

Memories 属性 的Upload方法  使得显示CPU的所有可用内存类型为 Memory 对象 成为可能  。

"ClearMemory" example

下面的例子删除了UserROM内存类型。一旦建立了连接,控制器开始进入诊断模式,其内存被删除。然后在CPU上进行冷重启。

// 全球通信对象的定义
Service service;
Cpu cpu;
/// <summary>
/// 生成和连接服务对象
/// </summary>
private void btConnectPvi_Click(object sender, System.EventArgs e)
{
  if ( service == null )
  {
    service = new Service("service");
    service.Connected += new PviEventHandler(service_Connected);
  }
  service.Connect();
}
 
/// <summary>
/// 如果服务对象连接成功,则连接CPU对象
/// </summary>
private void service_Connected(object sender, PviEventArgs e)
{
  if ( cpu == null )
  {
    // 创建CPU对象并添加事件处理程序
    cpu = new Cpu(service,"cpu");
    cpu.Connected += new PviEventHandler(cpu_Connected);
    cpu.Restarted += new PviEventHandler(cpu_Restarted);
    cpu.Memories.Uploaded += new PviEventHandler(Memories_Uploaded);
    // 为一个串行连接设置连接属性
    cpu.Connection.DeviceType = DeviceType.Serial;
    cpu.Connection.Serial.BaudRate = 57600;
    cpu.Connection.Serial.Channel = 1;
  }
  // Connect CPU
  cpu.Connect();       
}
/// <summary>
/// 当与CPU的连接成功建立时输出适当的信息
/// </summary>
private void cpu_Connected(object sender, PviEventArgs e)
{
  String strOut = String.Format("\"{0}\" connected. BootMode:{1}\r\n",
                                 ((Cpu)sender).Name,
                                 ((Cpu)sender).BootMode.ToString());
  this.tbStatus.Text += strOut;
            
  this.cpu.Memories.Upload();
  this.btRestartCpu.Enabled = true;
}
/// <summary>
/// 现在已知的内存类型
/// </summary>
private void Memories_Uploaded(object sender, PviEventArgs e)
{
  this.tbStatus.Text += "Memories uploaded\r\n";
}
 
/// <summary>
/// 在诊断模式下启动CPU
/// </summary>
private void btRestartCpu_Click(object sender, System.EventArgs e)
{
  this.cpu.Restart(BR.AN.PviServices.BootMode.Diagnostics);
}
/// <summary>
/// CPU在所需模式下成功启动
/// </summary>
private void cpu_Restarted(object sender, PviEventArgs e)
{
  String strOut = String.Format("\"{0}\" restarted. BootMode: {1}\r\n",
                                ((Cpu)sender).Name,
                                ((Cpu)sender).BootMode.ToString());
  this.tbStatus.Text += strOut;
  this.btDeleteUsrRom.Enabled = true;
}
 
/// <summary>
/// 删除UserROM类型的存储器
/// </summary>
private void btDeleteUsrRom_Click(object sender, System.EventArgs e)
{
  Memory memoryObject = this.cpu.Memories[MemoryType.UserRom];
  // 检查内存类型是否实际存在
  if ( memoryObject != null )
  {
    memoryObject.Clean();
    memoryObject.Cleaned += new PviEventHandler(ClearMemory_Cleaned);
  }
}
/// <summary>
/// 成功删除后的状态输出,进行CPU冷重启
/// </summary>
private void ClearMemory_Cleaned(object sender, PviEventArgs e)
{
  this.cpu.Memories[MemoryType.UserRam].Cleaned -= new PviEventHandler(ClearMemory_Cleaned);
  this.tbStatus.Text += "Memory deleted\r\n";
  this.cpu.Restart(BR.AN.PviServices.BootMode.ColdRestart);
}

 

读取和设置CPU时间

当前的CPU时间是通过 ReadDateTime()方法 读取的 。当  收到DateTimeRead 事件时,将报告当前时间

// ... CPU对象连接正确
this.cpu.ReadDateTime();
// 对事件作出反应
this.cpu.DateTimeRead+=new CpuEventHandler(cpu_DateTimeRead);
private void cpu_DateTimeRead(object sender, CpuEventArgs e)
{     this.tbStatus.Text += e.DateTime.ToString();
}

设置CPU时间是通过 WriteDateTime()方法 完成的 ,并通过 DateTimeWritten 事件确认  。

DateTime dt = new DateTime(2001,1,1,0,0,0,0);
this.cpu.WriteDateTime(dt);
this.cpu.DateTimeWritten+=new CpuEventHandler(cpu_DateTimeWritten);
private void cpu_DateTimeWritten(object sender, CpuEventArgs e)
{
    this.tbStatus.Text += e.DateTime.ToString();
}