Управление роботом-манипулятором
Удаленное управление включает в себя два режима работы:
1) сервер (компьютер, подключенный к управляющему устройству);
2) при нажатии на кнопку «Сервер» программа переходит в режим прослушивания порта для ожидания подключения.
Клиент (удаленный компьютер)
Для подключения в режиме клиента в текстовое поле вводится адрес
сервера. При отсутствии удаленного подключения на форме отображается
надпись «Локальное управление» без выделения, при удаленном – «Подключен в режиме Сервер» и «Подключен в режиме Клиент» соответственно.
На других формах также будет отображаться текущее состояние.
При подключении в режиме сервера управляющие кнопки будут неактивными для исключения возможности вмешательства в процесс.
Наблюдение за движением робота происходит с помощью USB-камеры, что позволяет очень точно позиционировать схват манипулятора.
Загрузка видео с камеры состоит из двух частей.
1 Установка параметров изображения
Public Touchless As New TouchlessLib.TouchlessMgr
Public WebkaAs TouchlessLib.Camera = Touchless.Cameras.Item(0)
Dim command As String
Delegate Sub SetTextCallback(ByVal [text] AsString)
Private Sub Form1_Load(sender AsSystem.Object, e AsSystem.EventArgs)
Handles MyBase.Load
If Touchless.Cameras.Count <> 0 Then
Webka = Touchless.Cameras.Item(0)
Touchless.CurrentCamera = Webka
Touchless.CurrentCamera.CaptureHeight = 480
Touchless.CurrentCamera.CaptureWidth = 640
End If
2 Получение изображения
Private Sub Timer1_Tick(sender AsObject, e AsEventArgs) Handles Timer1.Tick
PictureBox1.Image = Touchless.CurrentCamera.GetCurrentImage
Программа позволяет строить сложные задачи, включающие в себя циклы, множественные повторы и динамические переходы к различным частям управляющей программы.
Ниже приведены ключевые слова, используемые при формировании управляющей программы: "BEGIN" – начало программы "FINISH"– конец программы "DO:" – начало подпрограммы "END_DO"– конец подпрограммы Приведен пример программного кода, осуществляющий автоматическое управление:
Dim q As String
Dim i, b, k, r, t, m As Integer
b = RichTextBox2.GetLineFromCharIndex(RichTextBox2.Find("BEGIN"))
k = RichTextBox2.GetLineFromCharIndex(RichTextBox2.Find("FINISH"))
Fori = b + 1 To k - 1
'начало
If (Microsoft.VisualBasic.Left(RichTextBox2.Lines(i), 3) = "DO:") Then
r = CInt(Microsoft.VisualBasic.Right(RichTextBox2.Lines(i),
Len(RichTextBox2.Lines(i)) - 3))
For t = 0 To r - 1
m = 0
DoWhileRichTextBox2.Lines(i + m) <>"END_DO"
m += 1
IfRichTextBox2.Lines(i + m) <>"END_DO"Then
q = RichTextBox2.Lines(i + m)
SerialPort1.Write(q &vbCr)
SleepVB(20)
EndIf
Loop
Next
i += m + 1
Цикловое управление требует задержки на выполнение команды (в программе задержка установлена в размере 20 с). Задержка осуществлена отдельной функцией. Для сокращения времени ожидания в функции паузы осуществляется проверка конца операции. После окончания выполнения каждой операции в специальное текстовое поле выводится текст, содержащий ответ порта (положение манипулятора и т. д.). Ключевое слово, определяющее завершение операции
"READYR:", используется для окончания функции паузы:
SubSleepVB(Seconds)
Dim Start AsDouble
Start = Microsoft.VisualBasic.DateAndTime.Timer
DoWhileMicrosoft.VisualBasic.DateAndTime.Timer<
Start + Seconds
Application.DoEvents()
IfRichTextBox1.Text.ToLower.Contains("READYR:")
Then
RichTextBox1.Text = ""
Exit Do
EndIf
Loop
EndSub
Пример кода управляющей программы:
«BEGIN ' начало программы
HOME ‘ переход в начальное положение
M10 ‘ схват разжать
DO:3 ' начало цикла. повторить 3 раза
G01X00000Y00000Z00500F00000
G01X00000Y00000Z00000F00000
END_DO 'Конец цикла повторов
M11 ‘ схват сжать
FINISH ' конец программы»