public void InitializeBotnana(Botnana bot) { botnana = bot; onSDOIndex = new HandleTagNameMessage((IntPtr dataPtr, UInt32 slv, UInt32 ch, string str) => { BeginInvoke(new Deg(() => { if (slv == slaveNumber) { textBoxSDOIndexS.Text = str; } })); }); botnana.SetTagNameCB(@"sdo_index", 0, IntPtr.Zero, onSDOIndex); onSDOSubIndex = new HandleTagNameMessage((IntPtr dataPtr, UInt32 slv, UInt32 ch, string str) => { BeginInvoke(new Deg(() => { if (slv == slaveNumber) { textBoxSDOSubIndexS.Text = str; } })); }); botnana.SetTagNameCB(@"sdo_subindex", 0, IntPtr.Zero, onSDOSubIndex); onSDOError = new HandleTagNameMessage((IntPtr dataPtr, UInt32 slv, UInt32 ch, string str) => { BeginInvoke(new Deg(() => { if (slv == slaveNumber) { textBoxSDOErrorS.Text = str; } })); }); botnana.SetTagNameCB(@"sdo_error", 0, IntPtr.Zero, onSDOError); onSDOBusy = new HandleTagNameMessage((IntPtr dataPtr, UInt32 slv, UInt32 ch, string str) => { BeginInvoke(new Deg(() => { if (slv == slaveNumber) { textBoxSDOBusyS.Text = str; } })); if (slv == slaveNumber && str == "true") { UpdateData(); } }); botnana.SetTagNameCB(@"sdo_busy", 0, IntPtr.Zero, onSDOBusy); onSDOData = new HandleTagNameMessage((IntPtr dataPtr, UInt32 slv, UInt32 ch, string str) => { BeginInvoke(new Deg(() => { if (slv == slaveNumber) { textBoxSDOValueS.Text = str; } })); }); botnana.SetTagNameCB(@"sdo_data", 0, IntPtr.Zero, onSDOData); }
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(); }
private void Form1_Load(object sender, EventArgs e) { bot = new Botnana("192.168.7.2"); // WS 連線錯誤就呼叫 OnWSErrorCallback onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); // WS 連線成功就呼叫 OnWSOpenCallback onWSOpen = new HandleMessage(OnWSOpenCallback); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); // 收到 tag = error 就呼叫 OnErrorMessageCallback onErrorMessage = new HandleMessage(OnErrorMessageCallback); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); onUserParameter = new HandleMessage(OnUserParameterCallback); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); onAxisSectionPositions = new HandleTagNameMessage(OnAxisSectionPositions); bot.SetTagNameCB(@"axis_section_p", 0, IntPtr.Zero, onAxisSectionPositions); onAxisSectionVecloities = new HandleTagNameMessage(OnAxisSectionVecloities); bot.SetTagNameCB(@"axis_section_v", 0, IntPtr.Zero, onAxisSectionVecloities); onAxisRunnings = new HandleTagNameMessage(OnAxisRunnings); bot.SetTagNameCB(@"axis_running", 0, IntPtr.Zero, onAxisRunnings); onAxisCmds = new HandleTagNameMessage(OnAxisCmds); bot.SetTagNameCB(@"axis_command_position", 0, IntPtr.Zero, onAxisCmds); onAxisDemands = new HandleTagNameMessage(OnAxisDemands); bot.SetTagNameCB(@"axis_demand_position", 0, IntPtr.Zero, onAxisDemands); onAxisFeedbacks = new HandleTagNameMessage(OnAxisFeedbacks); bot.SetTagNameCB(@"feedback_position", 0, IntPtr.Zero, onAxisFeedbacks); onAxisReacheds = new HandleTagNameMessage(OnAxisReacheds); bot.SetTagNameCB(@"axis_interpolator_reached", 0, IntPtr.Zero, onAxisReacheds); onAxisInterpolatorEnables = new HandleTagNameMessage(OnAxisInterpolatorEnables); bot.SetTagNameCB(@"axis_interpolator_enabled", 0, IntPtr.Zero, onAxisInterpolatorEnables); onCoordinatorEnabled = new HandleMessage(OnCoordinatorEnabled); bot.SetTagCB(@"coordinator_enabled", 0, IntPtr.Zero, onCoordinatorEnabled); // 將區段位置與速度的參數元件放到一個陣列內 textAxisSectionPositions[1, 1] = textAxis1P1; textAxisSectionPositions[1, 2] = textAxis1P2; textAxisSectionPositions[1, 3] = textAxis1P3; textAxisSectionPositions[1, 4] = textAxis1P4; textAxisSectionPositions[1, 5] = textAxis1P5; textAxisSectionVecloities[1, 1] = textAxis1V1; textAxisSectionVecloities[1, 2] = textAxis1V2; textAxisSectionVecloities[1, 3] = textAxis1V3; textAxisSectionVecloities[1, 4] = textAxis1V4; textAxisSectionVecloities[1, 5] = textAxis1V5; textAxisSectionPositions[2, 1] = textAxis2P1; textAxisSectionPositions[2, 2] = textAxis2P2; textAxisSectionPositions[2, 3] = textAxis2P3; textAxisSectionPositions[2, 4] = textAxis2P4; textAxisSectionPositions[2, 5] = textAxis2P5; textAxisSectionVecloities[2, 1] = textAxis2V1; textAxisSectionVecloities[2, 2] = textAxis2V2; textAxisSectionVecloities[2, 3] = textAxis2V3; textAxisSectionVecloities[2, 4] = textAxis2V4; textAxisSectionVecloities[2, 5] = textAxis2V5; timerWSCheck.Interval = 1000; timerWSCheck.Enabled = true; timerLoop.Interval = 50; timerLoop.Enabled = true; }
public void InitializeBotnana(Botnana bot) { botnana = bot; onECAlias = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { UInt32 a = UInt32.Parse(str); if (a != 0 && a == alias) { slaveNumber = slv; BeginInvoke(new Deg(() => textBoxSlavePos.Text = slv.ToString())); } }); botnana.SetTagNameCB(@"ec_alias", 0, IntPtr.Zero, onECAlias); onPDSState = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxPDSState.Text = str)); } }); botnana.SetTagNameCB(@"pds_state", 0, IntPtr.Zero, onPDSState); onSupportedMode = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber && !supportedOPModeUpdated) { Int32 supportedMode; try { supportedMode = Convert.ToInt32(str, 16); } catch (Exception exc) { Console.WriteLine(exc); return; } List <string> modes = new List <string>(); if ((supportedMode & 0x1) != 0) { modes.Add("PP"); } if ((supportedMode & 0x4) != 0) { modes.Add("PV"); } if ((supportedMode & 0x8) != 0) { modes.Add("PT"); } if ((supportedMode & 0x20) != 0) { modes.Add("HM"); } if ((supportedMode & 0x80) != 0) { modes.Add("CSP"); } if ((supportedMode & 0x100) != 0) { modes.Add("CSV"); } if ((supportedMode & 0x200) != 0) { modes.Add("CST"); } BeginInvoke(new Deg(() => comboBoxOPMode.Items.AddRange(modes.Cast <object>().ToArray()))); supportedOPModeUpdated = true; } }); botnana.SetTagNameCB(@"supported_drive_mode", 0, IntPtr.Zero, onSupportedMode); onRealPosition = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxRealPos.Text = str)); realPos = Int32.Parse(str); } }); botnana.SetTagNameCB(@"real_position", 0, IntPtr.Zero, onRealPosition); onRealTorque = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxRealTorque.Text = str)); } }); botnana.SetTagNameCB(@"real_torque", 0, IntPtr.Zero, onRealTorque); onDigitalInput = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxDigitalInput.Text = str)); } }); botnana.SetTagNameCB(@"digital_inputs", 0, IntPtr.Zero, onDigitalInput); onControlWord = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxControlWord.Text = str)); } }); botnana.SetTagNameCB(@"control_word", 0, IntPtr.Zero, onControlWord); onStatusWord = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxStatusWord.Text = str)); } }); botnana.SetTagNameCB(@"status_word", 0, IntPtr.Zero, onStatusWord); onOperationMode = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { string mode; switch (UInt32.Parse(str)) { case 1: mode = @"PP"; break; case 3: mode = @"PV"; break; case 4: mode = @"PT"; break; case 6: mode = @"HM"; break; case 8: mode = @"CSP"; break; case 9: mode = @"CSV"; break; case 10: mode = @"CST"; break; default: return; } BeginInvoke(new Deg(() => { // 不知為何 comboBoxOPMode 顯示的文字會有閃爍的問題,這裡設定兩次問題就消失了。 comboBoxOPMode.Text = mode; comboBoxOPMode.Text = mode; })); } }); botnana.SetTagNameCB(@"operation_mode", 0, IntPtr.Zero, onOperationMode); onHomingMethod = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxHMMethod.Text = str)); } }); botnana.SetTagNameCB(@"homing_method", 0, IntPtr.Zero, onHomingMethod); onHomingSpeed1 = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxHMSpeed1.Text = str)); } }); botnana.SetTagNameCB(@"homing_speed_1", 0, IntPtr.Zero, onHomingSpeed1); onHomingSpeed2 = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxHMSpeed2.Text = str)); } }); botnana.SetTagNameCB(@"homing_speed_2", 0, IntPtr.Zero, onHomingSpeed2); onHomingAcceleration = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxHMAcceleration.Text = str)); } }); botnana.SetTagNameCB(@"homing_acceleration", 0, IntPtr.Zero, onHomingAcceleration); onTargetPosition = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxTargetPosition.Text = str)); targetPos = Int32.Parse(str); } }); botnana.SetTagNameCB(@"target_position", 0, IntPtr.Zero, onTargetPosition); onTargetVelocity = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxTargetVelocity.Text = str)); } }); botnana.SetTagNameCB(@"target_velocity", 0, IntPtr.Zero, onTargetVelocity); onProfileVelocity = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxProfileVelocity.Text = str)); } }); botnana.SetTagNameCB(@"profile_velocity", 0, IntPtr.Zero, onProfileVelocity); onProfileAcceleration = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxProfileAcceleration.Text = str)); } }); botnana.SetTagNameCB(@"profile_acceleration", 0, IntPtr.Zero, onProfileAcceleration); onProfileDeceleration = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxProfileDeceleration.Text = str)); } }); botnana.SetTagNameCB(@"profile_deceleration", 0, IntPtr.Zero, onProfileDeceleration); onTargetTorque = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxTargetTorque.Text = str)); } }); botnana.SetTagNameCB(@"target_torque", 0, IntPtr.Zero, onTargetTorque); onTorqueSlope = new HandleTagNameMessage((IntPtr _, UInt32 slv, UInt32 ch, string str) => { if (slv == slaveNumber && ch == channelNumber) { BeginInvoke(new Deg(() => textBoxTorqueSlope.Text = str)); } }); botnana.SetTagNameCB(@"torque_slope", 0, IntPtr.Zero, onTorqueSlope); timer1.Interval = 100; }
private void Form1_Load(object sender, EventArgs e) { bot = new Botnana("192.168.7.2"); // WS 連線錯誤就呼叫 OnWSErrorCallback onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); // WS 連線成功就呼叫 OnWSOpenCallback onWSOpen = new HandleMessage(OnWSOpenCallback); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); onUserParameter = new HandleMessage(OnUserParameterCallback); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); onCoordinatorEnabled = new HandleMessage(OnCoordinatorEnabled); bot.SetTagCB(@"coordinator_enabled", 0, IntPtr.Zero, onCoordinatorEnabled); // 收到 tag = error 就呼叫 OnErrorMessageCallback onErrorMessage = new HandleMessage(OnErrorMessageCallback); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); // 收到 tag = error 就呼叫 OnErrorMessageCallback onGroupNextV = new HandleMessage(OnGroupNextV); bot.SetTagCB(@"group_next_v", 0, IntPtr.Zero, onGroupNextV); onSlaves = new HandleMessage(OnSlaves); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlaves); onEcReady = new HandleMessage(OnEcReady); bot.SetTagCB(@"ec_ready", 0, IntPtr.Zero, onEcReady); onDeviceType = new HandleTagNameMessage(OnDeviceType); bot.SetTagNameCB(@"device_type", 0, IntPtr.Zero, onDeviceType); onDriveStatus = new HandleTagNameMessage(OnDriveStatus); bot.SetTagNameCB(@"status_word", 0, IntPtr.Zero, onDriveStatus); onAxesCmd = new HandleTagNameMessage(OnAxesCmd); bot.SetTagNameCB(@"axis_command_position", 0, IntPtr.Zero, onAxesCmd); onAxesFeedback = new HandleTagNameMessage(OnAxesFeedback); bot.SetTagNameCB(@"feedback_position", 0, IntPtr.Zero, onAxesFeedback); onAxesFollowingErr = new HandleTagNameMessage(OnAxesFollowingErr); bot.SetTagNameCB(@"following_error", 0, IntPtr.Zero, onAxesFollowingErr); onMPGEncoder = new HandleMessage(OnMPGEncoder); bot.SetTagCB("real_position.1.6", 0, IntPtr.Zero, onMPGEncoder); onMPGDis = new HandleMessage(OnMPGDisCB); bot.SetTagCB("din_wd.1.7", 0, IntPtr.Zero, onMPGDis); chartPath.ChartAreas[0].AxisX.Minimum = -10.0; chartPath.ChartAreas[0].AxisX.Maximum = 160.0; chartVelocity.ChartAreas[0].AxisX.Minimum = 0; chartVelocity.ChartAreas[0].AxisX.Maximum = 2000; chartVelocity.ChartAreas[0].AxisY.Minimum = -500; chartVelocity.ChartAreas[0].AxisY.Maximum = 2000; chartVelocity.Series[0].BorderWidth = 3; chartVelocity.ChartAreas[0].AxisX.MajorGrid.Enabled = false; chartVelocity.ChartAreas[0].AxisX.MinorGrid.Enabled = false; chartVelocity.ChartAreas[0].AxisY.MajorGrid.Enabled = false; chartVelocity.ChartAreas[0].AxisY.MinorGrid.Enabled = false; pathThread = new Thread(new ThreadStart(this.getPathInformation)); velocityThread = new Thread(new ThreadStart(this.getVelocityInformation)); pauseEvent = new ManualResetEvent(true); pathThread.IsBackground = true; pathThread.Start(); velocityThread.IsBackground = true; velocityThread.Start(); InitPathChart(); InitVelocityChart(); }
public void InitializeBotnana(Botnana bot) { botnana = bot; onAxisName = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxAxisName.Text = str; } })); }); botnana.SetTagNameCB(@"config_axis_name", 0, IntPtr.Zero, onAxisName); onAxisHomeOffset = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxHomeOffset.Text = str; } })); }); botnana.SetTagNameCB(@"axis_home_offset", 0, IntPtr.Zero, onAxisHomeOffset); onEncoderLengthUnit = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { comboBoxEncoderUnit.Text = str; } })); }); botnana.SetTagNameCB(@"encoder_length_unit", 0, IntPtr.Zero, onEncoderLengthUnit); onEncoderPPU = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxEncoderPPU.Text = str; } })); }); botnana.SetTagNameCB(@"encoder_ppu", 0, IntPtr.Zero, onEncoderPPU); onEncoderDirection = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxEncoderDirection.Text = str; } })); }); botnana.SetTagNameCB(@"encoder_direction", 0, IntPtr.Zero, onEncoderDirection); onCloseLoopFilter = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxCloseLoopFilter.Text = str; } })); }); botnana.SetTagNameCB(@"closed_loop_filter", 0, IntPtr.Zero, onCloseLoopFilter); onMaxPositionDeviation = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxMaxPosDeviation.Text = str; } })); }); botnana.SetTagNameCB(@"max_position_deviation", 0, IntPtr.Zero, onMaxPositionDeviation); onDriveAlias = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxDriveAlias.Text = str; } })); }); botnana.SetTagNameCB(@"drive_alias", 0, IntPtr.Zero, onDriveAlias); onDriveSlavePosition = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxDriveSlavePos.Text = str; } })); }); botnana.SetTagNameCB(@"drive_slave_position", 0, IntPtr.Zero, onDriveSlavePosition); onDriveChannel = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxDriveChannel.Text = str; } })); }); botnana.SetTagNameCB(@"drive_channel", 0, IntPtr.Zero, onDriveChannel); onExtEncoderPPU = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxExtEncoderPPU.Text = str; } })); }); botnana.SetTagNameCB(@"ext_encoder_ppu", 0, IntPtr.Zero, onExtEncoderPPU); onExtEncoderDirection = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxExtEncoderDirection.Text = str; } })); }); botnana.SetTagNameCB(@"ext_encoder_direction", 0, IntPtr.Zero, onExtEncoderDirection); onExtEncoderAlias = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxExtEncoderAlias.Text = str; } })); }); botnana.SetTagNameCB(@"ext_encoder_alias", 0, IntPtr.Zero, onExtEncoderAlias); onExtEncoderSlavePosition = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxExtEncoderSlavePos.Text = str; } })); }); botnana.SetTagNameCB(@"ext_encoder_slave_position", 0, IntPtr.Zero, onExtEncoderSlavePosition); onExtEncoderChannel = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxExtEncoderChannel.Text = str; } })); }); botnana.SetTagNameCB(@"ext_encoder_channel", 0, IntPtr.Zero, onExtEncoderChannel); onAxisAmax = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxAmax.Text = str; } })); }); botnana.SetTagNameCB(@"axis_amax", 0, IntPtr.Zero, onAxisAmax); onAxisVmax = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxVmax.Text = str; } })); }); botnana.SetTagNameCB(@"axis_vmax", 0, IntPtr.Zero, onAxisVmax); onAxisIgnorableDistance = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxIgnorableDistance.Text = str; } })); }); botnana.SetTagNameCB(@"axis_ignorable_distance", 0, IntPtr.Zero, onAxisIgnorableDistance); onAxisVff = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxVff.Text = str; } })); }); botnana.SetTagNameCB(@"axis_vff", 0, IntPtr.Zero, onAxisVff); onAxisVfactor = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxVfactor.Text = str; } })); }); botnana.SetTagNameCB(@"axis_vfactor", 0, IntPtr.Zero, onAxisVfactor); onAxisAff = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxAff.Text = str; } })); }); botnana.SetTagNameCB(@"axis_aff", 0, IntPtr.Zero, onAxisAff); onAxisAfactor = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxAfactor.Text = str; } })); }); botnana.SetTagNameCB(@"axis_afactor", 0, IntPtr.Zero, onAxisAfactor); onAxisDenamdPos = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { double ppu; double pos; if (!double.TryParse(textBoxEncoderPPU.Text, out ppu)) { ppu = 0.0; } if (!double.TryParse(str, out pos)) { pos = 0.0; } BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxDemandPos.Text = str; textBoxOutputPulse.Text = (pos * ppu).ToString(); } })); }); botnana.SetTagNameCB(@"axis_demand_position", 0, IntPtr.Zero, onAxisDenamdPos); onAxisEncoderPos = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxEncoderPos.Text = str; } })); }); botnana.SetTagNameCB(@"encoder_position", 0, IntPtr.Zero, onAxisEncoderPos); onAxisFeedbackPos = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxFeedbackPos.Text = str; } })); }); botnana.SetTagNameCB(@"feedback_position", 0, IntPtr.Zero, onAxisFeedbackPos); onAxisFollowingError = new HandleTagNameMessage((IntPtr _, UInt32 ax, UInt32 __, string str) => { BeginInvoke(new Deg(() => { if (ax == axisNumber) { textBoxFollowingError.Text = str; } })); }); botnana.SetTagNameCB(@"following_error", 0, IntPtr.Zero, onAxisFollowingError); timer1.Interval = 100; }
private void Form1_Load(object sender, EventArgs e) { bot = new Botnana("192.168.7.2"); // WS 連線錯誤就呼叫 OnWSErrorCallback onWSError = new HandleMessage(OnWSErrorCallback); bot.SetOnErrorCB(IntPtr.Zero, onWSError); // WS 連線成功就呼叫 OnWSOpenCallback onWSOpen = new HandleMessage(OnWSOpenCallback); bot.SetOnOpenCB(IntPtr.Zero, onWSOpen); onUserParameter = new HandleMessage(OnUserParameterCallback); bot.SetTagCB(@"user_parameter", 0, IntPtr.Zero, onUserParameter); // 收到 tag = error 就呼叫 OnErrorMessageCallback onErrorMessage = new HandleMessage(OnErrorMessageCallback); bot.SetTagCB(@"error", 0, IntPtr.Zero, onErrorMessage); onSlaves = new HandleMessage(OnSlaves); bot.SetTagCB(@"slaves_responding", 0, IntPtr.Zero, onSlaves); onEcReady = new HandleMessage(OnEcReady); bot.SetTagCB(@"ec_ready", 0, IntPtr.Zero, onEcReady); onSystemReady = new HandleMessage(OnSystemReady); bot.SetTagCB(@"system_ready", 0, IntPtr.Zero, onSystemReady); onFeederReady = new HandleMessage(OnFeederReady); bot.SetTagCB(@"feeder_ready", 0, IntPtr.Zero, onFeederReady); onEncoderPosition = new HandleTagNameMessage(OnEncoderPosition); bot.SetTagNameCB(@"real_position", 0, IntPtr.Zero, onEncoderPosition); onTargetPosition = new HandleTagNameMessage(OnTargetPosition); bot.SetTagNameCB(@"target_position", 0, IntPtr.Zero, onTargetPosition); onDriveStatus = new HandleTagNameMessage(OnDriveStatus); bot.SetTagNameCB(@"status_word", 0, IntPtr.Zero, onDriveStatus); onOperationMode = new HandleTagNameMessage(OnOperationMode); bot.SetTagNameCB(@"operation_mode", 0, IntPtr.Zero, onOperationMode); onDriveDigitalInputs = new HandleTagNameMessage(OnDriveDigitalInputs); bot.SetTagNameCB(@"digital_inputs", 0, IntPtr.Zero, onDriveDigitalInputs); onTouchProbe = new HandleTagNameMessage(OnTouchProbe); bot.SetTagNameCB(@"touch_probe_function", 0, IntPtr.Zero, onTouchProbe); onCylinder = new HandleTagNameMessage(OnCylinder); bot.SetTagNameCB(@"dout", 0, IntPtr.Zero, onCylinder); onTPLatchPosition1 = new HandleTagNameMessage(OnTPLatchPosition1); bot.SetTagNameCB(@"tp_position_value_1", 0, IntPtr.Zero, onTPLatchPosition1); onTPLatchPosition2 = new HandleTagNameMessage(OnTPLatchPosition2); bot.SetTagNameCB(@"tp_position_value_2", 0, IntPtr.Zero, onTPLatchPosition2); onCylinderOnMs = new HandleMessage(OnCylinderOnMs); bot.SetTagCB(@"cylinder_on_duration", 0, IntPtr.Zero, onCylinderOnMs); onCylinderOffMs = new HandleMessage(OnCylinderOffMs); bot.SetTagCB(@"cylinder_off_duration", 0, IntPtr.Zero, onCylinderOffMs); onRotationDistance = new HandleMessage(OnRotationDistance); bot.SetTagCB(@"feeder_rotation_distance", 0, IntPtr.Zero, onRotationDistance); onRotationSpeed = new HandleMessage(OnRotationSpeed); bot.SetTagCB(@"feeder_rotation_speed", 0, IntPtr.Zero, onRotationSpeed); onSettlingDuration = new HandleMessage(OnSettlingDuration); bot.SetTagCB(@"feeder_settling_duration", 0, IntPtr.Zero, onSettlingDuration); onRetryCountMax = new HandleMessage(OnRetryCountMax); bot.SetTagCB(@"feeder_retry_count_max", 0, IntPtr.Zero, onRetryCountMax); onDriveDeviceSlave = new HandleMessage(OnDriveDeviceSlave); bot.SetTagCB(@"drive_device_slave", 1, IntPtr.Zero, onDriveDeviceSlave); onDriveDeviceChannel = new HandleMessage(OnDriveDeviceChannel); bot.SetTagCB(@"drive_device_channel", 1, IntPtr.Zero, onDriveDeviceChannel); onCylinderDeviceSlave = new HandleMessage(OnCylinderDeviceSlave); bot.SetTagCB(@"cylinder_device_slave", 1, IntPtr.Zero, onCylinderDeviceSlave); onCylinderDeviceChannel = new HandleMessage(OnCylinderDeviceChannel); bot.SetTagCB(@"cylinder_device_channel", 1, IntPtr.Zero, onCylinderDeviceChannel); onFeederRunning = new HandleMessage(OnFeederRunning); bot.SetTagCB(@"feeder_running", 0, IntPtr.Zero, onFeederRunning); onFeederEMS = new HandleMessage(OnFeederEMS); bot.SetTagCB(@"feeder_ems", 0, IntPtr.Zero, onFeederEMS); onFeederOperationMs = new HandleMessage(OnFeederOperationMs); bot.SetTagCB(@"feeder_operation_ms", 0, IntPtr.Zero, onFeederOperationMs); onTPStatus = new HandleTagNameMessage(OnTPStatus); bot.SetTagNameCB(@"sdo_0_24761", 0, IntPtr.Zero, onTPStatus); onTPDetected1 = new HandleMessage(OnTPDetected1); bot.SetTagCB(@"tp_detected_1", 0, IntPtr.Zero, onTPDetected1); onTPDetected2 = new HandleMessage(OnTPDetected2); bot.SetTagCB(@"tp_detected_2", 0, IntPtr.Zero, onTPDetected2); onTPDetectedPosition1 = new HandleMessage(OnTPDetectedPosition1); bot.SetTagCB(@"tp_detected_position_1", 0, IntPtr.Zero, onTPDetectedPosition1); onTPDetectedPosition2 = new HandleMessage(OnTPDetectedPosition2); bot.SetTagCB(@"tp_detected_position_2", 0, IntPtr.Zero, onTPDetectedPosition2); timerSlow.Enabled = true; timerPoll.Enabled = true; timer1s.Enabled = true; }