TelenkovDmitry hai 1 ano
pai
achega
5ac1b87514

+ 4 - 1
.obsidian/appearance.json

@@ -2,5 +2,8 @@
   "baseFontSize": 17,
   "baseFontSize": 17,
   "accentColor": "",
   "accentColor": "",
   "theme": "obsidian",
   "theme": "obsidian",
-  "cssTheme": "dev"
+  "cssTheme": "dev",
+  "enabledCssSnippets": [
+    "custom"
+  ]
 }
 }

+ 7 - 0
.obsidian/snippets/custom.css

@@ -0,0 +1,7 @@
+h4 {
+    color: yellow;
+}
+h6 {
+    color: mediumseagreen;
+}
+

+ 15 - 37
.obsidian/workspace.json

@@ -6,7 +6,6 @@
       {
       {
         "id": "fc8d1a5e8f5296a1",
         "id": "fc8d1a5e8f5296a1",
         "type": "tabs",
         "type": "tabs",
-        "dimension": 50,
         "children": [
         "children": [
           {
           {
             "id": "ab7f697480d55695",
             "id": "ab7f697480d55695",
@@ -14,32 +13,11 @@
             "state": {
             "state": {
               "type": "markdown",
               "type": "markdown",
               "state": {
               "state": {
-                "file": "Тренировки и занятия.md",
+                "file": "universal IO/universal IO.md",
                 "mode": "source",
                 "mode": "source",
                 "source": false
                 "source": false
               }
               }
-            },
-            "group": "72dcf0ab1c1ba7d0"
-          }
-        ]
-      },
-      {
-        "id": "5fd43fdc9a170d2e",
-        "type": "tabs",
-        "dimension": 50,
-        "children": [
-          {
-            "id": "3ba050d3acf87126",
-            "type": "leaf",
-            "state": {
-              "type": "markdown",
-              "state": {
-                "file": "Тренировки и занятия.md",
-                "mode": "preview",
-                "source": false
-              }
-            },
-            "group": "72dcf0ab1c1ba7d0"
+            }
           }
           }
         ]
         ]
       }
       }
