Скачиваний:
6
Добавлен:
02.05.2014
Размер:
26 Кб
Скачать
☆
#-*- coding: cp1251 -*-

# ----------------------------------------------------- 
#       Программа parATKvXXX.py
#       Модуль expSub.py
#
#       Модуль учебных (экспериментальных) подпрограмм
#   
#       Данный модуль содержит подпрограммы дополонительных циклов
#   конфигурации АТК12 (двенадцать силовых головок)
#   автоматизированного технологического комлпекса АТК.
#       Модуль предназначен для упрощения экспериментов
#   по многопоточному программированию
#   с групповыми циклами силовых головок в конфигурации АТК12.
#       Для программных экспериментов на основе данного модуля
#   в блок переключателей рабочего режима на пульте управления
#   дополнительно введены
#   второй и третий ряды перецелючателей циклов (радио-кнопки).
#
# ----------------------------------------------------
#       Разработчик программы parATK    Житников А.П.       
#                                       ноябрь 2005г.  
# ----------------------------------------------------- 

import ConfigParser
import tkFileDialog
import thread
import threading
import math, time

import expSub



# -------------------------------------

    #----------------------------------
    #----------------------------------
    #----------------------------------
    # Группа задач Э2: Этап 2: Тренаж: Простые примеры   
    # Первичный тренаж - упаковка в паралльеные потоки отдельных команд   
    # Используется второй ряд переключателей циклов рабочего режима


#       #-----------------------------------------
#       Пример A001: Пустой алгоритм - проходная интерпретация

#       СФА: Структурная формула алгоритма
#   A001 = () = (-) = (->) = (R) = -> = R
#       ССА: Структурная схема алгоритма
#   A211:                    R
#   ---------->    =   ------+---->
#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма    
#   A001 = () = R
#   A001 = R
#               РТА: Рабочий текст алгоритма
#   alg A001(): pass
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма            РТА: Рабочий текст алгоритма

#   A001    A001=   A001=   A001=               alg A001():       
#   =       (       (       | R                     pass
#   (       R       | R
#   R       )       )
#   )

#       ТПР: Текст программной реализации алгоритма

def eA001(ccrt, hCycles):               #   alg A001():
    pass                                # пустой оператор: R = -> 

# Необходимо строго соблюдать стандартные отступы



#       #-----------------------------------------
#       Пример A002: Пустой алгоритм - непроходная интерпретация
#               Для сведения
#       СФА: Структурная формула алгоритма
#   A002 = (|)



#       #-----------------------------------------
#       Пример A101: Единичный алгоритм

#       СФА: Структурная формула алгоритма
#   A101 = (Z2) = Z2
#       ССА: Структурная схема алгоритма
#   A211: Z2 
#   ------+----->
#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма    
#   A001 = (Z2) = Z2
#   A001 = Z2
#               РТА: Рабочий текст алгоритма
#   alg A001(): Zh2()
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма            РТА: Рабочий текст алгоритма

#   A001    A001=   A001=   A001=               alg A001():       
#   =       (       (       | Z2                    Zh2()
#   (       Z2      | Z2
#   Z2    )       )
 #   )

def eA101(ccrt, hCycles):                   #   alg A211():
    hCycles.Zh(ccrt.techsys.head2)          #   Zh2()   - типовой цикл СГ2

# Необходимо строго соблюдать стандартные отступы


       

#       #-----------------------------------------
#       Пример A211: Последовательность двух команд

#       СФА: Структурная формула алгоритма
#   A211 = (Z2-Z4)
#       ССА: Структурная схема алгоритма
#   A211: Z2 Z4
#   ------+--+---->
#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма    
#   A211 = (Z2-Z4) = Z2-Z4
#   A211 = Z2-Z4
#               РТА: Рабочий текст алгоритма
#   alg A211(): Zh2(); Zh4()
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма            РТА: Рабочий текст алгоритма

#   A211    A211=   A211=   A211=   A211=       alg A211():       
#   =       (       (       | Z2-   | Z2            Zh2()
#   (       Z2-     | Z2-   | Z4    | Z4           Zh4()
#   Z2      Z4      | Z4
#   -       )       )
#   Z4
#   )   
#       ТПР: Текст программной реализации алгоритма

def eA211(ccrt, hCycles):               #   alg A211():
    hCycles.Zh(ccrt.techsys.head2)      #   Zh2()       - типовой цикл СГ2 
    hCycles.Zh(ccrt.techsys.head4)      #   Zh4()       - типовой цикл СГ4
