<< 点击显示目录 >> 主页 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();
}