INSTALLING PYTHON (LATEST) AND VSCODE ON WINDOWS 10

2023/01/28

Howto:

  1. Go to the official Python homepage and Download latest version for your operating system:

  2. Run the installer, install for all users into C:\Program Files\Python311 (default)

  3. On the next screen: Require Administrative Privileges

  4. On the next screen: Install for all users

  5. Installing now (after Security Alert):

  6. Agree with disabling path length limit:

  7. Now run Windows Powershell as administrator

  8. Make sure that Python is in your Path:

  9. If Python is not in your path, search "env" in settings, go to environment variables and add two rows to system path:

    Press OK, and add 2 new items

  10. Now install Microsoft Visual Studio Code:

  11. Agree with the license and default installation options and press Next (you may prefer to have a Desktop Icon for the VSCode):

  12. Add Microsoft "Python plugin"

  13. We would also need following plugins for our future lessons (everything else was added automatically as dependencies, so do not remove them)

  14. Now check the installation:

  15. Open this file with VSCode:

  16. You should have this:

  17. To use freshly installed stuff for your further development make sure "autocomplete" is up and running:

All Done.

 ~

Примеры использования


В беспамятстве любые логические выражения можно записать с помощью операций с одним или двумя аргументами, и построить на их основе эквивалентные лестничные схемы, где на шпале всегда только один или два контакта.

Для устройств с памятью, вероятно потребуется одна тринарная операция. На эту мысль наводит то, что практически все императивные языки программирования имеют в своем составе такую конструкцию:

# logical expression a is true then y = xa otherwise y = b
#
# Pythonic style
y = xa if a else xb
# C style
y = a ? xa : xb
   

 ~

Немного теории: Отличия лестничной диаграммы от релейной схемы:


10 заповедей (10 commandments)

  1. Вся схема представляет из себя лестницу из двух рельсов (левая "горячая", под постоянным напряжением, правая заземлена, 0) и неограниченного количества шпал между ними, на которых расположены три вида элементов:

    1. обмотка реле (coil --( )--)
    2. нормально открытый контакт (NO, --] [--)
    3. нормально закрытый контакт (NC, --]/[--)
  2. На каждой шпале обязательно есть одна и только одна обмотка реле, одним полюсом соединенная с холодной рельсой.

  3. Можно потребовать, чтобы на шпале было не более 3х контактов.

  4. Обмотка реле связана с группой контактов через имя. Часто принятые обозначения: Qn -- выходная обмотка, где n натуральное число. Qn.m -- контакт номер m, управляемый обмоткой n.

  5. Все контакты объединены в контактные группы (одна группа управляется одним источником (пальцем или обмоткой реле)

  6. Контакты управляемые внешним воздействием обычно обозначаются буквой i (i3.5 пятый контакт в третьей группе)

  7. Реле у которых ни один контакт не связан с выходом, называются флажками и обозначаются буквой M.

  8. Протягивать провода со шпалы на шпалу запрещается

  9. ПЛК (программируемый логический контроллер), читает лестничную диаграмму слева направо, сверху вниз (как "свиток", где шпалы это строки, лестница -- свиток). После того, как схема прочитана, контроллер возвращается к началу диаграммы. Время, требуемое для прочтения лестницы должно быть меньше либо равно времени одного такта "главного цикла микроконтроллера".

  10. Перед входом в главный цикл контроллер занимается настройкой элементов схемы (setup, begin). Выход из главного цикла приводит к выполнению фазы завершения (end), и означает аварийную ситуацию ("смерть" процесса управления)

 ~

Схемы на Python (симулятор WallySalami/TKGPIO)


ПРИМЕР 1: Моментальная кнопка и кнопка с фиксацией

from tkgpio import TkCircuit

# JSON island:

configuration = {
    "width": 230,
    "height": 200,
    "leds": [
        {"x": 50, "y": 40, "name": "MOMENTARY", "pin": 21},
        {"x": 150, "y": 40, "name": "FIXED", "pin": 22},
    ],
    "buttons": [
        {"x": 50, "y": 130, "name": "momentary", "pin": 10},
        {"x": 150, "y": 130, "name": "fixed", "pin": 11},
    ]
}

# Python island

circuit = TkCircuit(configuration)
@circuit.run
def main ():
    
    from gpiozero import LED, Button
    from time import sleep
    
    ledM = LED(21); ledF = LED(22);
    buttonM = Button(10); buttonF = Button(11);

    buttonM.when_pressed = buttonM.when_released = \
        lambda : ledM.on() if buttonM.value else ledM.off()
    buttonF.when_pressed = lambda : ledF.toggle()
    
    while True:
        sleep(0.1)