# Необходимо строго соблюдать стандартные отступы



#       #-----------------------------------------
#       Пример A222:  Параллельная конъюнкция двух команды (#&).
#       Одна команда (Z6) выносится в поток.

#       СФА: Структурная формула алгоритма
#   A222 = (Z2 & Z4) = (Z2 #& Z4) = #(Z2, Z4)& = #Z2,Z4& 
#       ССА: Структурная схема алгоритма        // Исходная формула
#           Исходная схема
#   A222: #  Z2 &
#   ------+--+--+---->
#         |  Z4 |  
#         +--+--+
#           Модификация схемы

#   A222: FZ4 Z2  J&Z4
#   ------+---+---+---->
#             Z4    
#         |---+---|     команда Z4, упакованная в поток (thread)

#   FZi = F(Zi) = Fork(Zi)      - оператор узла вилки:
#                                 кпаковка в поток и вызов команды Zi в потоке
#   J&Zi = J&(Zi) = Join_&(Zi)  - оператор узла сборки:
#                                 ожижание (wait) завершения команды Zi

#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма    
#   A222 = = #(Z2, Z4)& = # Z2, Z4 & = # Z2 Z4 & = FZ4 Z2 JZ4 = FZ4-Z2-J&Z4
#                                      *    *  *  метки
#               РТА: Рабочий текст алгоритма
#   alg A222(): Fork(Zh4()); Zh2(); Join_&(Zh4())
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма    РТА: Рабочий текст алгоритма

#   A222 =                              alg A222():       
#   | FZ4                                   Fork(Zh4())
#   | Z2                                   Zh2()
#   | J&Z4                                  Join_&(Zh4())

#       ТПР: Текст программной реализации алгоритма

#           Исходный вариант

def eA222d(ccrt, hCycles):                                   # alg A222():
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))    # Fork(Zh4())
    hCycles.Zh(ccrt.techsys.head2)                          # Zh2()
    while not ccrt.techsys.head4.yzh:   # Join(Zh4(): ожидание (head4.yzh = 1)
        pass                            # пустой оператор тела цикла 

def fffff(ccrt, hCycles):
    hCycles.Zh(ccrt.techsys.head4)
    
def eA222(ccrt, hCycles):                                   # alg A222():
    print '1111111111111111111111'
    thread = threading.Thread(target = fffff(ccrt, hCycles))
#    tttttt = hCycles.Zh(ccrt.techsys.head4)
#    thread = threading.Thread(target = tttttt)
#    thread = threading.Thread(target = hCycles.Zh(ccrt.techsys.head4))
#    thread = threading.Thread(target = hCycles.Zh(ccrt.techsys.head4),)
#    thread = threading.Thread(target = hCycles.Zh(ccrt.techsys.head4,))    thread = threading.Thread(target = hCycles.Zh(ccrt.techsys.head3),)
#    thread = threading.Thread(target = hCycles.Zh(ccrt.techsys.head4,),)
#    thread = threading.Thread(None, hCycles.Zh(ccrt.techsys.head4), None, args=(), kwargs =())
    thread.start()    # Fork(Zh4())
    print '2222222222222222222222'
    hCycles.Zh(ccrt.techsys.head2)                          # Zh2()
    thread.join()    # Fork(Zh4())

 #           Модификация 1: Задержка в цикле - разгрузка процессора

def eA222m1(ccrt, hCycles):                                 # alg A2221():
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))    # Fork(Zh4())
    hCycles.Zh(ccrt.techsys.head2)                          # Zh2()
    while not ccrt.techsys.head4.yzh:   # Join(Zh4(): ожидание (head4.yzh = 1)
        time.sleep(0.1)       # задержка для разгрузки процессора

#            Модификация 2: Задержка в цикле и вывод сообщения

def eA222m2(ccrt, hCycles):                                 # alg A2221():
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))    # Fork(Zh4())
    hCycles.Zh(ccrt.techsys.head2)                          # Zh2()
    while not ccrt.techsys.head4.yzh:   # Join(Zh4(): ожидание (head4.yzh = 1)
        time.sleep(0.1)       # задержка для разгрузки процессора
        print 'yzh4 = 0'    # вывод сообщения - работа узла Join