@@ -107,7 +85,7 @@
             "state": {
             "state": {
               "type": "backlink",
               "type": "backlink",
               "state": {
               "state": {
-                "file": "Тренировки и занятия.md",
+                "file": "universal IO/universal IO.md",
                 "collapseAll": false,
                 "collapseAll": false,
                 "extraContext": false,
                 "extraContext": false,
                 "sortOrder": "alphabetical",
                 "sortOrder": "alphabetical",
@@ -139,30 +117,30 @@
   },
   },
   "left-ribbon": {
   "left-ribbon": {
     "hiddenItems": {
     "hiddenItems": {
-      "switcher:Open quick switcher": false,
-      "graph:Open graph view": false,
-      "canvas:Create new canvas": false,
-      "command-palette:Open command palette": false,
-      "markdown-importer:Open format converter": false
+      "switcher:Меню быстрого перехода": false,
+      "graph:Граф": false,
+      "canvas:Создать новый холст": false,
+      "command-palette:Открыть палитру команд": false,
+      "markdown-importer:Импорт Markdown-файлов": false
     }
     }
   },
   },
   "active": "ab7f697480d55695",
   "active": "ab7f697480d55695",
   "lastOpenFiles": [
   "lastOpenFiles": [
-    "Artery testing.md",
-    "TODO.md",
+    "bt67xx/common.md",
+    "Python/common.md",
     "universal IO/universal IO.md",
     "universal IO/universal IO.md",
-    "Database.kdbx.qglrkI",
+    "TODO.md",
+    "proGit.md",
+    "Artery testing.md",
     "universal IO/Test HV.md",
     "universal IO/Test HV.md",
-    "Python/common.md",
-    "Кодинг.md",
     "Тренировки и занятия.md",
     "Тренировки и занятия.md",
+    "Database.kdbx.qglrkI",
+    "Кодинг.md",
     "Счета.md",
     "Счета.md",
     "ROTEK",
     "ROTEK",
-    "proGit.md",
     "Список литературы.md",
     "Список литературы.md",
     "Разное.md",
     "Разное.md",
     "linux/linux common.md",
     "linux/linux common.md",
-    "bt67xx/common.md",
     "Python",
     "Python",
     "docs/MEGA 通讯协议.pdf",
     "docs/MEGA 通讯协议.pdf",
     "linux/Arbiter.md",
     "linux/Arbiter.md",

+ 67 - 5
Python/common.md

@@ -1,8 +1,8 @@
-#### <font color = "MediumSeaGreen">Разное</font>
+<h4>Разное</h4>
 - Python - строго типизированный язык. 
 - Python - строго типизированный язык. 
 - Оператор "is" проверяет значение и тип.
 - Оператор "is" проверяет значение и тип.
 - Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую.
 - Декоратор - это функция, которая принимает одну функцию в качестве аргумента и возвращает другую.
-#### <font color = "MediumSeaGreen">Объекты</font>
+<h4>Объекты</h4>
 - Имя - это ссылка на объект, но не сам объект.
 - Имя - это ссылка на объект, но не сам объект.
 - В случае, когда оба имени указывают на изменяемый объект, его можно изменить с помощью любого имени.
 - В случае, когда оба имени указывают на изменяемый объект, его можно изменить с помощью любого имени.
 **Объект содержит:**
 **Объект содержит:**
@@ -10,7 +10,7 @@
 - id
 - id
 - значение
 - значение
 - счетчик ссылок
 - счетчик ссылок
-#### <font color = "MediumSeaGreen">Типы данных</font>
+<h4>Типы данных</h4>
 **Неизменяемые типы данных:**
 **Неизменяемые типы данных:**
 - int
 - int
 - bool
 - bool
@@ -25,13 +25,74 @@
 - dict
 - dict
 - set
 - set
 - bytearray
 - bytearray
-#### <font color = "MediumSeaGreen">Полезные фичи</font>
+
+<h4>Классы</h4>
+<h6>Методы</h6>
+```python
+__mro__ # возвращает картеж родетельских классов
+```
+<h6>Миксины</h6>
+`Mixin` — это класс, предоставляющий реализации методов для повторного использования дочерними классами. Он представляет ограниченную форму множественного наследования и родительский класс, который просто даёт функциональные возможности подклассам, не содержит состояния и не предназначен для создания экземпляров.
+
+Когда использовать миксины? Они подходят, когда хочется:
+* предоставить множество дополнительных функций для класса
+* использовать определённую функцию во множестве разных классов
+<h6>@property</h6>
+```python
+class C:
+    def __init__(self):
+        self._x = None
+
+    @property
+    def x(self): # В декораторах 'setter' и 'deleter' нужно указывать имя метода-свойства
+        """I'm the 'x' property."""
+        return self._x
+
+    @x.setter
+    def x(self, value):
+        self._x = value
+
+    @x.deleter
+    def x(self):
+        del self._x
+```
+<h6>@classmethod</h6>
+```python
+class A():
+    count = 0
+    
+    def __init__(self):
+        A.count += 1
+
+	def exclaim(self):
+        print('I`m an A!')
+
+    @classmethod
+    def kids(cls):
+        print("A has", cls.count, "little objects.")
+
+def test_classmethod():
+    easy_a = A()
+    breezy_a = A()
+    wheezy_a = A()
+    A.kids()
+```
+<h6>@staticmethod</h6>
+```python
+class CoyoteWeapon():
+    @staticmethod
+    def commercial():
+        print('This CoyoWeapon has been brought to you by Acme')
+
+CoyoteWeapon.commercial()
+```
+<h4>Полезные фичи</h4>
 * Фуyкция divmod возвращает частное и остаток
 * Фуyкция divmod возвращает частное и остаток
 ```python
 ```python
 >>> divmod(9, 5)
 >>> divmod(9, 5)
 (1, 4)
 (1, 4)
 ```
 ```
-#### <font color = "MediumSeaGreen">Строки</font>
+<h4>Строки</h4>
 **Наборы символов:**
 **Наборы символов:**
 ```python
 ```python
 import string 
 import string 
@@ -41,3 +102,4 @@ import string
 >>> string.punctuation
 >>> string.punctuation
 '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
 '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
 ```
 ```
+

+ 2 - 2
TODO.md

@@ -4,8 +4,8 @@
 - [ ] Сделать загрузочную флешку с Win10
 - [ ] Сделать загрузочную флешку с Win10
 - [ ] Работа с книгой "Простой Python"
 - [ ] Работа с книгой "Простой Python"
 - [ ] Стрижка
 - [ ] Стрижка
-- [ ] Купить корм для пауков
-- [ ] Смотреть видео курса
+- [x] Купить корм для пауков
+- [ ] Смотреть видео курса (3 глава)
 
 
 #### <font color = "MediumSeaGreen">Планы по месяцам:</font>
 #### <font color = "MediumSeaGreen">Планы по месяцам:</font>
 **Февраль 2024**
 **Февраль 2024**

+ 31 - 3
universal IO/universal IO.md

@@ -1,4 +1,32 @@
-#### <font color = "MediumSeaGreen">Modbus</font>
-Определение конца пакета.
+<h4>Modbus</h4>
+<h6>Определение конца пакета.</h6>
 - Если скорость передачи данных больше 19200, то нужно использовать фиксированное время 1750 мкс. В противном случае время должно быть в 3,5 больше времени символа.
 - Если скорость передачи данных больше 19200, то нужно использовать фиксированное время 1750 мкс. В противном случае время должно быть в 3,5 больше времени символа.
-- Таймер настраивается на частоту 50 мкс.
+- Таймер настраивается на частоту 50 мкс.
+- В данном проекте управление переключением режима передачи происходит не стороне контроллера. Между включением передатчика и отправкой первого байта пакета необходима задержка. Задержка необходима и между отправкой последнего символа и выключением передатчика. Задержка реализована с помощью аппаратного таймера TIM6. Время задержки соответствует времени передачи двух символов с учетом текущей скорости USART.
+<h6>Функции</h6>
+- **0x01 (1)** - чтение значений из нескольких регистров флагов - Read Coil Status.
+- **0x02 (2)** - чтение значений из нескольких дискретных входов - Read Discrete Inputs.
+- **0x03 (3)** - чтение значений из нескольких регистров хранения - Read Holding Registers.
+- **0x04 (4)** - чтение значений из нескольких регистров ввода - Read Input Registers.
+- **0x05 (5)** - запись значения одного флага - Force Single Coil.
+- **0x06 (6)** - запись значения в один регистр хранения - Preset Single Register.
+- **0x07 (7)** - чтение сигналов состояния - Read Exception Status.
+- **0x08 (8)** - диагностика - Diagnostic.
+- **0x0B (11)** - чтение счетчика событий - Get Com Event Counter.
+- **0x0C (12)** - чтение журнала событий - Get Com Event Log.
+- **0x0F (15)** - запись значений в несколько регистров флагов - Force Multiple Coils.
+- **0x10 (16)** - запись значений в несколько регистров хранения - Preset Multiple Registers.
+- **0x11 (17)** - чтение информации об устройстве - Report Slave ID.
+- **0x14 (20)** - чтение из файла - Read File Record.
+- **0x15 (21)** - запись в файл - Write File Record.
+- **0x16 (22)** - запись в один регистр хранения с использованием маски "И" и маски "ИЛИ" - Mask Write Register.
+- **0x18 (24)** - чтение данных из очереди - Read FIFO Queue.
+- **0x2B (43)** - Encapsulated Interface Transport.
+<h6>Команды и регистры для теста</h6>
+Проверить функции для чтения и записа:
+* (0x03) Read Holding Registers. Чтение N регистров управления и уставок.
+* (0x10) Write Multiple registers Запись N регистров управления и уставок (0x10).
+Адреса тестовых регистров для чтения и записи:
+0x30 - лежит значение 123456789 тип uint32_t (4 байта)
+0x32 - лежит значение 32768 тип uint16_t (2 байта)
+0x34 - лежит значение 1.23456 тип float (4 байта)