Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Расчетно-графическая работа (3 части) / ATK asoi-232 Abdulmenova / parATKv181
.py# -*- coding: cp1251 -*-
# -----------------------------------------------------
# Данный файл parATKvXXX.py является основным файлом программы
# АТК: Автоматизированный технологическийц комплекс.
# Данная программа реализует алгоритмическую модель
# автоматизированного технологического комплекса
# типа агрегатного сверлильного станка
# для многосторонней обработки корпусных деталей
#
# Реализуются разные конфигурации АТК0..АТК12
# технологической системы
# по числу h = 0..12 сверлильных силовых головок
#
# Программа предназначена
# для систематического исследования и изучения:
# - параллельных (и последовательных) алгоритмов
# с наглядной и доступной прикладной интерпретацией
# - их многопоточной программной реализации
# (средствами языка программирования Python)
#
# Файл parATKvXXX.py программы используется
# совместно с другими файлами:
# onHelpMsg.py - модуль вывода сообщений меню Справка
# expSub.py - модуль дополнительных циклов конфигурации АТК12
# paramSet.py - модуль для организации записи и загрузки
# комплексов параметров настройки конфигуациий АТК
# parDefault.ini - файл стандартных параметров (по умолчанию)
# xxxxxx - возможные (необязательные) дополнительные файлы
# нестандартных параметров настройки
# (xxxxxx - произвольные имена файлов)
# vXXX - общее обозначение версии программы
# (текущая версия: v150 и выше)
#
# Программа находится в состоянии разработки
#
# Разработчик программы parATK Житников А.П.
# Ноябрь 2005г.
# ------------------------------------------------------
from Tkinter import *
import math, time
import sys
import thread
#import threading
import pdb
import onHelpMsg # Модуль вывода сообщений меню Справка
import paramSet # Модуль настройки параметров
import expSub # Модуль дополнительных подпрограмм (експерименты)
############ класс констант (парамтеры по умолчанию):
# некоторые константы
# могут изменяться в режиме наладки системы
class Consts: # общий класс констант
#########
# параметры задержек
delay = 0.75 # общая задержка: между ходами
delay_st = 0.01 # задержка шага хода (циклов премещений)
#########
# габаритные размеры окон (по габаритам канвы)
# габариты окна 1: Технологическая схема
win1_width = 600
win1_height = 400
# габариты окна 3: Временная диаграмма
win3_width = 600
win3_height = 400
########
# габариты (прямоугольника) детали (потокового объекта)
det_width = 120 # ширина
det_height = 40 # высота
#########
# константы пространства перемещения деталей
# ходовые позиции (номера позиций)
# p_det = [0, 1, 2]
# координаты позиций детали
# данные по координате y
hhh = 150 # высота от низа окна
#########
# координаты базовой точки
x_base = win1_width/2
y_base = win1_height - hhh
ddy = 50 # разность высоты уровней позиций
yp_det_left = ddy
yp_det_right = ddy
yp_det = [
y_base + yp_det_left,
y_base,
y_base - yp_det_right
]
# данные по координате x
kxy = 3 # коэффициент kxy = ddx/dddy связи координат:
# котангенс угла наклонной лиинии движения деталей
ddx = ddy * kxy # расстояние до рабочей позиции (по горизонтали)
xp_det_left = ddx
xp_det_right = ddx
xp_det = [
x_base - xp_det_left,
x_base,
x_base + xp_det_right
]
# габариты установочных позиций деталей:
# загрузочная, рабочая, разгрузочная позиция
poz_width = det_width + 10 # ширина
poz_height = 6 # высота
########
# парамтры силовых головок
# габариты корпуса
corpus_length = 60 # длина корпуса с.головки (???)
corpus_height = 30 # высота корпуса с.головки
# габариты инструмента - начальные данные )по умолчанию)
instrum_length = [70, 20, 60, 30, 15, 50, 20, 40, 30, 10, 20, 15]
# instrum_length = [70, 50, 30] # длина инструмента с.головки
# instrum_length = [100, 20, 10] # длина инструмента с.головки
instrum_diametr = 6 # диаметр инструмента с.головки
# скоростные парамтеры
# high_spead = 3 # скорость холостого хода (для всех головок) - шаг
# work_spead = 1 # скорость рабочего хода - щаг
#???
########
# константы пространства размщения с.головок
# ходовые позиции с.головки 1 (номера позиций)
# p_hh1 = [0, 1]
# длина пути (быстрого) подвода с.головок
hihgh_speed_lenth = 30
# координаты позиций с.гоовки 1
# расстояния от торца головки до детали
a_h1_end = 10 # конечное расстояние: без инструмента
a_h1_pr = a_h1_end + instrum_length[1-1] # пром: инструмент
a_h1_begin = a_h1_pr + hihgh_speed_lenth # начальное: быстрый подвод
# координаты
# координаты позиций с.гоовки 2
# расстояния от торца головки до детали
a_h2_end = 10 # конечное расстояние: без инструмента)
a_h2_pr = a_h2_end + instrum_length[2-1] # пром: инструмент
a_h2_begin = a_h2_pr + hihgh_speed_lenth # начальное: быстрый подвод
# координаты
# координаты позиций с.гоовки 3
a_xp_h3 = 32 # сдвиг линий по оси x
# расстояния от торца головки до детали
a_h3_end = 10 # конечное расстояние: без инструмента)
a_h3_pr = a_h2_end + instrum_length[3-1] # пром: инструмент
a_h3_begin = a_h2_pr + hihgh_speed_lenth # начальное: быстрый подвод
# координаты
######################################
######################################
##########
class Wins: # окна
win2 = Tk();
win2.title(u'АТК: Агрегатный технологический комплекс. ПУЛЬТ УПРАВЛЕНИЯ')
win1 = Toplevel();
win1.title(u'АТК: Агрегатный технологический комплекс. ТЕХНОЛОГИЧЕСКАЯ СХЕМА (мнемосхема)')
c1 = Canvas( # канва (холст) окна: технологическая схема
win1,
bg = "Yellow",#"white",
width = Consts.win1_width,
height = Consts.win1_height
)
c1.pack() # канва 1 (холст для рисунка)
# win3 = Toplevel();
# win3.title(u'АТК: Агрегатный технологический комплекс. ВРЕМЕННАЯ ДИАГРАММА')
# канва (холст) окна: временная диаграмма
# c3 = Canvas(
# win3,
# bg = "Yellow",
# width = Consts.win3_width,
# height = Consts.win3_height
# )
# c3.pack()
def onDefaultParams(self):
print 'onDefaultParams'
paramSet.onImportParams(self.atk1+2*self.atk2+3*self.atk3+4*self.atk4+12*self.atk12,crt.c_board,'parDefault.ini')
def onLoadParams(self):
print 'onLoadParams'
paramSet.onImportParams(self.atk1+2*self.atk2+3*self.atk3+4*self.atk4+12*self.atk12,crt.c_board,'')
def onSaveParams(self):
print 'onSaveParams'
paramSet.onExportParams(self.atk1+2*self.atk2+3*self.atk3+4*self.atk4+12*self.atk12,crt.c_board)
def onAbout(self):
print 'onAbout'
onHelpMsg.onAbout(wins)
def onData(self):
print 'onData'
onHelpMsg.onData(wins)
def onExit(self):
print 'onExit'
wins.win2.destroy()
#------------------
cccrt = 0
print 'cccrt =', cccrt
def sys_delete(self):
if self.atk1:
crt.techsys.del_heads1()
if self.atk2:
crt.techsys.del_heads2()
if self.atk3 or self.atk3s:
crt.techsys.del_heads3()
if self.atk4:
crt.techsys.del_heads4()
if self.atk12:
crt.techsys.del_heads12()
crt.techsys.det_pos.inscriptions_del()
del crt.techsys
del crt.h_cycles
del crt.w_cycles
del crt.c_board
wins.fr1.pack_forget()
wins.fr2.pack_forget()
wins.fr3.pack_forget()
def sys_null(self):
self.atk0 = 0
self.atk1 = 0
self.atk2 = 0
self.atk3 = 0
self.atk3s = 0
self.atk4 = 0
self.atk12 = 0
def onATK0(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk0 = 1
Head.head_number = 0
wins.win2.geometry('630x210+300+400') # Пульт управления
crt.creatATK()
print 'onATK0: atk0 =', self.atk0
def onATK1(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk1 = 1
Head.head_number = 0
wins.win2.geometry('630x313+300+400') # Пульт управления self.length1 = IntVar()
crt.creatATK()
print 'onATK1: atk1 =', self.atk1
def onATK2(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk2 = 1
Head.head_number = 0
wins.win2.geometry('630x313+300+400') # Пульт управления self.length1 = IntVar()
crt.creatATK()
print 'onATK2: atk2 =', self.atk2
def onATK3(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk3 = 1
Head.head_number = 0
wins.win2.geometry('630x313+300+400') # Пульт управления self.length1 = IntVar()
crt.creatATK()
print 'onATK3: atk3 =', self.atk3
def onATK3s(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk3s = 1
Head.head_number = 0
wins.win2.geometry('630x313+300+400') # Пульт управления self.length1 = IntVar()
crt.creatATK()
print 'onATK3s: atk3s =', self.atk3s
def onATK4(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk4 = 1
Head.head_number = 0
wins.win2.geometry('630x367+300+400') # Пульт управления
crt.creatATK()
print 'onATK4: atk4 =', self.atk4
def onATK12(self):
if self.cccrt == 1:
self.sys_delete()
self.sys_null()
self.atk12 = 1
Head.head_number = 0
wins.win2.geometry('630x569+300+400') # Пульт управления
crt.creatATK()
print 'onATK12: atk12 =', self.atk12
# -------------------------------
def create_menu(self):
self.top_menu = Menu(self.win1)
self.win1.config(menu = self.top_menu)
self.file_menu = Menu(self.top_menu)
self.config_menu = Menu(self.top_menu)
self.param_menu = Menu(self.top_menu)
self.help_menu = Menu(self.top_menu)
self.top_menu.add_cascade(label = u"Файл", menu = self.file_menu)
self.file_menu.add_command(label = u"Создать")#, command = show("создать"))
self.file_menu.add_command(label = u"Открыть")#, command = show("создать"))
self.file_menu.add_command(label = u"Выход", command = self.onExit)
self.top_menu.add_cascade(
label = u"Конфигурация",
menu = self.config_menu
)
self.config_menu.add_command(
label = u"АТК0: Нет силовых головок",
command = self.onATK0
)
self.config_menu.add_command(
label = u"АТК1: Одна силовая головка",
command = self.onATK1
)
self.config_menu.add_separator()
self.config_menu.add_command(
label = u"АТК2: Две силовые головки",
command = self.onATK2
)
self.config_menu.add_separator()
self.config_menu.add_command(
label = u"АТК3: Три силовые головки",
command = self.onATK3
)
self.config_menu.add_command(
label = u"АТК3s: Три силовые головки: спец.функции",
command = self.onATK3s
)
# self.config_menu.add_separator()
self.config_menu.add_command(
label = u"АТК4: Четыре силовые головки (заготовка конфигурации)",
command = self.onATK4
)
self.config_menu.add_command(
label = u"АТК12: Двенадцать силовых головок",
command = self.onATK12
)
self.top_menu.add_cascade(label = u"Настройки", menu = self.param_menu)
self.param_menu.add_command(
label = u"Загрузка стандартных параметров", command = self.onDefaultParams)
self.param_menu.add_command(
label = u"Загрузка заданных параметров", command = self.onLoadParams)
self.param_menu.add_command(
label = u"Запись заданных параметров", command = self.onSaveParams)
self.top_menu.add_cascade(label = u"Справка", menu = self.help_menu)
self.help_menu.add_command(label = u"О программе", command = self.onAbout)
self.help_menu.add_separator()
self.help_menu.add_command(label = u"Краткие данные", command = self.onData)
#####################
########### классы технологической системы
class DetPositions: # позиции детали
def set_det_positions_coords(self):
self.xp_det_left = Consts.ddx
self.xp_det_right = Consts.ddx
self.xp_det = [
Consts.x_base - self.xp_det_left,
Consts.x_base,
Consts.x_base + self.xp_det_right
]
self.yp_det_left = Consts.ddy
self.yp_det_right = Consts.ddy
self.yp_det = [
Consts.y_base + self.yp_det_left,
Consts.y_base,
Consts.y_base - self.yp_det_right
]
# print 'xp_det = ', Consts.xp_det
# print 'yp_det = ', Consts.yp_det
# создание системы позиций
def creat_det_positions(self): # позиции деталей
# общая линия рабочих позиций деталей (технологческий канал)
tech_line = wins.c1.create_line( #??? hor
self.xp_det[0],
self.yp_det[0],
self.xp_det[2],
self.yp_det[2],
# fill = "Blue"
)
# разметка позиций короткими вертикальных линиями (штрихами)
ver_line1 = [ ] # пустой начальный список
for i in xrange(3):
ver_line1.append( # добавление в список
wins.c1.create_line(
self.xp_det[i],
self.yp_det[i] - 5,
self.xp_det[i],
self.yp_det[i] + 10,
# fill = "Red"
)
)
# установочные позиции
det_position = [] # пустой начальный список
idet_poz = [0, 1, 2]
for ii in idet_poz:
det_position.append( # добавление в список
wins.c1.create_rectangle(
self.xp_det[ii] - Consts.poz_width/2,
self.yp_det[ii],
self.xp_det[ii] + Consts.poz_width/2,
self.yp_det[ii] + Consts.poz_height,
fill = "Black"
)
)
def creat_inscriptions(self): # формирование надписей
self.text11 = wins.c1.create_text(
Consts.win1_width - 500,
20,
text = u'Состояние:'
)
self.text12 = wins.c1.create_text(
Consts.win1_width - 500,
38,
font = "Times 13 bold",
text = u'ГОТОВНОСТЬ'
)
self.text21 = wins.c1.create_text(
Consts.win1_width - 100,
20,
text = u'Число'
)
self.text22 = wins.c1.create_text(
Consts.win1_width - 100,
32,
text = u'обработанных'
)
self.text23 = wins.c1.create_text(
Consts.win1_width - 100,
44,
text = u'деталей'
)
self.text24 = wins.c1.create_text(
Consts.win1_width - 100,
60,
font = "Times 13 bold",
text = 0
)
def __init__(self):
self.set_det_positions_coords()
self.creat_det_positions()
self.creat_inscriptions()
def inscriptions_del(self):
wins.c1.delete(self.text11)
wins.c1.delete(self.text12)
wins.c1.delete(self.text21)
wins.c1.delete(self.text22)
wins.c1.delete(self.text23)
wins.c1.delete(self.text24)
##############################u
class Detale: # детали
det_number = 0
def __init__(self): # iidet - номер детали
self.det_number = self.det_number + 1
self.det_tag = 'det_teg' + str(self.det_number)
def set_det_pos(self, ppp): # установка детали в уст.позицию
self.rect = wins.c1.create_rectangle( # прямоугольник
Consts.xp_det[ppp] - Consts.det_width/2,
Consts.yp_det[ppp] - Consts.det_height,
Consts.xp_det[ppp] + Consts.det_width/2,
Consts.yp_det[ppp],
fill = 'White',
tag = self.det_tag # элемент помечен тегом
)
self.det_text = wins.c1.create_text(
Consts.xp_det[ppp],
Consts.yp_det[ppp] - 10,
text = 0,
font = "Times 12 bold",
# font = "Courer 10 bold",
tag = self.det_tag # элемент помечен тегом
)
wins.c1.update() # перерисовка виджета c1
def det_move(self, ppp): # перемещение детали влево
det_coords = wins.c1.coords(self.rect)
xxs = det_coords[0] # текущая координата прямоугольника
xxc = Consts.det_width/2 # поправка
x0_det = Consts.xp_det[ppp] # заданная позиционная абсцисса
dxp = float(Consts.xp_det[2] - Consts.xp_det[0])
dyp = float(Consts.yp_det[0] - Consts.yp_det[2])
kxy = dyp/dxp
dx = 2.
dy = -(dx * kxy)
delay = crt.c_board.step_delay.get() * 0.0001
while (xxs + xxc < x0_det):
if crt.c_board.extr_stop == 1: break # прерывание цикла
wins.c1.move(self.det_tag, dx, dy) # подвижка группы фигур
det_coords = wins.c1.coords(self.rect) # координаты прям-ка детали
xxs = det_coords[0] # текущая координата прямоугольника
wins.c1.update() # перерисовка виджета c1
time.sleep(delay)
##########################################
class Head: # силовые головки
# номер последней созданной сюголовки
head_number = 0
# базовые координаты
def set_head_base(self, xh_bbb, yh_bbb):
self.xh_base = xh_bbb
self.yh_base = yh_bbb
#####################
def set_par_head_pos(self): # параметры опизиций эталонной с.головок
# продольные параметры (относительно базы)
self.sd_bound = 30 # граница детали
self.shd_min = 10 # допустимое минимальное растояние с.головки до детали
self.hihgh_speed_lenth = Consts.hihgh_speed_lenth # длина пути (быстрого) подвода с.головок
# позиции эталонной с.головки в абстрактной системе (от базы)
self.shp2 = self.sd_bound + self.shd_min # конечная позиция
self.inst_length = Consts.instrum_length[self.head_number - 1] # длина инстр.
self.shp1 = self.shp2 + self.inst_length # промежуточная позиция
self.shp0 = self.shp1 + self.hihgh_speed_lenth # начальная позиция
# списки координт позиций с.головок в абсолюной системе
self.xhp = [
self.xh_base - self.shp0,
self.xh_base - self.shp1,
self.xh_base - self.shp2,
]
self.yhp = [
self.yh_base,
self.yh_base,
self.yh_base,
]
def set_par_head_positions_long_line(self): # линии разметаки позиций с.головок
# параметры длинной общей линии
self.x1_long_line = self.xh_base - (Consts.win1_width/2 - 10)
self.y1_long_line = self.yh_base
self.x2_long_line = self.xh_base
self.y2_long_line = self.yh_base
def creat_head_positions_long_line(self):
# горизонтальная линия позиций с.головок
self.long_line = wins.c1.create_line(
self.x1_long_line,
self.y1_long_line,
self.x2_long_line,
self.y2_long_line,
tag = self.line_head_tag, # элемент помечен тегом связи
)
def set_par_head_positions_short_lines(self): # линии разметаки позиций с.головок
# списка параметров (3-х) коротких линий позиций
self.x1_short_line = self.xhp
self.y1_short_line = self.yhp
self.x2_short_line = self.xhp
self.y2_short_line = [
self.yh_base + 10,
self.yh_base + 10,
self.yh_base + 10
]
def creat_head_positions_short_lines(self):
# вертмкальные линии позиций с.гоuловок
self.short_line = [ ] # пустой начальный список
ih_pos = [0, 1, 2] # список номеров (индексов) позиций
for ii in ih_pos:
self.short_line.append( # добавление в список
wins.c1.create_line(
self.x1_short_line[ii],
self.y1_short_line[ii],
self.x2_short_line[ii],
self.y2_short_line[ii],
tag = (self.line_head_tag,
self.short_line_head_tag), # элемент помечен тегом связи
)
)
#################
def set_par_set_head(self): # установка параметров установки с.головки
# координаты установочной (начальной) позиции
self.x0_head = self.xhp[0]
self.y0_head = self.yhp[0]
# параметры прямоугольника корпуса с.головки
# поправки координат (относительно базовой позиции)
yyy = 5 # отступ от длинной позиционной линии
self.xxx1_corp = - Consts.corpus_length
self.yyy1_corp = - Consts.corpus_height - yyy
self.xxx2_corp = 0
self.yyy2_corp = - yyy
# параметры прямоугольникa инструмента с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_inst = 0
y_exis = (Consts.corpus_height/2 + Consts.instrum_diametr/2) # ось инст.
self.yyy1_inst = - y_exis - yyy
self.xxx2_inst = self.inst_length
self.yyy2_inst = self.yyy1_inst + Consts.instrum_diametr
def set_head(self): # установка с.головки в начальную позицию
# прямоугольник корпуса с.головки
# координаты
xc1 = self.x0_head + self.xxx1_corp
yc1 = self.y0_head + self.yyy1_corp
xc2 = self.x0_head + self.xxx2_corp
yc2 = self.y0_head + self.yyy2_corp
# создание прямоугольгика
self.corpus_rect = wins.c1.create_rectangle(
xc1,
yc1,
xc2,
yc2,
fill = "Black",
tag = self.head_tag # элемент помечен тегом связи
)
# вписывание текста с номером с.головки (в поле корпуса)
# координаты
rect_coords = wins.c1.coords(self.corpus_rect)
xt = rect_coords[0] + (rect_coords[2] - rect_coords[0])/2
yt = rect_coords[1] + (rect_coords[3] - rect_coords[1])/2
# создание текста
self.head_text = wins.c1.create_text(
xt,
yt,
text = self.head_number,
# font = "Times 11 bold",
font = "Courer 11 bold",
fill = "White",
tag = self.head_tag # элемент помечен тегом связи
)
# прямоугольник инструмента с.головки
# координаты
xi1 = self.x0_head + self.xxx1_inst
yi1 = self.y0_head + self.yyy1_inst
xi2 = self.x0_head + self.xxx2_inst
yi2 = self.y0_head + self.yyy2_inst
# создание прямоугольгика
self.inst_rect = wins.c1.create_rectangle(
xi1,
yi1,
xi2,
yi2,
fill = "Black",
tag = self.head_tag # элемент помечен тегом связи
)
# связка графических элементов тегом (для совместного премещения)
# wins.c1.addtag_withtag(self.head_tag, self.corpus_rect)
#########################
# установка параметров движегия сюголовки
def set_par_move(self):
# заданные (базовые) координаты позиций
self.bc_head = self.xhp
# модуль шага
self.mdx = 1
self.mdy = 0
# базовый параметр координат прямоугольника корпуса
self.par = 2 # 0: x1; 1: y1; 2: x2; 3: y2
###########################
def move_head(self, pp_head, speed): # перемещение с.головки
# pp_head = 0, 1, 2: заданная позиция с.головки :
# speed - заданная скорость хода с.головки:
# high - высокая скорость (быстрый подвод инструмента к детали)
# work - рабочая скорость (work feed: рабочая подача)
# координаты прямоугольника корпуса
rect_coords = wins.c1.coords(self.corpus_rect) # координаты прям-ка
wc_head = rect_coords[self.par] # текущая базовая координата
# координата заданной позиция
gc_head = self.bc_head[pp_head]
if wc_head < gc_head:
dx = self.mdx
dy = self.mdy
if wc_head > gc_head:
dx = - self.mdx
dy = - self.mdy
delay = crt.c_board.step_delay.get() * 0.0001
while (wc_head != gc_head):
if crt.c_board.extr_stop == 1: break # проверка прерывания
wins.c1.move(self.head_tag, dx, dy) # подвижка группы фигур
rect_coords = wins.c1.coords(self.corpus_rect)
wc_head = rect_coords[self.par] # текущая рабочая координата
wins.c1.update() # обновление экрана
if speed == 'high': # внутрицикловая задержка
# time.sleep(Consts.delay_st)
time.sleep(delay)
elif speed == 'work':
# time.sleep(Consts.delay_st * 10)
time.sleep(delay * 10)
#####################
def create_head(self):
self.set_par_head_pos() #
self.set_par_head_positions_long_line()
self.set_par_head_positions_short_lines()
self.creat_head_positions_long_line()
self.creat_head_positions_short_lines()
self.set_par_set_head()
self.set_head()
self.set_par_move()
#####################
def __init__(self, xh_bbb, yh_bbb):
# тег очереного объекта силовой головки
Head.head_number = Head.head_number + 1
self.head_number = Head.head_number
self.head_tag = 'head_tag' + str(self.head_number)
self.line_head_tag = 'line_head_tag' + str(self.head_number)
self.short_line_head_tag = 'short_line_head_tag' + str(self.head_number)
self.set_head_base(xh_bbb, yh_bbb)
self.create_head()
#####################
########################
class LeftHead(Head): # левая с.головка
def set_par_head_pos(self): # параметры опизиций эталонной с.головок
# продольные параметры (относительно базы)
self.sd_bound = Consts.det_width/2 # граница детали
self.shd_min = 10 # допустимое минимаьное растояние с.головки до детали
# self.inst_length = Consts.instrum_length # список длины интсрумента с.головок
self.hihgh_speed_lenth = Consts.hihgh_speed_lenth # длина пути (быстрого) подвода с.головок
# позиции эталонной с.головки в абстрактной системе (от базы_
self.shp2 = self.sd_bound + self.shd_min # конечная позиция
self.inst_length = Consts.instrum_length[self.head_number - 1] # длина инстр.
self.shp1 = self.shp2 + self.inst_length # промежуточная позиция
self.ahp0 = self.shp1 + self.hihgh_speed_lenth # начальная позиция
# списки координт позиций с.головок в абсолюной системе
self.xhp = [
self.xh_base - self.ahp0,
self.xh_base - self.shp1,
self.xh_base - self.shp2,
]
self.yhp = [
self.yh_base,
self.yh_base,
self.yh_base,
]
class RightHead(Head): # левая с.головка
def set_par_head_pos(self): # абстрактные позициии силовых головок
self.sd_bound = Consts.det_width/2
self.shd_min = 10 # допустимое минимаьное растояние с.головки до детали
self.hihgh_speed_lenth = Consts.hihgh_speed_lenth # длина пути (быстрого) подвода с.головок
# позиции эталонной с.головки в абстрактной системе
self.shp2 = self.sd_bound + self.shd_min # расстояние до конечной позиции (от s-базы)
self.inst_length = Consts.instrum_length[self.head_number - 1]
self.shp1 = self.shp2 + self.inst_length
self.ahp0 = self.shp1 + self.hihgh_speed_lenth
# списки координта позиций в абсолюной системе
self.xhp = [
self.xh_base + self.ahp0,
self.xh_base + self.shp1,
self.xh_base + self.shp2,
]
self.yhp = [
self.yh_base,
self.yh_base,
self.yh_base,
]
def set_par_head_positions_long_line(self): # рабочие позиции силовых головок
# ждинная линия
self.x1_long_line = self.xh_base + (Consts.win1_width/2 - 10)
self.y1_long_line = self.yh_base
self.x2_long_line = self.xh_base
self.y2_long_line = self.yh_base
def set_par_head_positions_short_lines(self):
# списка параметров (3-х) коротких линий
self.x1_short_line = self.xhp
self.y1_short_line = self.yhp
self.x2_short_line = self.xhp
self.y2_short_line = [
self.yh_base + 10,
self.yh_base + 10,
self.yh_base + 10
]
def set_par_set_head(self): # установка параметров установки с.головки
# координаты позиции
self.x0_head = self.xhp[0]
self.y0_head = self.yhp[0]
# параметры прямоугольника корпуса с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_corp = 0
self.yyy1_corp = - Consts.corpus_height - 5
self.xxx2_corp = Consts.corpus_length
self.yyy2_corp = - 5
# параметры прямоугольникa инструмента с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_inst = - self.inst_length #Consts.instrum_length[Head.head_number
self.yyy1_inst = -(Consts.corpus_height/2 + Consts.instrum_diametr/2) -5
self.xxx2_inst = 0
self.yyy2_inst = self.yyy1_inst + Consts.instrum_diametr
def set_par_move(self):
# заданные (базовые) координаты позиций
self.bc_head = self.xhp
# модуль (величина) шага
self.mdx = 1
self.mdy = 0
# базовые параметры координат прямоугольника корпуса
self.par = 0 # 0: x1; 1: y1; 2: x2; 3: y2
###################################
class UpperHead(Head): # левая с.головка
def set_par_head_pos(self): # абстрактные позициии силовых головок
self.sd_bound = Consts.det_height
self.shd_min = 10 # допустимое минимаьное растояние с.головки до детали
self.hihgh_speed_lenth = Consts.hihgh_speed_lenth # длина пути (быстрого) подвода с.головок
print 'det_height UH =', Consts.det_height
# позиции эталонной с.головки в абстрактной системе
self.shp2 = self.sd_bound + self.shd_min # расстояние до конечной позиции (от s-базы)
self.inst_length = Consts.instrum_length[self.head_number - 1]
self.shp1 = self.shp2 + self.inst_length
self.ahp0 = self.shp1 + self.hihgh_speed_lenth
# списки координта позиций в абсолюной системе
self.xhp = [
self.xh_base,
self.xh_base,
self.xh_base,
]
self.yhp = [
self.yh_base - self.ahp0,
self.yh_base - self.shp1,
self.yh_base - self.shp2,
]
def set_par_head_positions_long_line(self): # рабочие позиции силовых головок
# ждинная линия
self.x1_long_line = self.xh_base + (Consts.corpus_height/2 + 5)
self.y1_long_line = self.yh_base - (Consts.win1_height/2 - 10)
self.x2_long_line = self.xh_base + (Consts.corpus_height/2 + 5)
self.y2_long_line = self.yh_base
def set_par_head_positions_short_lines(self):
# списка параметров (3-х) коротких линий
self.x1_short_line = [
self.xh_base + (Consts.corpus_height/2 + 5),
self.xh_base + (Consts.corpus_height/2 + 5),
self.xh_base + (Consts.corpus_height/2 + 5)
]
self.y1_short_line = self.yhp
self.x2_short_line = [
self.xh_base + (Consts.corpus_height/2 + 5) + 10,
self.xh_base + (Consts.corpus_height/2 + 5) + 10,
self.xh_base + (Consts.corpus_height/2 + 5) + 10
]
self.y2_short_line = self.yhp
def set_par_set_head(self): # установка параметров установки с.головки
# координаты позиции
self.x0_head = self.xhp[0]
self.y0_head = self.yhp[0]
# параметры прямоугольника корпуса с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_corp = - Consts.corpus_height/2
self.yyy1_corp = - Consts.corpus_length
self.xxx2_corp = + Consts.corpus_height/2
self.yyy2_corp = 0
# параметры прямоугольникa инструмента с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_inst = - Consts.instrum_diametr/2
self.yyy1_inst = 0
self.xxx2_inst = + Consts.instrum_diametr/2
self.yyy2_inst = self.inst_length
def set_par_move(self):
# заданные (базовые) координаты позиций
self.bc_head = self.yhp
# модуль (величина) шага
self.mdx = 0
self.mdy = 1
# базовые параметры координат прямоугольника корпуса
self.par = 3 # 0: x1; 1: y1; 2: x2; 3: y2
#########################
class LowerHead(Head): # нижняя с.головка
def set_par_head_pos(self): # абстрактные позициии силовых головок
self.sd_bound = 0#Consts.det_height
self.shd_min = 10 # допустимое минимаьное растояние с.головки до детали
self.hihgh_speed_lenth = Consts.hihgh_speed_lenth # длина пути (быстрого) подвода с.головок
# позиции эталонной с.головки в абстрактной системе
self.shp2 = self.sd_bound + self.shd_min # расстояние до конечной позиции (от s-базы)
self.inst_length = Consts.instrum_length[self.head_number - 1]
self.shp1 = self.shp2 + self.inst_length
self.ahp0 = self.shp1 + self.hihgh_speed_lenth
# списки координта позиций в абсолюной системе
self.xhp = [
self.xh_base,
self.xh_base,
self.xh_base,
]
self.yhp = [
self.yh_base + self.ahp0,
self.yh_base + self.shp1,
self.yh_base + self.shp2,
]
def set_par_head_positions_long_line(self): # рабочие позиции силовых головок
# ждинная линия
self.x1_long_line = self.xh_base + (Consts.corpus_height/2 + 5)
self.y1_long_line = self.yh_base
self.x2_long_line = self.xh_base + (Consts.corpus_height/2 + 5)
self.y2_long_line = self.yh_base + (Consts.win1_height/2 - 10)
def set_par_head_positions_short_lines(self):
# списка параметров (3-х) коротких линий
self.x1_short_line = [
self.xh_base + (Consts.corpus_height/2 + 5),
self.xh_base + (Consts.corpus_height/2 + 5),
self.xh_base + (Consts.corpus_height/2 + 5)
]
self.y1_short_line = self.yhp
self.x2_short_line = [
self.xh_base + (Consts.corpus_height/2 + 5) + 10,
self.xh_base + (Consts.corpus_height/2 + 5) + 10,
self.xh_base + (Consts.corpus_height/2 + 5) + 10
]
self.y2_short_line = self.yhp
def set_par_set_head(self): # установка параметров установки с.головки
# координаты позиции
self.x0_head = self.xhp[0]
self.y0_head = self.yhp[0]
# параметры прямоугольника корпуса с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_corp = - Consts.corpus_height/2
self.yyy1_corp = 0
self.xxx2_corp = + Consts.corpus_height/2
self.yyy2_corp = + Consts.corpus_length
# параметры прямоугольникa инструмента с.головки
# поправки координат (относительно базовой позиции)
self.xxx1_inst = - Consts.instrum_diametr/2
self.yyy1_inst = - self.inst_length
self.xxx2_inst = + Consts.instrum_diametr/2
self.yyy2_inst = 0
def set_par_move(self):
# заданные (базовые) координаты позиций
self.bc_head = self.yhp
# модуль (величина) шага
self.mdx = 0
self.mdy = 1
# базовые параметры координат прямоугольника корпуса
self.par = 1 # 0: x1; 1: y1; 2: x2; 3: y2
###################################################
class CreatHeads0: # технологическая система
def creat_heads0(self): # создание и размещение силовых головок
Consts.det_height = 40 # новые размеры детали
Consts.det_width = 120
xxx = Consts.x_base # базовая модель
yyy = Consts.y_base
###########
class CreatHeads1: # технологическая система
def creat_heads1(self): # создание и размещение силовых головок
Consts.det_height = 40 # новые размеры детали
Consts.det_width = 120
xxx = Consts.x_base # 1 с.головка
yyy = Consts.y_base
self.head1 = LeftHead(xxx, yyy) # с.головка СГ1
self.head1.zzh = 0
def del_heads1(self):
wins.c1.delete(self.head1.head_tag)
wins.c1.delete(self.head1.line_head_tag)
##########
class CreatHeads2: # технологическая система
def creat_heads2(self): # создание и размещение силовых головок
Consts.det_height = 40 # новые размеры детали
Consts.det_width = 120
xxx = Consts.x_base # 2 с.головки
yyy = Consts.y_base
self.head1 = LeftHead(xxx, yyy) # с.головка СГ1
self.head2 = RightHead(xxx, yyy) # с.головка СГ2
self.head1.zzh = 0
self.head2.zzh = 0
def del_heads2(self):
wins.c1.delete(self.head1.head_tag)
wins.c1.delete(self.head2.head_tag)
wins.c1.delete(self.head1.line_head_tag)
wins.c1.delete(self.head2.line_head_tag)
###########
class CreatHeads3: # технологическая система
def creat_heads3(self): # создание и размещение силовых головок
Consts.det_height = 40 # новые размеры детали
Consts.det_width = 120
xxx = Consts.x_base # 3 с.головки
yyy = Consts.y_base
self.head1 = LeftHead(xxx, yyy) # с.головка СГ1
self.head2 = RightHead(xxx, yyy) # с.головка СГ2
self.head3 = UpperHead(xxx, yyy) # с.головка СГ3
self.head1.zzh = 0
self.head2.zzh = 0
self.head3.zzh = 0
def del_heads3(self):
wins.c1.delete(self.head1.head_tag)
wins.c1.delete(self.head2.head_tag)
wins.c1.delete(self.head3.head_tag)
wins.c1.delete(self.head1.line_head_tag)
wins.c1.delete(self.head2.line_head_tag)
wins.c1.delete(self.head3.line_head_tag)
###########
class CreatHeads4: # технологическая система
def creat_heads4(self): # создание и размещение силовых головок
xxx = Consts.x_base # 4 с.головки
yyy = Consts.y_base
self.head1 = LeftHead(xxx, yyy) # с.головка СГ1
self.head2 = RightHead(xxx, yyy) # с.головка СГ2
self.head3 = UpperHead(xxx, yyy) # с.головка СГ3
self.head4 = LowerHead(xxx, yyy) # с.головка СГ3
self.head1.zzh = 0
self.head2.zzh = 0
self.head3.zzh = 0
self.head4.zzh = 0
def del_heads4(self):
wins.c1.delete(self.head1.head_tag)
wins.c1.delete(self.head2.head_tag)
wins.c1.delete(self.head3.head_tag)
wins.c1.delete(self.head4.head_tag)
wins.c1.delete(self.head1.line_head_tag)
wins.c1.delete(self.head2.line_head_tag)
wins.c1.delete(self.head3.line_head_tag)
wins.c1.delete(self.head4.line_head_tag)
#############
class CreatHeads12: # технологическая система
def creat_heads12(self): # создание и размещение силовых головок
# 12 с.головок
Consts.det_height = 120 # новые размеры детали
Consts.det_width = 128
xxx = Consts.x_base
yyy = Consts.y_base
self.head1 = LeftHead(xxx, yyy) # с.головка СГ1
self.head2 = LeftHead(xxx, yyy - 40) # с.головка СГ2
self.head3 = LeftHead(xxx, yyy - 80) # с.головка СГ3
self.head4 = RightHead(xxx, yyy) # с.головка СГ4
self.head5 = RightHead(xxx, yyy - 40) # с.головка СГ5
self.head6 = RightHead(xxx, yyy - 80) # с.головка СГ6
self.head7 = UpperHead(xxx - 40, yyy) # с.головка СГ7
self.head8 = UpperHead(xxx, yyy) # с.головка СГ8
self.head9 = UpperHead(xxx + 40, yyy) # с.головка СГ9
self.head10 = LowerHead(xxx - 40, yyy) # с.головка СГ10
self.head11 = LowerHead(xxx, yyy) # с.головка СГ11
self.head12 = LowerHead(xxx + 40, yyy) # с.головка СГ12
self.head1.zzh = 0
self.head2.zzh = 0
self.head3.zzh = 0
self.head4.zzh = 0
self.head5.zzh = 0
self.head6.zzh = 0
self.head7.zzh = 0
self.head8.zzh = 0
self.head9.zzh = 0
self.head10.zzh = 0
self.head11.zzh = 0
self.head12.zzh = 0
def del_heads12(self):
wins.c1.delete(self.head1.head_tag)
wins.c1.delete(self.head2.head_tag)
wins.c1.delete(self.head3.head_tag)
wins.c1.delete(self.head4.head_tag)
wins.c1.delete(self.head5.head_tag)
wins.c1.delete(self.head6.head_tag)
wins.c1.delete(self.head7.head_tag)
wins.c1.delete(self.head8.head_tag)
wins.c1.delete(self.head9.head_tag)
wins.c1.delete(self.head10.head_tag)
wins.c1.delete(self.head11.head_tag)
wins.c1.delete(self.head12.head_tag)
wins.c1.delete(self.head1.line_head_tag)
wins.c1.delete(self.head2.line_head_tag)
wins.c1.delete(self.head3.line_head_tag)
wins.c1.delete(self.head4.line_head_tag)
wins.c1.delete(self.head5.line_head_tag)
wins.c1.delete(self.head6.line_head_tag)
wins.c1.delete(self.head7.line_head_tag)
wins.c1.delete(self.head8.line_head_tag)
wins.c1.delete(self.head9.line_head_tag)
wins.c1.delete(self.head10.line_head_tag)
wins.c1.delete(self.head11.line_head_tag)
wins.c1.delete(self.head12.line_head_tag)
################
class TechnolSystem(
CreatHeads0,
CreatHeads1,
CreatHeads2,
CreatHeads3,
CreatHeads4,
CreatHeads12,
): # технологическая система: множественное наследование классов
def __init__(self): # порождение заданной конфигурации
self.det_pos = DetPositions()
if wins.atk0:
self.creat_heads0()
if wins.atk1:
self.creat_heads1()
if wins.atk2:
self.creat_heads2()
if wins.atk3 or wins.atk3s:
self.creat_heads3()
if wins.atk4:
self.creat_heads4()
if wins.atk12:
self.creat_heads12()
####################################################
############### классы блоков управления
class HeadsCycles:
# БУЦ-У1: Блок управления цикламиюУровень 1:
# управление циклами работы силовых головок
# циклы работы силовых головок
# hhhn - (полное) имя (екземпляра) сюголовки
def head_cycle_i0t0(self, hhhn): # простой цикл силовой головки^
# i0 - без прерываний
# t0 - без вывода времени
# силовая головка в позиции p0
hhhn.move_head(1, 'high') # быстрый подвод в позицию p1
hhhn.move_head(2, 'work') # рабочая подача в позицию p2
time.sleep(Consts.delay/2) # вдержка на упоре (для глухихи отв-ий)
hhhn.move_head(0, 'high') # выстрцый возврат в позицию p0
def head_cycle_i0t1(self, hhhn): # цикл силовой головки
# i0 - без прерываний
# t1 - с выводом времени
mutex = thread.allocate_lock() # замок взаимного исключения доступа
# mutex.acquire()
# print
# print 'начало цикла с.головки hc', hhhn
tb_hc = time.clock()
# print 'tb_h', hhhn, ' = ', tb_hc
# mutex.release()
hhhn.move_head(1, 'high')
hhhn.move_head(2, 'work')
time.sleep(Consts.delay/2)
hhhn.move_head(0, 'high')
# mutex.acquire()
# print
# print 'конец цикла с.головки hc', hhhn
te_hc = time.clock()
# print 'te_hc', hhhn, ' = ', te_hc
mutex.acquire()
# print
print 'длительность цикла с.головки hc', hhhn.head_number
mz_hc = te_hc - tb_hc
print 'mz_hc', hhhn.head_number, ' = ', mz_hc
mutex.release()
def head_cycle_i1(self, hhhn): # цикл силовой головки
# i1 - с прерываниями
# t1 - с выводом времени
if crt.c_board.extr_stop == 0:
# if crt.c_board.cycle_var.get() == 11: # последовательный цикл
# if crt.c_board.wait_cbtn_var.get() == 1:
# wins.c1.wait_variable(crt.c_board.wait_var)
hhhn.move_head(1, 'high')
if crt.c_board.extr_stop == 0:
# print 'cycle_var = ', crt.c_board.cycle_var.get()
if crt.c_board.cycle_var.get() == 11: # последовательный цикл
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
hhhn.move_head(2, 'work')
time.sleep(Consts.delay/2)
if crt.c_board.extr_stop == 0:
if crt.c_board.cycle_var.get() == 11: # последовательный цикл
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
hhhn.move_head(0, 'high')
def head_cycle(self, hhhn): # цикл силовой головки
# Выбор вариантов исполнения
# hhhn - (полное) имя (екземпляра) с.головки
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.head_cycle_i0t0(hhhn)
else:
self.head_cycle_i0t1(hhhn)
else:
self.head_cycle_i1(hhhn)
def Zh(self, hhhn): # команда управления циклом силовой головки
hhhn.yzh = 0 # выходная переменная – передача управления
hhhn.zzh = 1 # переменная индикации рабочего состояния
self.head_cycle(hhhn)
hhhn.zzh = 0 # переменная индикации рабочего состояния
hhhn.yzh = 1 # выходная переменная
####################
class HeadsGroupCycles_atk0(HeadsCycles): # пустые групповые циклы
# нет с.головок
def A001(self): # пустой алгоритм
pass # интепретация 1 - закнутая перемычка
def A002(self): # пустой алгоритм - пока не реализован
pass # интепретация 2 - разомкнутая перемычка
def heads_group_cycle_atk0(self):
if crt.c_board.cycle_var.get() == 'A001': # частичный параллелизм
self.A001()
if crt.c_board.cycle_var.get() == 'A002': # частичный параллелизм
self.A002()
####################
class HeadsGroupCycles_atk1(HeadsCycles): # еденичные групповые циклы
# одлна с. головка СГ1
def A101(self):
self.Zh(crt.techsys.head1)
def A101_2(self):
pass
def heads_group_cycle_atk1(self):
if crt.c_board.cycle_var.get() == 'A101':
self.A101()
if crt.c_board.cycle_var.get() == 'A101_2':
self.A101_2()
####################
class HeadsGroupCycles_atk2(HeadsCycles): # групповые циклы: СГ1, СГ2, СГ3
def A211(self): # прямая последовательность циклов СГ
self.Zh(crt.techsys.head1) # СГ1 - типовой цикл
self.Zh(crt.techsys.head2) # СГ2 - типовой цикл
def A211_2(self): # обратная последовательность циклов СГ
self.Zh(crt.techsys.head2) # СГ2 - типовой цикл
self.Zh(crt.techsys.head1) # СГ1 - типовой цикл
def A222(self): # параллельная конъюнкция процессов
thread.start_new(self.Zh, (crt.techsys.head2, )) # поток СГ2
self.Zh(crt.techsys.head1) # СГ1 - типовой цикл
while not(crt.techsys.head2.yzh):
pass
def A222_2(self): # параллельная конъюнкция процессов
thread.start_new(self.Zh, (crt.techsys.head1, )) # поток СГ1
thread.start_new(self.Zh, (crt.techsys.head2, )) # поток СГ2
time.sleep(1)
while not(crt.techsys.head1.yzh):
pass
while not(crt.techsys.head2.yzh):
pass
def A222_3(self): # параллельная конъюнкция процессов
thread.start_new(self.Zh, (crt.techsys.head1, )) # поток СГ1
thread.start_new(self.Zh, (crt.techsys.head2, )) # поток СГ2
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
def A232(self): # параллельная дизъюнкция процессов
thread.start_new(self.Zh, (crt.techsys.head1, )) # поток СГ1
thread.start_new(self.Zh, (crt.techsys.head2, )) # поток СГ2
time.sleep(1)
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
def heads_group_cycle_atk2(self):
if crt.c_board.cycle_var.get() == 'A211': # последовательный цикл
self.A211()
if crt.c_board.cycle_var.get() == 'A211_2': # последовательный цикл
self.A211_2()
if crt.c_board.cycle_var.get() == 'A222': # параллельный цикл
self.A222()
if crt.c_board.cycle_var.get() == 'A222_2': # параллельный цикл
self.A222_2()
if crt.c_board.cycle_var.get() == 'A222_3': # параллельныйй цикл
self.A222_3()
if crt.c_board.cycle_var.get() == 'A232': # параллельный цикл
self.A232()
####################
class HeadsGroupCycles_atk3(HeadsCycles): # групповые циклы СГ1, СГ2, СГ3
def A311(self): # простой последовательный цикл
self.Zh(crt.techsys.head1) # СГ1 - типовой цикл
self.Zh(crt.techsys.head2) # СГ2 - типовой цикл
self.Zh(crt.techsys.head3) # СГ3 - типовой цикл
def A01(self): # подпрограмма второго потока
self.za01 = 0
thread.start_new(self.Zh, (crt.techsys.head3, )) # поток СГ1
self.Zh(crt.techsys.head2)
while not(crt.techsys.head3.yzh):
pass
self.za01 = 1
def A323(self):
thread.start_new(self.A01, ( )) # поток СГ1
self.Zh(crt.techsys.head1) # типовой цикл СГ1
while not(self.za01):
pass
def A323_2(self): # все три цикла выносятся в потоки
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
pass
def A322(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
while not crt.techsys.head2.yzh:
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
def A332(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1) # спец. задержка
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
def A342(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1) # спец. задержка
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
def heads_group_cycle_atk3(self):
if crt.c_board.cycle_var.get() == 'A311': # последовательный цикл
self.A311()
if crt.c_board.cycle_var.get() == 'A323': # максимальный параллелизм
self.A323()
if crt.c_board.cycle_var.get() == 'A323_2': # максимальный параллелизм
self.A323_2()
if crt.c_board.cycle_var.get() == 'A322': # частичный параллелизм
self.A322()
if crt.c_board.cycle_var.get() == 'A332': # частичный параллелизм
self.A332()
if crt.c_board.cycle_var.get() == 'A342': # частичный параллелизм
self.A342()
####################
class HeadsGroupCycles_atk3s(HeadsCycles): # групповые циклы СГ1, СГ2, СГ3
def A311_i0t0(self): # простой последовательный цикл
self.Zh(crt.techsys.head1) # СГ1 - типовой цикл
self.Zh(crt.techsys.head2) # СГ2 - типовой цикл
self.Zh(crt.techsys.head3) # СГ3 - типовой цикл
def A311_i0t1(self): # последовательный цикл
# с выводом времени и длительности цикла
print
print 'начало цикла группы с.головок hgc11'
tb_hgc11 = time.clock()
print 'tb_hgc11 = ', tb_hgc11
print
self.Zh(crt.techsys.head1)
self.Zh(crt.techsys.head2)
self.Zh(crt.techsys.head3)
print
print 'конец цикла группы с.головок hgc11'
te_hgc11 = time.clock()
print 'te_hgc11 = ', te_hgc11
# print
print 'длительность цикла группы с.головок hgc11'
ma_hgc11 = te_hgc11 - tb_hgc11
print 'ma_hgc11 = ', ma_hgc11
def A311_i1(self): # последовательный цикл - с прерываниями
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
# if ControlBoard.extr_stop == 0:
# if crt.c_board.wait_cbtn_var.get() == 1:
# wins.c1.wait_variable(crt.c_board.wait_var)
self.Zh(crt.techsys.head1) # цикл силовой головки
else:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop2 = 0
self.Zh(crt.techsys.head1) # цикл силовой головки
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.Zh(crt.techsys.head2) # цикл силовой головки
else:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop2 = 0
self.Zh(crt.techsys.head2) # цикл силовой головки
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.Zh(crt.techsys.head3) # цикл силовой головки
else:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop2 = 0
self.Zh(crt.techsys.head3) # цикл силовой головки
za01 = 0 # переменная индикации окончания подпрограммы
def A01(self): # подпрограмма второго потока
self.za01 = 0
thread.start_new(self.Zh, (crt.techsys.head3, )) # поток СГ1
self.Zh(crt.techsys.head2)
while not(crt.techsys.head3.yzh):
pass
self.za01 = 1
def A3231_i0t0(self):
thread.start_new(self.A01, ( )) # поток СГ1
self.Zh(crt.techsys.head1) # типовой цикл СГ1
while not(self.za01):
pass
def A3231_i0t1(self):
print
print 'начало цикла группы с.головок hgc321'
tb_hgc321 = time.clock()
print 'tb_hgc321 = ', tb_hgc321
print
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
self.Zh(crt.techsys.head3) # цикл силовой головки
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
print
print 'конец цикла группы с.головок hgc321'
te_hgc321 = time.clock()
print 'te_hgc321 = ', te_hgc321
# print
print 'длительность цикла группы с.головок hgc321'
ma_hgc321 = te_hgc321 - tb_hgc321
print 'ma_hgc321 = ', ma_hgc321
def A3231_i1(self):
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
self.Zh(crt.techsys.head3) # цикл силовой головки
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
def A3232_i0t0(self): # все три цикла выносятся в потоки
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
#time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
# while not(HeadsCycles.Zh(head1).yzh and HeadsCycles.Zh(head2).yzh and HeadsCycles.Zh(head3).yzh):
pass
def A3232_i0t1(self):
print
print 'начало цикла группы с.головок hgc322'
tb_hgc322 = time.clock()
print 'tb_hgc322 = ', tb_hgc322
print
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
#time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
pass
print
print 'конец цикла группы с.головок hgc322'
te_hgc322 = time.clock()
print 'te_hgc322 = ', te_hgc322
# print
print 'длительность цикла группы с.головок hgc322'
ma_hgc322 = te_hgc322 - tb_hgc322
print 'ma_hgc322 = ', ma_hgc322
def A3232_i1(self):
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
def A322_i0t0(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
while not crt.techsys.head2.yzh:
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
def A322_i0t1(self):
print
print 'начало цикла группы с.головок hgc22'
tb_hgc22 = time.clock()
print 'tb_hgc22 = ', tb_hgc22
print
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head1, ))
self.Zh(crt.techsys.head1)
#time.sleep(1)
thread.join(self.head1_cycle, ( ))
thread.join(self.head2_cycle, ( ))
#while not crt.techsys.head1.yzh:
# pass
#while not crt.techsys.head2.yzh:
# pass
self.Zh(crt.techsys.head3) # цикл силовой головки
print
print 'конец цикла группы с.головок hgc22'
te_hgc22 = time.clock()
print 'te_hgc22 = ', te_hgc22
# print
print 'длительность цикла группы с.головок hgc22'
ma_hgc22 = te_hgc22 - tb_hgc22
print 'ma_hgc22 = ', ma_hgc22
def A322_i1(self):
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
self.Zh(crt.techsys.head3) # цикл силовой головки
def A332_i0t0(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
#time.sleep(1) # спец. задержка
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
def A332_i0t1(self):
print
print 'начало цикла группы с.головок hgc23'
tb_hgc23 = time.clock()
print 'tb_hgc23 = ', tb_hgc23
print
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1) # спец. задержка
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
print
print 'конец цикла группы с.головок hgc23'
te_hgc23 = time.clock()
print 'te_hgc23 = ', te_hgc23
# print
print 'длительность цикла группы с.головок hgc231'
ma_hgc23 = te_hgc23 - tb_hgc23
print 'ma_hgc23 = ', ma_hgc23
def A332_i1(self):
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
time.sleep(1) # спец. задержка
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
self.Zh(crt.techsys.head3) # цикл силовой головки
def cycle3_42_i0t0(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
print 'спец. задержка'
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
# while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh):
pass
def A342_i0t1(self):
print
print 'начало цикла группы с.головок hgc24'
tb_hgc24 = time.clock()
print 'tb_hgc24 = ', tb_hgc24
print
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
print 'спец. задержка'
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
pass
self.Zh(crt.techsys.head3) # цикл силовой головки
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
pass
print
print 'конец цикла группы с.головок hgc24'
te_hgc24 = time.clock()
print 'te_hgc24 = ', te_hgc24
# print
print 'длительность цикла группы с.головок hgc24'
ma_hgc24 = te_hgc24 - tb_hgc24
print 'ma_hgc24 = ', ma_hgc24
def A342_i1(self):
if crt.c_board.tech_stop2 == 0:
if crt.c_board.extr_stop == 0:
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
print 'спец. задержка'
while not(crt.techsys.head1.yzh or crt.techsys.head2.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
self.Zh(crt.techsys.head3) # цикл силовой головки
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
if crt.c_board.tech_stop2 == 1: break
if crt.c_board.extr_stop == 1: break
# цикл1 обработки детали (в рабочей позиции): последовательный ц.
def heads_group_cycle_atk3s(self):
if crt.c_board.cycle_var.get() == 'A311': # последовательный цикл
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A311_i0t0()
else:
self.A311_i0t1()
else:
self.A311_i1()
if crt.c_board.cycle_var.get() == 'A3231': # максимальный параллелизм
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A3231_i0t0()
else:
self.A3231_i0t1()
else:
self.A3231_i1()
if crt.c_board.cycle_var.get() == 'A3232': # максимальный параллелизм
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A3232_i0t0()
else:
self.A3232_i0t1()
else:
self.A3232_i1()
if crt.c_board.cycle_var.get() == 'A322': # частичный параллелизм
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A322_i0t0()
else:
self.A322_i0t1()
else:
self.A322_i1()
if crt.c_board.cycle_var.get() == 'A332': # частичный параллелизм
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A332_i0t0()
else:
self.A332_i0t1()
else:
self.A332_i1()
if crt.c_board.cycle_var.get() == 'A342': # частичный параллелизм
if crt.c_board.interruptions_var.get() == 0:
if crt.c_board.t_var.get() == 0:
self.A342_i0t0()
else:
self.A342_i0t1()
else:
self.A342_i1()
class HeadsGroupCycles_atk12(HeadsCycles): # групповые циклы СГ1, СГ2, СГ3
#####################
def A12_2_12(self):
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
thread.start_new(self.Zh, (crt.techsys.head4, ))
thread.start_new(self.Zh, (crt.techsys.head5, ))
thread.start_new(self.Zh, (crt.techsys.head6, ))
thread.start_new(self.Zh, (crt.techsys.head7, ))
thread.start_new(self.Zh, (crt.techsys.head8, ))
thread.start_new(self.Zh, (crt.techsys.head9, ))
thread.start_new(self.Zh, (crt.techsys.head10, ))
thread.start_new(self.Zh, (crt.techsys.head11, ))
thread.start_new(self.Zh, (crt.techsys.head12, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
pass
while not(crt.techsys.head4.yzh and crt.techsys.head5.yzh and crt.techsys.head6.yzh):
pass
while not(crt.techsys.head7.yzh and crt.techsys.head8.yzh and crt.techsys.head9.yzh):
pass
while not(crt.techsys.head10.yzh and crt.techsys.head11.yzh and crt.techsys.head12.yzh):
pass
def A12_2_3x4(self): # простой последовательный цикл
thread.start_new(self.Zh, (crt.techsys.head1, ))
thread.start_new(self.Zh, (crt.techsys.head2, ))
thread.start_new(self.Zh, (crt.techsys.head3, ))
time.sleep(1)
while not(crt.techsys.head1.yzh and crt.techsys.head2.yzh and crt.techsys.head3.yzh):
pass
thread.start_new(self.Zh, (crt.techsys.head4, ))
thread.start_new(self.Zh, (crt.techsys.head5, ))
thread.start_new(self.Zh, (crt.techsys.head6, ))
time.sleep(1)
while not(crt.techsys.head4.yzh and crt.techsys.head5.yzh and crt.techsys.head6.yzh):
pass
thread.start_new(self.Zh, (crt.techsys.head7, ))
thread.start_new(self.Zh, (crt.techsys.head8, ))
thread.start_new(self.Zh, (crt.techsys.head9, ))
time.sleep(1)
while not(crt.techsys.head7.yzh and crt.techsys.head8.yzh and crt.techsys.head9.yzh):
pass
thread.start_new(self.Zh, (crt.techsys.head10, ))
thread.start_new(self.Zh, (crt.techsys.head11, ))
thread.start_new(self.Zh, (crt.techsys.head12, ))
time.sleep(1)
while not(crt.techsys.head10.yzh and crt.techsys.head11.yzh and crt.techsys.head12.yzh):
pass
def heads_group_cycle_atk12(self):
###################
if crt.c_board.cycle_var.get() == 'A12_2_12': # последовательный цикл
self.A12_2_12()
if crt.c_board.cycle_var.get() == 'A12_2_3x4': # последовательный цикл
self.A12_2_3x4()
##################
###
if crt.c_board.cycle_var.get() == 'eA001': # последовательный цикл
expSub.eA001(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA101': # последовательный цикл
expSub.eA101(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA211': # последовательный цикл
expSub.eA211(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA222':
expSub.eA222(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA222_2':
expSub.eA222_2(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA222_3':
expSub.eA222_3(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA232':
expSub.eA232(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA323':
expSub.eA323(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eA342':
expSub.eA342(crt, crt.h_cycles)
###
if crt.c_board.cycle_var.get() == 'eAxx1': # последовательный цикл
expSub.eAxx1(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx2':
expSub.eAxx2(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx3':
expSub.eAxx3(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx4':
expSub.eAxx4(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx5':
expSub.eAxx5(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx6':
expSub.eAxx6(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx7':
expSub.eAxx7(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx8':
expSub.eAxx8(crt, crt.h_cycles)
if crt.c_board.cycle_var.get() == 'eAxx9':
expSub.eAxx9(crt, crt.h_cycles)
#############################
class HeadsGroupCycles(
HeadsGroupCycles_atk0,
HeadsGroupCycles_atk1,
HeadsGroupCycles_atk2,
HeadsGroupCycles_atk3,
HeadsGroupCycles_atk3s,
HeadsGroupCycles_atk12,
):
def heads_group_cycle(self):
if wins.atk0:
self.heads_group_cycle_atk0()
if wins.atk1:
self.heads_group_cycle_atk1()
if wins.atk2:
self.heads_group_cycle_atk2()
if wins.atk3:
self.heads_group_cycle_atk3()
if wins.atk3s:
self.heads_group_cycle_atk3s()
if wins.atk12:
self.heads_group_cycle_atk12()
###############################
class WorkingCycles(HeadsGroupCycles):
# БУЦ-У2: Блок управленя циклами. Уровень 2:
# управление цилами обработки деталей
# (в рабочей позиции)
# создание списка детелей партий обработки деталей
det = Detale( )
def set_new_det(self, iidet): # установка новой детали
self.det.set_det_pos(0) # установка очередной детали в позицию
wins.c1.itemconfig( # смена указателя числа обработанных деталей
self.det.det_text,
text = iidet + 1
)
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
# перемещания детали в заданные позиции (в конвейерном режиме)
def det_move1(self): # перемещение детали в позицию 1
if crt.c_board.t_var.get() == 1:
# print
# print 'начало цикла загрузки детали dc1'
tb_dc1 = time.clock()
# print 'tb_dc1 = ', tb_dc1
self.d_move1 = 0
self.det.det_move(1)
self.d_move1 = 1
if crt.c_board.t_var.get() == 1:
# print 'конец цикла загрузки детали dc1'
te_dc1 = time.clock()
# print 'te_dc1 = ', te_dc1
print
print 'длительность цикла загрузки детали dc1'
ma_dc1 = te_dc1 - tb_dc1
print 'ma_dc1 = ', ma_dc1
def det_move2(self): # перемещение детали в позицию 2
if wins.atk2 or wins.atk3:
wins.c1.lift(crt.techsys.head2.head_tag) # подъем уровня слоя изображения
if wins.atk12:
wins.c1.lift(crt.techsys.head4.head_tag) # подъем уровня слоя изображения
wins.c1.lift(crt.techsys.head5.head_tag) # подъем уровня слоя изображения
wins.c1.lift(crt.techsys.head6.head_tag) # подъем уровня слоя изображения
if crt.c_board.t_var.get() == 1:
# print
# print 'начало цикла разгрузки детали dc2'
tb_dc2 = time.clock()
# print 'tb_dc2 = ', tb_dc2
self.d_move2 = 0
self.det.det_move(2)
self.d_move2 = 1
if crt.c_board.t_var.get() == 1:
# print 'конец цикла разгрузки детали dc2'
te_dc2 = time.clock()
# print 'te_dc2 = ', te_dc2
print
print 'длительность цикла разгрузки детали dc2'
ma_dc2 = te_dc2 - tb_dc2
print 'ma_dc2 = ', ma_dc2
print
def det_moving_off(self): # удаление детали
# удаление (объекта) изображения детали
wins.c1.delete(self.det.det_tag)
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
def operation_i0(self, iidet): # операционный цикл 0: без прерываний
self.set_new_det(iidet) # установка очередной детали
self.det_move1() # перемещение детали в позицию
self.heads_group_cycle() # обработка детали
self.det_move2() # перемещение детали в позицию
# смена указателя числа обработанных деталей
wins.c1.itemconfig(
crt.techsys.det_pos.text24,
text = iidet + 1
)
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
self.det_moving_off() # удаление детали
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
def operation_i1(self, iidet): # операционный цикл 1: с прерываниями
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
time.sleep(Consts.delay)
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.set_new_det(iidet) # установка очередной детали
crt.c_board.wait_var.set(0)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
self.set_new_det(iidet) # установка очередной детали
crt.c_board.wait_var.set(0)
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
# self.det.det_move(1) # перемещение детали в позицию
self.det_move1() # перемещение детали в позицию
crt.c_board.wait_var.set(0)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
self.det.det_move(1) # перемещение детали в позицию
crt.c_board.wait_var.set(0)
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.heads_group_cycle() # обработка детали
crt.c_board.wait_var.set(0)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
self.heads_group_cycle() # обработка детали
crt.c_board.wait_var.set(0)
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.det_move2() # перемещение детали в позицию
wins.c1.update() # перерисовка виджета c1
crt.c_board.wait_var.set(0)
time.sleep(Consts.delay)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
self.det.det_move(2) # перемещение детали в позицию
wins.c1.update() # перерисовка виджета c1
crt.c_board.wait_var.set(0)
time.sleep(Consts.delay)
# смена указателя числа обработанных деталей
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
wins.c1.itemconfig(
crt.techsys.det_pos.text24,
text = iidet + 1
)
crt.c_board.wait_var.set(0)
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
wins.c1.itemconfig(
crt.techsys.det_pos.text24,
text = iidet + 1
)
crt.c_board.wait_var.set(0)
wins.c1.update() # перерисовка виджета c1
time.sleep(Consts.delay)
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
if crt.c_board.wait_cbtn_var.get() == 1:
wins.c1.wait_variable(crt.c_board.wait_var)
self.det_moving_off() # удаление детали
crt.c_board.wait_var.set(0)
else:
if crt.c_board.tech_stop1 or crt.c_board.tech_stop2:
wins.c1.wait_variable(crt.c_board.wait_var)
crt.c_board.tech_stop1 = 0
crt.c_board.tech_stop2 = 0
self.det_moving_off() # удаление детали
crt.c_board.wait_var.set(0)
det_number = - 1
zparty = 0
def party_working_cycle(self): # обработка партии деталей
wins.c1.itemconfig(
crt.techsys.det_pos.text12,
text = u'ОБРАБОТКА'
)
if crt.c_board.t_var.get() == 1:
print
print 'начало цикла обработки партии'
tb_pc = time.clock()
print 'tb_pc = ', tb_pc
print
self.zparty = 1 # индикация обработки партии
# нулевая установка указателя числа обработанных деталей
wins.c1.itemconfig(
crt.techsys.det_pos.text24,
text = 0
)
# блокировка (нормального) выхода из программы (до конца цикла)
for idet in xrange(crt.c_board.party_size.get()):
# wins.c1.itemconfig(
# crt.techsys.det_pos.text12,
# text = u'ОПЕРАЦИЯ'
# )
self.det_number = idet
if crt.c_board.t_var.get() == 1:
# print
# print 'начало цикла обработки детали ', idet + 1
tb_dc = time.clock()
# print 'tb_dc', idet + 1, ' = ', tb_dc
if crt.c_board.interruptions_var.get() == 0:
self.operation_i0(idet)
else:
self.operation_i1(idet)
# print time.clock(), 'конец обработки детали ', idet + 1
# t_det_end = time.time()
# print 'm_det ', idet + 1, ' = ', t_det_end - t_det_begin
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if s:
wins.c1.itemconfig(
crt.techsys.det_pos.text12,
text = u'ПРЕРЫВАНИЕ'
)
break
# time.sleep(Consts.delay)
# s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
# if not s:
# if crt.c_board.wait_cbtn_var.get() == 1:
# wins.c1.wait_variable(crt.c_board.wait_var)
# wins.c1.itemconfig(
# crt.techsys.det_pos.text12,
# text = u'ГОТОВНОСТЬ'
# )
if crt.c_board.t_var.get() == 1:
# print
# print 'конец цикла обработки детали ', idet + 1
te_dc = time.clock()
# print 'te_dc',idet + 1, ' = ', te_dc
print 'длительность цикла обработки детали ', idet + 1
ma_dc = te_dc - tb_dc
print 'ma_dc', idet + 1, ' = ', ma_dc
s = crt.c_board.tech_stop1 or crt.c_board.tech_stop2 or crt.c_board.extr_stop
if not s:
self.zparty = 0
wins.c1.itemconfig(
crt.techsys.det_pos.text12,
text = u'ГОТОВНОСТЬ'
)
if crt.c_board.t_var.get() == 1:
print
print 'конец цикла обработки партии'
te_pc = time.clock()
print 'te_pc = ', te_pc
# print
print 'длительность цикла обработки партии'
ma_pc = te_pc - tb_pc
print 'ma_pc = ', ma_pc
print
print "------------------------------"
#####################################################
# if ContBoard.tech_stop1 == 0:
# if ContBoard.tech_stop2 == 0:
# if ContBoard.extr_stop == 0:
######################################################
# if ContBoard.tech_stop1 == 1: break
# if ContBoard.tech_stop2 == 1: break
# if ContBoard.extr_stop == 1: break
#############################################
##############################################
class ControlBoard0: # панель управления
# виджеты элементов (панели) управления
############
###########
# кнопки управления (на панели управления)
################
# переменные управления обработчиков событий
exit_blocking = 0 # блокировка (нормального) выхода
tech_stop1 = 0 # технологический останов 1
tech_stop2 = 0 # технологический останов 2
extr_stop = 0 # экстренный останов
# дополнительные переменные
##################
def set_frames(self): # разметка панели wins.win2
# кнопки управления автоматизированной технологичекой системой
wins.fr1 = Frame(
wins.win2,
pady = 2,
padx = 2,
bg = "White"
)
wins.fr1.pack(fill = X)
# переключатели режимов и циклов
wins.fr2 = Frame(
wins.win2,
# pady = 2,
padx = 2,
bg = "White",
)
wins.fr2.pack()
# ползунки установки длины инструмента и положения с.головок
wins.fr3 = Frame(
wins.win2,
pady = 2,
padx = 2,
bg = "White",
)
wins.fr3.pack(fill = X)
# def __init__(self):
# self.set_frames()
################
################
class ControlBoard1(ControlBoard0): # панель управления
# обработчики событий на кнопках управления
# запуск
def start(self, event): # запуск цикла обработки
print "-----------------------------"
print
print 'start: С Т А Р Т'
self.wait_var.set(1)
stop = self.extr_stop
xxx = not self.exit_blocking and not stop
if xxx and self.mode_var.get() == 'work_mode':
self.exit_blocking = 1 # блокировка (нормлаьного) выхода
self.set_mode_rbtn.config(state = DISABLED)
if self.wait_cbtn_var.get() == 0:
self.start_btn.config(state = DISABLED)
crt.w_cycles.party_working_cycle()
self.set_mode_rbtn.config(state = NORMAL)
self.exit_blocking = 0 # блокировка (нормлаьного) выхода
stop = self.extr_stop# or self.tech_stop1 or self.tech_stop2
if stop == 0:
self.start_btn.config(state = NORMAL)
def extr_stoppp(self, event): # экстенный останов
print 'extr_stop: ЭКСТРЕННЫЙ ОСТАНОВ'
if self.interruptions_var.get():
self.extr_stop = 1
def tech_stoppp1(self, event): # технологический останов 1
print 'tech_stop1: ТЕХНОЛОГИЧЕСКИЙ ОСТАНОВ 1'
if self.interruptions_var.get():
if wins.atk3s:
self.tech_stop1 = 1
self.start_btn.config(state = NORMAL)
def tech_stoppp2(self, event): # технологический останов 2
print 'tech_stop2: ТЕХНОЛОГИЧЕСКИЙ ОСТАНОВ 2'
if self.interruptions_var.get() == 1:
if wins.atk3s:
self.tech_stop2 = 1
self.start_btn.config(state = NORMAL)
################
# создание кнопок управлени (на панели управления)
def creat_frames_in_fr1(self):
wins.fr100 = Frame(wins.fr1)
wins.fr100.pack(fill = X)
wins.fr10 = Frame(wins.fr100)
wins.fr10.pack()
wins.fr11 = Frame(wins.fr10)
wins.fr11.pack(side = LEFT)
wins.fr12 = Frame(wins.fr10)
wins.fr12.pack(side = LEFT)
wins.fr13 = Frame(wins.fr10)
wins.fr13.pack(side = LEFT)
def creat_working_buttons(self):
# запуск цикла обработки партии деталей
self.label_start = Label(
wins.fr11,
padx = 5,
activebackground = "Red" # для контроля разметки (просветы)
)
self.label_start["text"] = u"Запуск партии деталей в обработку"
self.label_start.pack()
self.start_btn = Button( # кнопка нормального выхода
wins.fr11, # по завершению работы
text = u" С Т А Р Т ",
)
self.start_btn.bind("<Button>", self.start)
self.start_btn.pack()
# остановы работы
self.label_stop = Label(
wins.fr12,
padx = 5
)
self.label_stop["text"] = u"Экстренный останов процесса"
self.label_stop.pack()
self.extr_stop_btn = Button( # кнопка нормального выхода
wins.fr12, # по завершению работы
text = u" С Т О П ",
)
self.extr_stop_btn.bind("<Button>", self.extr_stoppp)
self.extr_stop_btn.pack()
self.label_tech_stop = Label(
wins.fr13,
padx = 5
)
self.label_tech_stop["text"] = u"Технологический останов процесса"
self.label_tech_stop.pack()
# кнопки технологического останова
self.tech_stop1_btn = Button ( # кнопка нормального выхода
wins.fr13, # по завершению работы
text = u" С Т О П 1 ",
)
self.tech_stop1_btn.bind("<Button>", self.tech_stoppp1)
self.tech_stop1_btn.pack(
side = LEFT,
padx = 20,
)
self.tech_stop2_btn = Button( # кнопка нормального выхода
wins.fr13, # по завершению работы
text = u" С Т О П 2 ",
)
self.tech_stop2_btn.bind("<Button>", self.tech_stoppp2)
self.tech_stop2_btn.pack(
side = RIGHT,
padx = 20,
)
# def __init__(self):
# self.creat_frames_in_fr1()
# self.creat_working_buttons()
#######################################
class ControlBoard21(ControlBoard1): # панель управления
def onPress_work_mode_rbtn(self):
print 'mode_var = ', self.mode_var.get()
self.set_work_mode_par()
wins.c1.itemconfig(
crt.techsys.det_pos.text12,
text = u'ГОТОВНОСТЬ'
)
def onPress_set_mode_rbtn(self):
print 'mode_var = ', self.mode_var.get()
self.set_set_mode_par()
wins.c1.itemconfig(
crt.techsys.det_pos.text12,
text = u'НАЛАДКА'
)
def onPress_set_Rmode_rbtn(self):
print 'set_Rmode_var = ', self.set_Rmode_var.get()
def onPress_cycle_rbtn(self):
print 'cycle_var = ', self.cycle_var.get()
def set_interrupt_on_par(self):
self.extr_stop_btn.config(state = NORMAL)
self.tech_stop1_btn.config(state = NORMAL)
self.tech_stop2_btn.config(state = NORMAL)
self.interrupt_wait_cbtn.config(state = NORMAL)
def set_interrupt_off_par(self):
self.extr_stop_btn.config(state = DISABLED)
self.tech_stop1_btn.config(state = DISABLED)
self.tech_stop2_btn.config(state = DISABLED)
self.interrupt_wait_cbtn.config(state = DISABLED)
def onPress_interrupt_cbtn(self):
print 'interruptions_var = ', self.interruptions_var.get()
if self.interruptions_var.get() == 1:
self.set_interrupt_on_par()
if self.interruptions_var.get() == 0:
self.set_interrupt_off_par()
def onPress_interrupt_wait_cbtn(self):
print 'wait_cbtn_var = ', self.wait_cbtn_var.get()
def creat_frames_in_fr2(self):
# print '#####################'
wins.fr21 = Frame(wins.fr2)#, bg = "Red",)
wins.fr21.pack()
wins.fr211 = Frame(wins.fr21)#, bg = "Blue",)
wins.fr211.pack(fill = X)
wins.fr2111 = Frame(wins.fr211) # Рабочий режим
wins.fr2111.pack(side = LEFT)
wins.fr2110 = Frame(wins.fr211, # Наладочный режимы
pady = 2,
padx = 2,
# bg = "White"
)
wins.fr2110.pack(side = RIGHT)
wins.fr2112 = Frame(wins.fr2110, # Наладочный режимы
pady = 2,
padx = 2,
bg = "White"
)
wins.fr2112.pack()
wins.fr212 = Frame(wins.fr21)#, bg = "Blue",) # циклы рабочего режима
wins.fr212.pack(fill = X)
wins.fr214 = Frame(wins.fr21)#, bg = "Blue",) # дополнительные циклы
wins.fr214.pack(fill = X)
wins.fr215 = Frame(wins.fr21)#, bg = "Blue",) # дополнительные циклы
wins.fr215.pack(fill = X)
wins.fr213 = Frame(wins.fr21)#, bg = "Blue", # прерывания и т.п.
wins.fr213.pack(fill = X)
####### режимы
def creat_switchs21(self):
# переключатель рабчего и наладочного режима
self.mode_var = StringVar()
self.mode_var.set('work_mode')
self.work_mode_rbtn = Radiobutton(
wins.fr2111,
text = u'РАБОЧИЙ РЕЖИМ: ',
command = self.onPress_work_mode_rbtn,
variable = self.mode_var,
value = 'work_mode',
)
self.work_mode_rbtn.pack(side = LEFT)
self.set_mode_rbtn = Radiobutton(
wins.fr2112,
text = u'НАЛАДОЧНЫЙ РЕЖИМ: ',
command = self.onPress_set_mode_rbtn,
variable = self.mode_var,
value = 'set_mode',
)
self.set_mode_rbtn.pack(side = LEFT)
# переключатель R-режимов общeго наладочного режима
self.set_Rmode_var = StringVar()
self.set_Rmode_var.set('R3')
self.cycle_rbtnR1 = Radiobutton(
wins.fr2112,
text = u'R1*',
command = self.onPress_set_Rmode_rbtn,
variable = self.set_Rmode_var,
value = 'R1',
)
self.cycle_rbtnR1.pack(side = LEFT)
self.cycle_rbtnR2 = Radiobutton(
wins.fr2112,
text = u'R2*',
command = self.onPress_set_Rmode_rbtn,
variable = self.set_Rmode_var,
value = 'R2',
)
self.cycle_rbtnR2.pack(side = LEFT)
self.cycle_rbtnR3 = Radiobutton(
wins.fr2112,
text = u'R3',
command = self.onPress_set_Rmode_rbtn,
variable = self.set_Rmode_var,
value = 'R3',
)
self.cycle_rbtnR3.pack(side = LEFT)
self.cycle_rbtnR4 = Radiobutton(
wins.fr2112,
text = u'R4',
command = self.onPress_set_Rmode_rbtn,
variable = self.set_Rmode_var,
value = 'R4',
)
self.cycle_rbtnR4.pack(side = LEFT)
# def __init__(self):
# print '#####################'
# self.creat_frames_in_fr2()
# self.creat_switchs21()
Соседние файлы в папке ATK asoi-232 Abdulmenova