#       #-----------------------------------------
#       Пример A222_2: Параллельная конъюнкция двух команд (#&):
#       обе команды  (Z2, Z4) выносятся в поток.
#       Вспомогательный вариант - для подготовки параллельной дизъюнкции (#V)

#       СФА: Структурная формула алгоритма
#   A222_2 = (Z2 & Z4) = (R &(Z2 & Z4)) = (R #& (Z2 #& Z4)) = #(R, #(Z2, Z4)&)& =
#          = (R & Z2 & Z4) = (R #& Z2 #& Z4) = #(R, Z2, Z4)&
#                       R = ->  - пустой оператор (повторитлеь),
#                                 эквивалентный линии простой связи " -> "
#       ССА: Структурная схема алгоритма
#           Исходная схема
#   A222_2: #  Z2 &        A222_2: #  -> = R   &        A222_2: # (R) & 
#   --------+--+--+----> = --------+-----------+----> = --------+--+--+----> 
#           |  Z4 |                |  #  Z2 &  |                |  Z2 |
#           +--+--+                +--+--+--+--+                +--+--+
#                                     |  Z4 |                   |  Z4 |
#                                     +--+--+                   +--+--+
#       СФА: Структурная формула алгоритма       // Продолжение
#   A222_2 = (Z2 & Z4) = (R & Z2 & Z4) = ((R & Z2) & Z4))=
#          = ((R #& Z2) #& Z4) = #(#(R, Z2)&, Z4)&
#           ССА: Структурная схема алгоритма        // Продолжение
#               Исходная схема
#   A222_2: #  Z2 &        A222_2: #  # (R) &  &        A222_2: #  #     &  &
#   --------+--+--+----> = --------+--+--+--+--+----> = --------+--+-----+--+-->
#           |  Z4 |                |  |  Z2 |  |                |  |  Z2 |  |
#           +--+--+                |  +--+--+  |                |  +--+--+  |
#                                  |     Z4    |                |     Z4   |
#                                  +-----+-----+                +-----+-----+    
#               Модификация схемы
#   A2221:  FZ4 FZ2 (R)   J&Z2 J&Z4        A2221:  FZ4 FZ2    J&Z2 J&Z4 
#   --------+---+----+---+----+------>  =  --------+---+------+----+------>   
#                    Z2          
#               |----+---|          команда Z2, упакованная в поток (thread)       
#                    Z4          
#           |--------+--------|     команда Z4, упакованная в поток (thread)

#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма    
#   A222_2   =   #(#(R, Z2)&, Z4)&   =   # # R, Z2 &, Z4 &   =
#            =   # # R Z2 & Z4 &   =   FZ6 # R Z2 & J&Z4   =      
#                *          *  *           *   *  *
#            =   FZ4 FZ2 R J&Z4 J&Z2

#               РТА: Рабочий текст алгоритма
#   alg A222_2(): Fork(Zh4()); Fork(Zh2()); pass; Join_&(Zh()); Join_&(Zh4())
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма    РТА: Рабочий текст алгоритма

#   A222_1=                              alg A222_1():       
#   | FZ4                                   Fork(Zh4())
#   | FZ2                                   Fork(Zh2(
#   | J&Z2                                  Join_&(Zh2())
#   | J&Z4                                  Join_&(Zh4())

#       ТПР: Текст программной реализации алгоритма

def eA222_2(ccrt, hCycles):
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head2, ))
#    pass       # может стоять пустой оператор: pаss = R (может опускаться)
                # однако появляется неусточивость в работе - необходима задержка
    time.sleep(1)   # задержка R(m) - задержанный повторитель (m = 1 sec)
    while not ccrt.techsys.head2.yzh:   # Join(Zh2(): ожидание (head2.yzh = 1)
#    time.sleep(1)      # (необязательная) задержка для разгрузки процессора
#    print 'yzh2 = 0'   # (необязательный) вывод сообщения - работа узла Join
        pass
    while not ccrt.techsys.head4.yzh:   # Join(Zh4(): ожидание (head4.yzh = 1)
#    time.sleep(1)      # (необязательная) задержка для разгрузки процессора
#    print 'yzh4 = 0'   # (необязательный) вывод сообщения - работа узла Join
        pass



#       #-----------------------------------------
#       Пример A222_3: Параллельная конъюнкция двух команд (#&).
#       Обе команды  выносятся в поток.
#       Модифицируется узел сборки 
#       Вспомогательный вариант - для подготовки параллельной дизъюнкции (#V)

