public Program()
{
Runtime.UpdateFrequency = UpdateFrequency.Update1;
}
public void Save()
{
}
public static double AngleToRad(double angle)
{
return angle*180/Math.PI;
}
double last_error=0;
//设定角度
public double TurnTo(double set_rad,double get_rad)
{
const double P=0.02f;
const double D=0.5f;
double this_error=0;
double output=0;
if(set_rad>360)set_rad=360;if(set_rad<0)set_rad=0;
Echo("设定角"+set_rad);
this_error=set_rad-get_rad;
output=P*this_error+D*(this_error-last_error);
last_error=this_error;
return output;
}
public void Main(string argument, UpdateType updateSource)
{
IMyTextPanel power_lcd=GridTerminalSystem.GetBlockWithName("LCD") as IMyTextPanel;
//获取所有转子
List<IMyMotorStator>rotors=new List<IMyMotorStator>();
GridTerminalSystem.GetBlocksOfType<IMyMotorStator>(rotors);
IMyMotorStator rotor=rotors[0];
double new_angle=90;
rotor.TargetVelocityRad=(float)TurnTo(new_angle,AngleToRad(rotor.Angle));
power_lcd.ShowPublicTextOnScreen();
//输出字符
power_lcd.WritePublicText("\n\r"+AngleToRad(rotor.Angle).ToString(),true);
power_lcd.WritePublicText("\n\r"+rotor.Angle.ToString(),true);
}