private void Form1_Load(object sender, EventArgs e) { bot = new Botnana("192.168.7.2"); onWsErrorCallback = new HandleMessage(OnWsErrorCB); bot.SetOnErrorCB(IntPtr.Zero, onWsErrorCallback); onMessageCallback = new HandleMessage(HandleMessageCB); bot.SetOnMessageCB(IntPtr.Zero, onMessageCallback); slavesRespondingCallback = new HandleMessage(SlavesRespondingCB); bot.SetTagCB("slaves_responding", 0, IntPtr.Zero, slavesRespondingCallback); statusWordCallback = new HandleMessage(StatusWordCB); bot.SetTagCB("status_word.1.1", 0, IntPtr.Zero, statusWordCallback); realPositionCallback = new HandleMessage(RealPositionCB); bot.SetTagCB("real_position.1.1", 0, IntPtr.Zero, realPositionCallback); targetPositionCallback = new HandleMessage(TargetPositionCB); bot.SetTagCB("target_position.1.1", 0, IntPtr.Zero, targetPositionCallback); opModeCallback = new HandleMessage(OpModeCB); bot.SetTagCB("operation_mode.1.1", 0, IntPtr.Zero, opModeCallback); digitalInputsCallback = new HandleMessage(DigitalInputsCB); bot.SetTagCB("digital_inputs.1.1", 0, IntPtr.Zero, digitalInputsCallback); profileVelocityCallback = new HandleMessage(ProfileVelocityCB); bot.SetTagCB("profile_velocity.1.1", 0, IntPtr.Zero, profileVelocityCallback); profileAccelerationCallback = new HandleMessage(ProfileAccelerationCB); bot.SetTagCB("profile_acceleration.1.1", 0, IntPtr.Zero, profileAccelerationCallback); deployedCallback = new HandleMessage(DeployedCB); bot.SetTagCB("deployed", 0, IntPtr.Zero, deployedCallback); endOfProgramCallback = new HandleMessage(EndOfProgramCB); bot.SetTagCB("end-of-program", 0, IntPtr.Zero, endOfProgramCallback); errorCallback = new HandleMessage(ErrorCB); bot.SetTagCB("error", 0, IntPtr.Zero, errorCallback); bot.Connect(); Thread.Sleep(1000); bot.EvaluateScript(".ec-links"); bot.EvaluateScript("1 .slave"); timer1.Interval = 50; timer1.Enabled = true; }
public Test() { InitializeComponent(); RunConsole(); bot = new Botnana("192.168.7.2"); onWSOpen = new HandleMessage((IntPtr dataPtr, string str) => { webSocketState = 2; BeginInvoke(new Deg(() => { sdoControl1.Awake(); driveControl1.Awake(); axisControl1.Awake(); })); Console.WriteLine("WS connected."); }); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); onWSError = new HandleMessage((IntPtr dataPtr, string str) => { webSocketState = 0; BeginInvoke(new Deg(() => { sdoControl1.Sleep(); driveControl1.Sleep(); axisControl1.Sleep(); })); Console.WriteLine("WS error : " + str); }); bot.SetOnErrorCB(IntPtr.Zero, onWSError); onMessage = new HandleMessage((IntPtr dataPtr, string str) => { Console.WriteLine("OnMessage : " + str); }); bot.SetOnMessageCB(IntPtr.Zero, onMessage); onErrorMessage = new HandleMessage((IntPtr dataPtr, string str) => { Console.WriteLine("Error|" + str); }); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); sdoControl1.InitializeBotnana(bot); axisControl1.InitializeBotnana(bot); realTimeScriptControl1.InitializeBotnana(bot); driveControl1.InitializeBotnana(bot); }
private void Form1_Load(object sender, EventArgs e) { Process thisProc = Process.GetCurrentProcess(); thisProc.PriorityClass = ProcessPriorityClass.RealTime; bot = new Botnana("192.168.7.2"); onWSOpen = new HandleMessage(OnWSOpenCallback); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); onMessage = new HandleMessage(OnMessageCallback); bot.SetOnMessageCB(IntPtr.Zero, onMessage); onDiWord = new HandleMessage(OnDiWordCallback); bot.SetTagCB("din_wd.1.3", 0, IntPtr.Zero, onDiWord); onDoWord = new HandleMessage(OnDoWordCallback); bot.SetTagCB("dout_wd.1.2", 0, IntPtr.Zero, onDoWord); onSlavesResponding = new HandleMessage(OnSlavesRespondingCallback); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlavesResponding); onSlavesState = new HandleMessage(OnSlavesStateCallback); bot.SetTagCB(@"al_states", 0, IntPtr.Zero, onSlavesState); bot.Connect(); timer1.Interval = 50; timer1.Enabled = true; timer2.Interval = 1000; timer2.Enabled = true; }
private void Form1_Load(object sender, EventArgs e) { Process thisProc = Process.GetCurrentProcess(); thisProc.PriorityClass = ProcessPriorityClass.RealTime; bot = new Botnana("192.168.7.2"); onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); onWSOpen = new HandleMessage(OnWSOpenCallback); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); onMessage = new HandleMessage(OnMessageCallback); bot.SetOnMessageCB(IntPtr.Zero, onMessage); onUserParameter = new HandleMessage(OnUserParameterCallback); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); onRTRealTorque = new HandleMessage(OnRTRealTorqueCallback); bot.SetTagCB(@"rt_real_torque", 0, IntPtr.Zero, onRTRealTorque); onSlavesResponding = new HandleMessage(OnSlavesRespondingCallback); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlavesResponding); onSlavesState = new HandleMessage(OnSlavesStateCallback); bot.SetTagCB(@"al_states", 0, IntPtr.Zero, onSlavesState); onWaitingSDOs = new HandleMessage(OnWaitingSDOsCallback); bot.SetTagCB(@"waiting_sdos_len", 0, IntPtr.Zero, onWaitingSDOs); onPDSState = new HandleTagNameMessage(OnPDSStateCallback); bot.SetTagNameCB(@"pds_state", 0, IntPtr.Zero, onPDSState); onDriveStatus = new HandleTagNameMessage(OnDriveStatusCallback); bot.SetTagNameCB(@"status_word", 0, IntPtr.Zero, onDriveStatus); onOperationMode = new HandleTagNameMessage(OnOperationModeCallback); bot.SetTagNameCB(@"operation_mode", 0, IntPtr.Zero, onOperationMode); onHomingMethod = new HandleTagNameMessage(OnHomingMethodCallback); bot.SetTagNameCB(@"homing_method", 0, IntPtr.Zero, onHomingMethod); onHomingSpeed1 = new HandleTagNameMessage(OnHomingSpeed1Callback); bot.SetTagNameCB(@"homing_speed_1", 0, IntPtr.Zero, onHomingSpeed1); onHomingSpeed2 = new HandleTagNameMessage(OnHomingSpeed2Callback); bot.SetTagNameCB(@"homing_speed_2", 0, IntPtr.Zero, onHomingSpeed2); onHomingAcc = new HandleTagNameMessage(OnHomingAccCallback); bot.SetTagNameCB(@"homing_acceleration", 0, IntPtr.Zero, onHomingAcc); onProfileVelocity = new HandleTagNameMessage(OnProfileVelocityCallback); bot.SetTagNameCB(@"profile_velocity", 0, IntPtr.Zero, onProfileVelocity); onProfileAcc = new HandleTagNameMessage(OnProfileAccCallback); bot.SetTagNameCB(@"profile_acceleration", 0, IntPtr.Zero, onProfileAcc); onRealPosition = new HandleTagNameMessage(OnRealPositionCallback); bot.SetTagNameCB(@"real_position", 0, IntPtr.Zero, onRealPosition); onRealTorque = new HandleTagNameMessage(OnRealTorqueCallback); bot.SetTagNameCB(@"real_torque", 0, IntPtr.Zero, onRealTorque); onDigitalInputs = new HandleTagNameMessage(OnDigitalInputsCallback); bot.SetTagNameCB("digital_inputs", 0, IntPtr.Zero, onDigitalInputs); onTargetPosition = new HandleTagNameMessage(OnTargetPositionCallback); bot.SetTagNameCB(@"target_position", 0, IntPtr.Zero, onTargetPosition); onErrorMessage = new HandleMessage(OnErrorMessageCallback); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); onAxisPosition = new HandleTagNameMessage(OnAxisPositionCallback); bot.SetTagNameCB(@"axis_demand_position", 0, IntPtr.Zero, onAxisPosition); onFeedbackPosition = new HandleTagNameMessage(OnFeedbackPositionCallback); bot.SetTagNameCB(@"feedback_position", 0, IntPtr.Zero, onFeedbackPosition); onEncoderLengthUnit = new HandleTagNameMessage(OnEncoderLengthUnitCallback); bot.SetTagNameCB(@"encoder_length_unit", 0, IntPtr.Zero, onEncoderLengthUnit); onEncoderPPU = new HandleTagNameMessage(OnEncoderPPUCallback); bot.SetTagNameCB(@"encoder_ppu", 0, IntPtr.Zero, onEncoderPPU); onDriveAlias = new HandleTagNameMessage(OnDriveAliasCallback); bot.SetTagNameCB(@"drive_alias", 0, IntPtr.Zero, onDriveAlias); onDriveSlavePosition = new HandleTagNameMessage(OnDriveSlavePositionCallback); bot.SetTagNameCB(@"drive_slave_position", 0, IntPtr.Zero, onDriveSlavePosition); onDriveChannel = new HandleTagNameMessage(OnDriveChannelCallback); bot.SetTagNameCB(@"drive_channel", 0, IntPtr.Zero, onDriveChannel); onAxisVmax = new HandleTagNameMessage(OnAxisVmaxCallback); bot.SetTagNameCB(@"axis_vmax", 0, IntPtr.Zero, onAxisVmax); onAxisAmax = new HandleTagNameMessage(OnAxisAmaxCallback); bot.SetTagNameCB(@"axis_amax", 0, IntPtr.Zero, onAxisAmax); onGroupType = new HandleTagNameMessage(OnGroupTypeCallback); bot.SetTagNameCB(@"group_type", 0, IntPtr.Zero, onGroupType); onGroupMapping = new HandleTagNameMessage(OnGroupMappingCallback); bot.SetTagNameCB(@"group_mapping", 0, IntPtr.Zero, onGroupMapping); onGroupVmax = new HandleTagNameMessage(OnGroupVmaxCallback); bot.SetTagNameCB(@"group_vmax", 0, IntPtr.Zero, onGroupVmax); onGroupAmax = new HandleTagNameMessage(OnGroupAmaxCallback); bot.SetTagNameCB(@"group_amax", 0, IntPtr.Zero, onGroupAmax); onGroupJmax = new HandleTagNameMessage(OnGroupJmaxCallback); bot.SetTagNameCB(@"group_jmax", 0, IntPtr.Zero, onGroupJmax); onTravelTime = new HandleMessage(OnTravelTimeCallback); bot.SetTagCB(@"travel_time", 0, IntPtr.Zero, onTravelTime); onDeviceInfos = new HandleMessage(OnDeviceInfos); bot.SetTagCB(@"device_infos", 1, IntPtr.Zero, onDeviceInfos); onSystemReady = new HandleMessage(OnSystemReady); bot.SetTagCB(@"system_ready", 0, IntPtr.Zero, onSystemReady); chartTorque.ChartAreas[0].AxisX.Minimum = 0; chartTorque.ChartAreas[0].AxisX.Maximum = QueueCapacity; timer1.Interval = 10; timer1.Enabled = true; timer2.Interval = 500; timer2.Enabled = true; torqueThread = new Thread(new ThreadStart(this.getTorqueInformation)); pauseEvent = new ManualResetEvent(false); torqueThread.IsBackground = true; torqueThread.Start(); }
public FormApp() { InitializeComponent(); bot = new Botnana("192.168.7.2"); // 啟動終端機,可幫助除錯,若不使用可不啟動。 RunConsole(); // On WebSocket open callback. onWSOpen = new HandleMessage((IntPtr dataPtr, string str) => { webSocketState = 2; rebooting = false; BeginInvoke(new Appdeg(() => { buttonWSState.Text = "WebSocket ready"; buttonWSState.BackColor = Color.FromArgb(0x53, 0xFF, 0x53); })); // 送出 .user-para 命令,讓為回傳的訊息去觸發 OnUserParameterCallback // 若重複執行從 32 開始,因為需要 .device-infos 取得周邊裝置的資訊 // .user-para 回應的訊息範例如下: // user_parameter|0 bot.EvaluateScript(@"user-para@ 32 min user-para! .user-para"); Console.WriteLine("WebSocket connected."); }); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); // On WebSocket error callback. onWSError = new HandleMessage((IntPtr dataPtr, string str) => { webSocketState = 0; slavesCount = 0; hasSFC = false; BeginInvoke(new Appdeg(() => { buttonWSState.Text = "WebSocket not ready"; buttonWSState.BackColor = Color.FromArgb(0xFF, 0x2D, 0x2D); buttonECState.Text = "EtherCAT not ready(" + slavesCount.ToString() + ")"; buttonECState.BackColor = Color.FromArgb(0xFF, 0x2D, 0x2D); buttonSystemReady.Text = "System not ready"; buttonSystemReady.BackColor = Color.FromArgb(0xFF, 0x2D, 0x2D); })); formTorque.Reset(); formFeeder.Reset(); formRCON.Reset(); Console.WriteLine("WS error : " + str); }); bot.SetOnErrorCB(IntPtr.Zero, onWSError); // On Message callback. onMessage = new HandleMessage((IntPtr dataPtr, string str) => { Console.WriteLine("OnMessage : " + str); }); bot.SetOnMessageCB(IntPtr.Zero, onMessage); // On Error tag callback onErrorMessage = new HandleMessage((IntPtr dataPtr, string str) => { if (errorsLen < 3) { errorsLen += 1; new Thread(() => { System.Windows.Forms.MessageBox.Show("Error|" + str); errorsLen -= 1; }).Start(); } Console.WriteLine("Error|" + str); }); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); // On user_parameter tag callback. onUserParameter = new HandleMessage((IntPtr dataPtr, string str) => { switch (Int32.Parse(str)) { case 0: Console.WriteLine("OnUserParameterCallback 0"); if (webSocketState == 2 && !rebooting) { // 設定 user parameter 為 16,如果此範例重新執行不會再載入以下 SFC bot.EvaluateScript("16 user-para!"); // 清除SFC 邏輯,載入 SFC 時會造成 real time cycle overrun,所以要暫時 ignore-overrun bot.EvaluateScript(@"ignore-overrun 0sfc -work marker -work"); bot.LoadSFC(@"config.fs"); bot.LoadSFC(@"sdo.fs"); bot.LoadSFC(@"torque.fs"); bot.LoadSFC(@"feeder.fs"); bot.LoadSFC(@"rcon.fs"); bot.LoadSFC(@"manager.fs"); bot.EvaluateScript(@"marker -app .user-para"); } break; case 16: Console.WriteLine("OnUserParameterCallback 16"); // 載入後執行 `reset-overrun` BotEvaluateScript(@"reset-overrun 32 user-para! .user-para"); break; case 32: Console.WriteLine("OnUserParameterCallback 32"); formTorque.Initialize(); formFeeder.Initialize(); formRCON.Initialize(); BotEvaluateScript(@"+coordinator 64 user-para! .user-para"); break; case 64: Console.WriteLine("OnUserParameterCallback 64"); hasSFC = true; break; default: break; } }); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); // On ec_ready tag callback. onECReady = new HandleMessage((IntPtr dataPtr, string str) => { if (str == "1") { BeginInvoke(new Appdeg(() => { buttonECState.Text = "EtherCAT ready(" + slavesCount.ToString() + ")"; buttonECState.BackColor = Color.FromArgb(0x53, 0xFF, 0x53); })); } else { BeginInvoke(new Appdeg(() => { buttonECState.Text = "EtherCAT not ready(" + slavesCount.ToString() + ")"; buttonECState.BackColor = Color.FromArgb(0xFF, 0x2D, 0x2D); })); } }); bot.SetTagCB(@"ec_ready", 0, IntPtr.Zero, onECReady); // On slaves_responding tag callback. onSlavesResponding = new HandleMessage((IntPtr dataPtr, string str) => { slavesCount = int.Parse(str); }); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlavesResponding); // On system_ready tag callback. onSystemReady = new HandleMessage((IntPtr dataPtr, string str) => { if (str == "-1") { BeginInvoke(new Appdeg(() => { buttonSystemReady.Text = "System ready"; buttonSystemReady.BackColor = Color.FromArgb(0x53, 0xFF, 0x53); })); } else { BeginInvoke(new Appdeg(() => { buttonSystemReady.Text = "System not ready"; buttonSystemReady.BackColor = Color.FromArgb(0xFF, 0x2D, 0x2D); })); } }); bot.SetTagCB(@"system_ready", 0, IntPtr.Zero, onSystemReady); formTorque = new FormTorque(); formFeeder = new FormFeeder(); formRCON = new FormRCON(); }
private void Form1_Load(object sender, EventArgs e) { Process thisProc = Process.GetCurrentProcess(); thisProc.PriorityClass = ProcessPriorityClass.RealTime; bot = new Botnana("192.168.7.2"); onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); onMessage = new HandleMessage(OnMessageCallback); bot.SetOnMessageCB(IntPtr.Zero, onMessage); onUserParameter = new HandleMessage(OnUserParameterCallback); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); onError = new HandleMessage(OnErrorCallback); bot.SetTagCB(@"error", 0, IntPtr.Zero, onError); onPr3411 = new HandleMessage(OnPr3411Callback); bot.SetTagCB(@"pr3411 ", 0, IntPtr.Zero, onPr3411); onPr3444 = new HandleMessage(OnPr3444Callback); bot.SetTagCB(@"pr3444 ", 0, IntPtr.Zero, onPr3444); onPr3445 = new HandleMessage(OnPr3445Callback); bot.SetTagCB(@"pr3445 ", 0, IntPtr.Zero, onPr3445); onPr3447 = new HandleMessage(OnPr3447Callback); bot.SetTagCB(@"pr3447 ", 0, IntPtr.Zero, onPr3447); onPr3448 = new HandleMessage(OnPr3448Callback); bot.SetTagCB(@"pr3448 ", 0, IntPtr.Zero, onPr3448); onPr3449 = new HandleMessage(OnPr3449Callback); bot.SetTagCB(@"pr3449 ", 0, IntPtr.Zero, onPr3449); onPr3450 = new HandleMessage(OnPr3450Callback); bot.SetTagCB(@"pr3450 ", 0, IntPtr.Zero, onPr3450); onPr3451 = new HandleMessage(OnPr3451Callback); bot.SetTagCB(@"pr3451 ", 0, IntPtr.Zero, onPr3451); onPr3452 = new HandleMessage(OnPr3452Callback); bot.SetTagCB(@"pr3452 ", 0, IntPtr.Zero, onPr3452); onPr3453 = new HandleMessage(OnPr3453Callback); bot.SetTagCB(@"pr3453 ", 0, IntPtr.Zero, onPr3453); onPr3454 = new HandleMessage(OnPr3454Callback); bot.SetTagCB(@"pr3454 ", 0, IntPtr.Zero, onPr3454); onPr3455 = new HandleMessage(OnPr3455Callback); bot.SetTagCB(@"pr3455 ", 0, IntPtr.Zero, onPr3455); onPr3456 = new HandleMessage(OnPr3456Callback); bot.SetTagCB(@"pr3456 ", 0, IntPtr.Zero, onPr3456); onPr3457 = new HandleMessage(OnPr3457Callback); bot.SetTagCB(@"pr3457 ", 0, IntPtr.Zero, onPr3457); onSlavesResponding = new HandleMessage(OnSlavesRespondingCallback); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlavesResponding); onWaitingSDOs = new HandleMessage(OnWaitingSDOsCallback); bot.SetTagCB(@"waiting_sdos_len", 0, IntPtr.Zero, onWaitingSDOs); onOperationMode = new HandleMessage(OnOperationModeCallback); bot.SetTagCB(@"operation_mode.1.1", 0, IntPtr.Zero, onOperationMode); onHomingMethod = new HandleMessage(OnHomingMethodCallback); bot.SetTagCB(@"homing_method.1.1", 0, IntPtr.Zero, onHomingMethod); onHomingSpeed2 = new HandleMessage(OnHomingSpeed2Callback); bot.SetTagCB(@"homing_speed_2.1.1", 0, IntPtr.Zero, onHomingSpeed2); onProfileVelocity = new HandleMessage(OnProfileVelocityCallback); bot.SetTagCB(@"profile_velocity.1.1", 0, IntPtr.Zero, onProfileVelocity); onProfileAcc = new HandleMessage(OnProfileAccCallback); bot.SetTagCB(@"profile_acceleration.1.1", 0, IntPtr.Zero, onProfileAcc); onRealPosition = new HandleMessage(OnRealPositionCallback); bot.SetTagCB(@"real_position.1.1", 0, IntPtr.Zero, onRealPosition); onTargetPosition = new HandleMessage(OnTargetPositionCallback); bot.SetTagCB(@"target_position.1.1", 0, IntPtr.Zero, onTargetPosition); onPDSState = new HandleMessage(OnPDSStateCallback); bot.SetTagCB(@"pds_state.1.1", 0, IntPtr.Zero, onPDSState); bot.Connect(); timer1.Interval = 50; timer1.Enabled = true; timer2.Interval = 200; timer2.Enabled = true; }
private void Form1_Load(object sender, EventArgs e) { Process thisProc = Process.GetCurrentProcess(); thisProc.PriorityClass = ProcessPriorityClass.RealTime; mcsPositions = new double[3]; pcsPositions = new double[3]; pva = new double[3]; axisHomed = new int[3]; axisRealPositions = new double[3]; axisHomingV1 = new UInt32[3]; axisHomingV2 = new UInt32[3]; axisHomingMethod = new UInt32[3]; // 首先要連線到 Botnana Control, 當收到 WS 連線錯誤, 就呼叫 on_error_callback bot = new Botnana("192.168.7.2"); bot.SetOnErrorCB(IntPtr.Zero, onWSError); // 當收到 Botnana Control 的訊息, 就呼叫 on_message_callback bot.SetOnMessageCB(IntPtr.Zero, onMessage); // 定義收到信息中指定的 Tag 時,所要呼叫的 callback 信息 bot.SetTagCB("MCS.1", 0, IntPtr.Zero, onMcs); bot.SetTagCB("PCS.1", 0, IntPtr.Zero, onPcs); bot.SetTagCB("pva.1", 0, IntPtr.Zero, onPva); bot.SetTagCB("move_length.1", 0, IntPtr.Zero, onMoveLength); bot.SetTagCB("path_id.1", 0, IntPtr.Zero, onPathId); bot.SetTagCB("servo_on", 0, IntPtr.Zero, onServoOn); bot.SetTagCB("motion_state", 0, IntPtr.Zero, onMotionState); bot.SetTagCB("axis_corrected_position.1", 0, IntPtr.Zero, onAxisRealPositionX); bot.SetTagCB("axis_corrected_position.2", 0, IntPtr.Zero, onAxisRealPositionY); bot.SetTagCB("axis_corrected_position.3", 0, IntPtr.Zero, onAxisRealPositionZ); bot.SetTagCB("axis_homed.1", 0, IntPtr.Zero, onAxisHomedX); bot.SetTagCB("axis_homed.2", 0, IntPtr.Zero, onAxisHomedY); bot.SetTagCB("axis_homed.3", 0, IntPtr.Zero, onAxisHomedZ); bot.SetTagCB("nc_owner", 0, IntPtr.Zero, onNcOwner); bot.SetTagCB("nc_suspended", 0, IntPtr.Zero, onNcSuspended); bot.SetTagCB("devices_ok", 0, IntPtr.Zero, onDevicesOk); bot.SetTagCB("monitor_failed", 0, IntPtr.Zero, onMonitorFailed); bot.SetTagCB("rapid_travels_rate", 0, IntPtr.Zero, onRapidTravelsRate); bot.SetTagCB("machining_rate", 0, IntPtr.Zero, onMachiningRate); bot.SetTagCB("axis_homing_v1.1", 0, IntPtr.Zero, onAxisHomingV1X); bot.SetTagCB("axis_homing_v1.2", 0, IntPtr.Zero, onAxisHomingV1Y); bot.SetTagCB("axis_homing_v1.3", 0, IntPtr.Zero, onAxisHomingV1Z); bot.SetTagCB("axis_homing_v2.1", 0, IntPtr.Zero, onAxisHomingV2X); bot.SetTagCB("axis_homing_v2.2", 0, IntPtr.Zero, onAxisHomingV2Y); bot.SetTagCB("axis_homing_v2.3", 0, IntPtr.Zero, onAxisHomingV2Z); bot.SetTagCB("axis_homing_method.1", 0, IntPtr.Zero, onAxisHomingMethodX); bot.SetTagCB("axis_homing_method.2", 0, IntPtr.Zero, onAxisHomingMethodY); bot.SetTagCB("axis_homing_method.3", 0, IntPtr.Zero, onAxisHomingMethodZ); bot.SetTagCB("error", 0, IntPtr.Zero, onError); bot.SetTagCB("log", 0, IntPtr.Zero, onLog); bot.SetTagCB("user_parameter", 0, IntPtr.Zero, onUserParameter); bot.SetTagCB("deployed", 0, IntPtr.Zero, onDeployed); bot.Connect(); Thread.Sleep(1000); // 要求 Botnana Control 送出 user parameter 訊息 bot.EvaluateScript(".user-para"); // 初始化 NC program 內容 DataGridViewRowCollection rows = ncProgram.Rows; rows.Add(new Object[] { "1", "92", "0.0", "0.0", "0.0", "900.0" }); rows.Add(new Object[] { "2", "01", "10", null, null, "500" }); rows.Add(new Object[] { "3", "01", "20", null, null, "500" }); rows.Add(new Object[] { "4", "01", "30", null, null, "500" }); rows.Add(new Object[] { "5", "01", "40", null, null, "500" }); rows.Add(new Object[] { "6", "01", "50", null, null, "600" }); rows.Add(new Object[] { "7", "01", "60", null, null, "700" }); rows.Add(new Object[] { "8", "01", "70", null, null, "800" }); rows.Add(new Object[] { "9", "01", "80", null, null, "900" }); rows.Add(new Object[] { "10", "01", "90", null, null, "1000" }); // 設置 timer timer1.Interval = 50; timer1.Enabled = true; timer2.Interval = 500; timer2.Enabled = true; }