#       СФА: Структурная формула алгоритма       // Продолжение
#   A222_3 = (Z2 & Z4) = (R & Z2 & Z4) = ((R & Z2) & Z4))=
#          = ((R #& Z2) #& Z4) = #(#(R, Z2)&, Z4)&
#           ССА: Структурная схема алгоритма        // Модификация
#   A222_3: #  Z2 &        A222_3: #  #     &  &
#   --------+--+--+----> = --------+--+-----+--+--> =
#           |  Z4 |                |  |  Z2 |  |
#           +--+--+                |  +--+--+  |
#                                  |     Z4    |
#                                  +-----+-----+    
#                       
#                          A222_3: #  #        &
#                        = --------+--+--------+--> =
#                                  |  |        |
#                                  |  |     ----& Дополнительный узел &-сборки
#                                  |  |  Z2 |  |
#                                  |  +--+--+  |
#                                  |     Z4    |
#                                  +-----+-----+    
#       ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
#           ГИ: Горизонтальное исполнение
#               ШТА: Шаблон текста алгоритма        // Модификация    
#   A222_2   =   #(#(R, Z2)&, Z4)&   =   # # R, Z2 &, Z4 &   =
#            =   # # R Z2 & Z4 &   =   FZ4 # R Z2 & J&Z4   =      
#                *          *  *           *   *  *
#   A222_3   =   FZ4 FZ2 R J&Z2 J&Z4   =  FZ4 FZ2 R J&(Z2' & Z4') 
#
#               РТА: Рабочий текст алгоритма
#   alg A222_3(): Fork(Zh4()); Fork(Zh2()); pass; Join_&(Zh()'and (Zh4()')
#           ВИ: Вертикальное исполнение
#       ШТА: Шаблон текста алгоритма    РТА: Рабочий текст алгоритма

#   A222_3=                              alg A222_3():       
#   | FZ4                                   Fork(Zh4())
#   | FZ2                                   Fork(Zh2(
#   | J&(Z2'& Z4')                          Join_&(Zh2()' and (Zh4()')

#       ТПР: Текст программной реализации алгоритма

def eA222_3(ccrt, hCycles):
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head2, ))
#    pass       # может стоять пустой оператор: pаss = R (может опускаться)
                # однако появляется неусточивость в работе - необходима задержка
    time.sleep(1)   # задержка R(m) - задержанный повторитель (m = 1 sec)
    while not(ccrt.techsys.head4.yzh and ccrt.techsys.head2.yzh):
#    time.sleep(1)      # (необязательная) задержка для разгрузки процессора
#    print 'yzh2 = 0'   # (необязательный) вывод сообщения - работа узла Join
        pass



#       #-----------------------------------------
#       Пример A232: Параллельная дизъюнкция двух команд (#&).
#       Обе команды выносятся в поток.
#       Модифицируется узел сборки 

#       СФА: Структурная формула алгоритма
#   A232 = (Z7 V Z6) = (R & (Z7 V Z6)) = (R #& (Z7 #V Z6)) = #(R, #(Z7, Z6)V)& =
#        = (R & Z7 & Z6) = (R #& Z7 #& Z6) = #(R, Z7, Z6)&
#           ССА: Структурная схема алгоритма        // Модификация
#       ССА: Структурная схема алгоритма
#   A232:   #  Z7 V        A232:   #  -> = R   &         
#   --------+--+--+----> = --------+-----------+----> = 
#           |  Z6 |                |  #  Z7 V  |        
#           +--+--+                +--+--+--+--+         
#                                     |  Z6 |            
#                                     +--+--+
#           ССА: Структурная схема алгоритма        // Модификация
#                          A232:   #  #        &
#                        = --------+--+--------+--> =
#                                  |  |        |
#                                  |  |     ----V Дополнительный узел V-сборки
#                                  |  |  Z7 |  |
#                                  |  +--+--+  |
#                                  |     Z6    |
#                                  +-----+-----+    
#
#       ТПР: Текст программной реализации алгоритма

def eA232(ccrt, hCycles):
    thread.start_new(hCycles.Zh, (ccrt.techsys.head5, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))
    hCycles.Zh(ccrt.techsys.head2)                          # Zh7()
    while not(ccrt.techsys.head4.yzh or ccrt.techsys.head2.yzh):
#    time.sleep(1)      # (необязательная) задержка для разгрузки процессора
#    print 'yzh7 = 0'   # (необязательный) вывод сообщения - работа узла Join
        pass
