Задание на выполнение лабораторной работы:
Необходимо разработать подпрограмму, которая в качестве фактических параметров получает два значения:
— номер степени робота (0 для степени X, 1 для степени Y или для Z);
— изменение обобщенной координаты степени.
Если изменение обобщенной координаты положительно, то движение степени должно осуществляться в направлении к концевому датчику конечного положения, а если отрицательно — в направлении к концевому датчику начального положения. Подпрограмма завершает работу в следующих случаях:
— если степень закончила движение в заданном направлении и расстояние пройдено полностью (возвращается 0);
— если в процессе управления движением степени обнаружилось, что сработал какой-либо из концевых датчиков (возвращается количество импульсов от инкрементного датчика, которое осталось не пройденным);
Тестовое задание.
Составить блок-схему алгоритма управления мехатронным модулем линейного перемещения в позиционном режиме.
Составить программу для управления мехатронным модулем линейного перемещения в позиционном режиме.
Приложение 1
Примеры использования библиотеки функций
Запуск звена1 вправо
int x=1, y=3, z=3, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(1,3,3,3,3),CountDvg1(3,3,3,3,3,3,3));
Запуск звена 1 влево
int x=-11, y=3, z=3, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(-1,3,3,3,3),CountDvg1(3,3,3,3,3,3,3));
Запуск звена 2 вправо
int x=3, y=1, z=3, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(3,1,3,3,3),CountDvg1(3,3,3,3,3,3,3));
Запуск звена 2 влево
int x=3, y=-1, z=3, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(3,-1,3,3,3),CountDvg1(3,3,3,3,3,3,3));
Запуск звена 3 вправо
int x=3, y=3, z=1, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(3,3,1,3,3),CountDvg1(3,3,3,3,3,3,3));
Запуск звена 3 влево
int x=3, y=3, z=-1, w=3;
byte olddvg0=3;
CountDvg0(x,y,z,w,olddvg0);
SetDvgRegs(CountDvg0(3,3,-1,3,3),CountDvg1(3,3,3,3,3,3,3));
Включение рабочего органа
int x=3, y=3, z=3, w=3;
int f=0, r=0, d0=1, d1=1, d2=1, ew=0;
byte olddvg0=3;
byte olddvg1=3;
SetDvgRegs(CountDvg0(x,y,z,w,olddvg0),CountDvg1(f,r,d0,d1,d2,ew,olddvg1));
Выключение рабочего органа
int x=3, y=3, z=3, w=3;
int f=0, r=0, d0=0, d1=0, d2=0, ew=0;
byte olddvg0=3;
byte olddvg1=3;
SetDvgRegs(CountDvg0(x,y,z,w,olddvg0),CountDvg1(f,r,d0,d1,d2,ew,olddvg1));
Получить значение концевых датчиков и датчиков оборотов двигателей из СУ.
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
} catch (...) {}
}
}
Получить значение левого концевого датчика звена 1 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label7->Text = TestBit(&s0,0).ToString();
} catch (...) {}
}
}
Получить значение правого концевого датчика звена 1 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label8->Text = TestBit(&s0,1).ToString();
} catch (...) {}
}
}
Получить значение левого концевого датчика звена 2 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label10->Text = TestBit(&s0,3).ToString();
} catch (...) {}
}
}
Получить значение правого концевого датчика звена 2 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label11->Text = TestBit(&s0,4).ToString();
} catch (...) {}
}
}
Получить значение левого концевого датчика звена 3 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label13->Text = TestBit(&s1,0).ToString();
} catch (...) {}
}
}
Получить значение правого концевого датчика звена 3 и вывести его на форму в LABEL
if(Out32) {
try {
toolStripStatusLabel2->Text = "Состояние: " + (CheckOnline() ? "online" : "offline");
byte s0=0,s1=0,s2=0;
GetSnsRegs(&s0,&s1,&s2);
label14->Text = TestBit(&s1,1).ToString();
} catch (...) {}
}
}