#





#       #-----------------------------------------
#       Пример A323: Параллельная дизъюнкция трех команд (#&).
#       Две команды выносятся в поток.

def eA323(ccrt, hCycles):
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head2, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head5, ))
    time.sleep(1)
    while not ccrt.techsys.head4.yzh:   # Join(Zh6(): ожидание (head6.yzh = 1)
        time.sleep(0.1)       # задержка для разгрузки процессора
    while not ccrt.techsys.head5.yzh:   # Join(Zh5(): ожидание (head5.yzh = 1)
        time.sleep(0.1)       # задержка для разгрузки процессора






#       #-----------------------------------------
#       Пример A343:   Параллельный алгоритм:


def eA342(ccrt, hCycles):
    thread.start_new(hCycles.Zh, (ccrt.techsys.head4, ))
    thread.start_new(hCycles.Zh, (ccrt.techsys.head2, ))
    time.sleep(1)                               # спец. задержка
    while not(ccrt.techsys.head4.yzh or ccrt.techsys.head2.yzh):
        pass
    hCycles.Zh(ccrt.techsys.head5)               # цикл силовой головки
    while not(ccrt.techsys.head4.yzh and ccrt.techsys.head2.yzh):
        pass





    #----------------------------------
    #----------------------------------
    #----------------------------------
    # Группа задач Э3: Этап 3: Работа: Самостоятельные разработки   
    # Применяется упаковка попрограмм в паралльеные потоки   
    # Используется третий ряд переключателей циклов рабочего режима


#       #-----------------------------------------
#       Пример A091:   Опорный пример: Параллельная конъюнкция


#       СФА: Структурная формула алгоритма
#   A091  = (Z1-((Z3-Z1)&((Z5&(Z2-(Z4&Z0)))-(Z6&(Z5-Z2)))))

#       ТПР: Текст программной реализации алгоритма

#           Исходный вариант

def A20(ccrt, hCycles):          # подпрограмма дополнительного потока
    hCycles.za20 = 0                        # Введение индикации окончания A20
    hCycles.Zh(ccrt.techsys.head7)          # СГ10 - типовой цикл
    hCycles.Zh(ccrt.techsys.head5)
    hCycles.za20 = 1                        # Окончание процесса A20

def A21(ccrt, hCycles):          # подпрограмма дополнительного потока
    hCycles.za21 = 0                        # Введение индикации окончания A10
    hCycles.Zh(ccrt.techsys.head8)
    hCycles.za21 = 1                        # Окончание процесса A10

def A11(ccrt, hCycles):
    hCycles.za11 = 0
    hCycles.Zh(ccrt.techsys.head5)
    hCycles.za11 = 1

def A10 (ccrt, hCycles):
    hCycles.za10 = 0
    hCycles.Zh(ccrt.techsys.head2)
    thread.start_new(expSub.A20, (ccrt, hCycles, ))
    hCycles.Zh(ccrt.techsys.head4)
    thread.start_new(expSub.A21, (ccrt, hCycles, ))
    hCycles.Zh(ccrt.techsys.head2)
    while not hCycles.za21:
        time.sleep(1)
    while not hCycles.za20:
        time.sleep(1)
    hCycles.za10 = 1
      
def eAxx1(ccrt, hCycles):       # alg A141()    программа основного потока
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    thread.start_new(expSub.A10, (ccrt, hCycles, ))
    thread.start_new(expSub.A11, (ccrt, hCycles, ))
    hCycles.Zh(ccrt.techsys.head3)          # СГ2 - типовой цикл
    hCycles.Zh(ccrt.techsys.head1)
    while not hCycles.za11:                 # Контроль окончания A10
        time.sleep(1)# задержка в цикле ожидания
    while not hCycles.za10:
        time.sleep(1)
    

#           Модификация 1:

def A20m1(ccrt, hCycles):          # подпрограмма дополнитtльного потока
    print 'begin A20'
    hCycles.za20 = 0
    hCycles.Zh(ccrt.techsys.head5)          # СГ5 - типовой цикл    
    hCycles.Zh(ccrt.techsys.head6)          # СГ6 - типовой цикл    
    hCycles.za20 = 1
    print 'end A20'


def A10m1(ccrt, hCycles):          # подпрограмма дополнитtльного потока
    print 'begin A10'
#    mutex = thread.allocate_lock()  # замок взаимного исключения доступа
    hCycles.za10 = 0
    hCycles.Zh(ccrt.techsys.head3)          # СГ3 - типовой цикл
    thread.start_new(expSub.A20, (ccrt, hCycles, )) # поток СГ1
    hCycles.Zh(ccrt.techsys.head4)          # СГ4 - типовой цикл
    print 'begin while A10'
    while not hCycles.za20:
#        expSub.mutex2.acquire()
        print 'A10  -----------'
#        expSub.mutex2.release()
        time.sleep(1)                               # спец. задержка
        pass
    print 'end while A10'
    hCycles.za10 = 1
    print 'end A10'


def eAxx1m1(ccrt, hCycles):               # A141
    print 'begin eAxx1'
    expSub.mutex = thread.allocate_lock()  # замок взаимного исключения доступа
    thread.start_new(expSub.A10, (ccrt, hCycles, )) # поток СГ1
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    hCycles.Zh(ccrt.techsys.head2)          # СГ2 - типовой цикл
    print 'begin while eAxx1'
    while not hCycles.za10:
        expSub.mutex.acquire()
        print 'eAxx1 &&&&&&&&&&&'
        expSub.mutex.release()
        time.sleep(1)                               # спец. задержка
        pass
    print 'end while eAxx1'
    hCycles.Zh(ccrt.techsys.head3)          # СГ3 - типовой цикл
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    print 'end eAxx3'





#       #-----------------------------------------
#       Пример A142: Опорный пример: Параллельная дизъюнкция

#       СФА: Структурная формула алгоритма
#   A142  =   (((Z1 – Z2) V (Z3 – (Z4 & (Z5 – Z6)))) – Z3 – Z1)

#       ТПР: Текст программной реализации алгоритма


def A30d(ccrt, hCycles):          # подпрограмма дополнитtльного потока
    print 'begin A30'
    hCycles.za30 = 0
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    hCycles.Zh(ccrt.techsys.head2)          # СГ2 - типовой цикл
    hCycles.za30 = 1
    print 'end A30'

def eAxx2(ccrt, hCycles):       # A142
    print 'begin eAxx2'
    expSub.mutex = thread.allocate_lock()  # замок взаимного исключения доступа
    thread.start_new(expSub.A10, (ccrt, hCycles, )) # поток СГ1
    thread.start_new(expSub.A30, (ccrt, hCycles, )) # поток СГ1
    time.sleep(1)                               # спец. задержка
    while not (hCycles.za10 or hCycles.za30):
        expSub.mutex.acquire()
        print 'eAxx1 &&&&&&&&&&&'
        expSub.mutex.release()
        time.sleep(1)                               # спец. задержка
        pass
    hCycles.Zh(ccrt.techsys.head3)          # СГ3 - типовой цикл
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    print 'end eAxx2'





#       #-----------------------------------------

def eAxx3(ccrt, hCycles):
    print 'begin eAxx3'
    print 'end eAxx3'
    pass

def eAxx4(ccrt, hCycles):
    print 'begin eAxx4'
    thread.start_new(expSub.A10, (ccrt, hCycles, )) # поток СГ1
    thread.start_new(expSub.A30, (ccrt, hCycles, )) # поток СГ1
    time.sleep(1)                               # спец. задержка
    while not (hCycles.za10 and hCycles.za30):
        expSub.mutex.acquire()
        print 'eAxx1 &&&&&&&&&&&'
        expSub.mutex.release()
        time.sleep(1)                               # спец. задержка
        pass
    hCycles.Zh(ccrt.techsys.head3)          # СГ3 - типовой цикл
    hCycles.Zh(ccrt.techsys.head1)          # СГ1 - типовой цикл
    print 'end eAxx4'

def eAxx5(ccrt, hCycles):
    print 'begin eAxx5'
    print 'end eAxx5'
    pass

def eAxx6(ccrt, hCycles):
    print 'begin eAxx6'
    print 'end eAxx6'
    pass

def eAxx7(ccrt, hCycles):
    print 'begin eAxx7'
    print 'end eAxx7'
    pass

def eAxx8(ccrt, hCycles):
    print 'begin eAxx8'
    print 'end eAxx8'
    pass

def eAxx9(ccrt, hCycles):
    print 'begin eAxx9'
    print 'end eAxx9'
    pass



Соседние файлы в папке ATK asoi-232 Abdulmenova