Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3

Определение изменения бит в байте

27.08.2021, 19:18. Показов 11399. Ответов 128

Студворк — интернет-сервис помощи студентам
Всем ку!
Возник вопрос по оптимальному методу определения изменившихся бит в байте.
Два байта прилетают по сети и имеют следующий вид:

Суть в следующем (на примере байта Е8):
0-й, 3-й и 6-й биты "работы", говорят о включенном или выключенном состоянии участка. 1-й, 2-й, 4-й, 5-й, ... биты - определения сторон (L/R) соотв. участков. Они всегда находятся в одном из двух состояний: 01 либо 10. Состояний 00 или 11 не бывает.
Так вот, в идеале, требуется определить момент смены состояний, допустим с 01 на 10, при установленном бите "работы".
Если бит "работы" не установлен, то изменения состояний бит сторон пофигу.
Пока я делаю это так (без учета бита "работы"):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if ( _byte != _oldByte )
            {
                int _change = _byte ^ _oldByte;
 
                for ( int i = 7; i > -1; i-- )
                {
                    if ( ( _change >> i & 1 ) == 1 ) 
                    { 
                        lstSndIndex.Add( i ); //здесь запись в лист индекса изменившихся бит для последующей отправки в сеть
                    }
                }
 
                _oldByte = _byte;   
            }
т.е. я сравниваю текущее состояние с некоторым прошлым значением.
Можно ли как-то сделать иначе?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2021, 19:18
Ответы с готовыми решениями:

Поменять порядок бит в байте
Есть некий байт, необходимо порядок его первых 3х бит поменять на обратный! Подскажите Добавлено через 6 минут По сути надо 0 и 2...

Обмен двух бит в байте местами
Например, требуется обменять местами 2-й и 3-й бит в байте, если один из них == 1. Можно сделать это так: int _byte = 9; //...

В байте не восемь бит.
Мне знакомый показал статейку следующего вида: Внимание! Путаница в терминологии. Читать всем! zaff » 14 авг 2009, 18:09 ...

128
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 12:04  [ТС]
Студворк — интернет-сервис помощи студентам
Теперь, необходимо скопировать состояния сторон в целевой контроллер, но передать только те стороны, участки которых активны.
Сейчас я поразбираюсь немного с передачей байтом. Если не выйдет, то вернемся к битам и циклам...

Добавлено через 25 минут
Upd:
Цитата Сообщение от wizard41 Посмотреть сообщение
но передать только те стороны, участки которых активны
В случае передачи байтом - это не подойдет, т.к. мы затрем остальные биты на целевом устройстве. Поэтому нужно будет передавать новый байт со всеми предыдущими битами.

Upd2:
Чтобы не забыть:Ранее я сказал, что состояний 00 и 11 быть не может. Однако такие случаи могут возникнуть при некоторых неисправностях на стороне линий.
В будущем, наверное, стоит обнаруживать такие состояния с целью аварийных сообщений диспетчеру. Но это потом.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 12:33  [ТС]
Ну как я и предположил вчера, при передаче байта я ошибся в индексе начала записи в порт: начинал записывать с 0-го адреса, а надо было с 8.
Добавлено в код:
C#
1
2
3
//Запись по выходам...
err = _client.WriteArea( S7Consts.S7AreaPA, 8, 8, 2, S7Consts.S7WLByte, buffer );
Console.WriteLine( "Write to Out: " + _client.ErrorText( err ) );

В устройстве:

Здесь я просто скопировал входа на выхода, без всяких условий. Теперь правая панель в точности повторяет левую.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 12:36  [ТС]
На самом деле, выходов всего 10, и туда должны попадать только стороны участков.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 14:36  [ТС]
Поехал и купил второй монитор, ибо с одним совсем печально переключаться между окнами. С двумя веселее будет наблюдать за происходящим:

Но вернемся к сути вопроса.
Несмотря на то, что я могу считывать из контроллера слово (Word) целиком, функция все равно кладет это в байтовый массив:
C#
1
2
3
4
//Чтение состояний входов:
byte[] buffer = new byte[ 2 ];
//err = _client.ReadArea( S7Consts.S7AreaPE, 8, 8, 2, S7Consts.S7WLByte, buffer );
err = _client.ReadArea( S7Consts.S7AreaPE, 8, 8, 1, S7Consts.S7WLWord, buffer );

поэтому, как ни крути, но на начальном этапе обработки все равно приходится работать с байтами.
Следующая задача - сформировать два байта для отправки, в которых будут находится биты задействованных сторон.
Продолжение следует...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 14:46  [ТС]
То есть, текущее входящее 00101001_00010010 должно преобразоваться в 00000000_00000000, т.к. все линии выключены.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
30.08.2021, 14:57
Цитата Сообщение от wizard41 Посмотреть сообщение
В случае передачи байтом - это не подойдет, т.к. мы затрем остальные биты на целевом устройстве.
Если у нас есть текущее состояние выходов, то нет проблем с его учётом.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    // Последнее переданное состояние
    int oldInput = 0b_001_001_001_001_001;
 
    // Принятые биты
    int received = 0b_001_001_001_001_001;
 
    // Буферный массив для передачи
    byte[] bytes = new byte[2];
 
    //Маска активных узлов
    int activeMask = 0b_001_001_001_001_001;
 
    //Получаем активные узлы
    int active = received & activeMask;
 
    // Маска отслеживаемых бит.
    int listen = active << 1 | active << 2;
 
    // Маска изменившихся бит
    int changed = received ^ oldInput;
 
    // Маска изменившихся отслеживаемых бит
    int changedListen = changed & listen;
 
    // Новое состояние изменившихся отслеживаемых бит
    int newBits = received & changedListen;
 
    if (newBits != 0)
    {
        // Запоминание состояния отслеживаемых бит
        oldInput &= ~changedListen; // Сброс ранее сохранённого состояния бит.
        oldInput |= newBits; // Запись на их место новых состояний.
 
        bytes[0] = (byte)(oldInput & 255);
        bytes[1] = (byte)((oldInput >> 8) & 255);
 
        SendBit(....., bytes);
    }
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:04  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если у нас есть текущее состояние выходов, то нет проблем с его учётом.
Верно, но для этого нужно их предварительно считать. Пока такого у меня не реализовано.
В прочем, это была вторая часть вопроса, мы ее рассмотрим чуть позже.
Элд Хасп, какой-то из ваших предыдущих примеров я слегка переработал для собирания бит из двух байт в один. Но по спешке его затер.

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
C#
1
SendBit(....., bytes);
Да, и сейчас мы уже можем передавать байтами. Я разобрался в чем был косяк.

Добавлено через 1 минуту
Т.е. мы собираем байты целиком на стороне ПК и отправляем в сеть 2 штуки.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
30.08.2021, 15:15
wizard41, там же формат выходных бит иной.
Надо немного изменить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Последнее переданное состояние
private int oldReceived = 0b_001_001_001_001_001;
 
    // Принятые биты
    int received = 0b_001_001_001_001_001;
 
    // Буферный массив для передачи
    byte[] bytes = new byte[2];
 
    //Маска активных узлов
    int activeMask = 0b_001_001_001_001_001;
 
    //Получаем активные узлы
    int active = received & activeMask;
 
    // Маска отслеживаемых бит.
    int listen = active << 1 | active << 2;
 
    // Маска изменившихся бит
    int changed = received ^ oldReceived;
 
    // Маска изменившихся отслеживаемых бит
    int changedListen = changed & listen;
 
    // Новое состояние изменившихся отслеживаемых бит
    int newBits = received & changedListen;
 
    if (newBits != 0)
    {
        // Запоминание состояния отслеживаемых бит
        oldReceived &= ~changedListen; // Сброс ранее сохранённого состояния бит.
        oldReceived |= newBits; // Запись на их место новых состояний.
 
        // Переформатирование бит
        int input = oldReceived;
        int zip = 0;
        int mask = 0b_11;
        for (int i = 0; i < 5; i++)
        {
            input >>= 1;
            zip |= (input & mask);
            mask <<= 2;
        }
 
 
 
        bytes[0] = (byte)(zip & 255);
        bytes[1] = (byte)((zip >> 8) & 255);
 
        SendBit(....., bytes);
    }
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:17  [ТС]
Целевой порт (выходы) выглядят так:

Обратите внимание, что тут занят весь 8-й порт + два бита 9-го. Хоть 9-й порт пустой (ничем не занят), все же технически не совсем правильно переписывать его оставшиеся 6 бит нулевыми значениями, в то время как они могут выполнять иные технологические функции, согласно той же программе внутри контроллера. Поэтому, предварительное чтение состояния этого порта все же выглядит правильной реализацией. Это и была вторая часть вопроса.
Еще нюанс: почему следует пересылать именно новые состояния - потому что там вдалеке, работающие могут сбросить определенные выхода кнопкой на местных постах. Мы же об этом как-бы не знаем, и если мы снова отправим свой байт с предыдущим состоянием, то сброшенные вручную выхода снова включаться, хотя этого не нужно.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:22  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Надо немного изменить:
Обдумываю...

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
C#
1
2
// Последнее переданное состояние
private int oldReceived = 0b_001_001_001_001_001;
т.е. все таки сцепляем два байта в int?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
30.08.2021, 15:24
В более законченном виде:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// Последнее переданное состояние
private static int oldReceived = 0b_001_001_001_001_001;
// Буферный массив для передачи
private static readonly byte[] bytes = new byte[2];
public static void bits(int received)
{
    lock (bytes)
    {
        // Принятые биты
        //int received = 0b_001_001_001_001_001;
 
        //Маска активных узлов
        int activeMask = 0b_001_001_001_001_001;
 
        //Получаем активные узлы
        int active = received & activeMask;
 
        // Маска отслеживаемых бит.
        int listen = active << 1 | active << 2;
 
        // Маска изменившихся бит
        int changed = received ^ oldReceived;
 
        // Маска изменившихся отслеживаемых бит
        int changedListen = changed & listen;
 
        // Новое состояние изменившихся отслеживаемых бит
        int newBits = received & changedListen;
 
        if (newBits != 0)
        {
            // Запоминание состояния отслеживаемых бит
            oldReceived &= ~changedListen; // Сброс ранее сохранённого состояния бит.
            oldReceived |= newBits; // Запись на их место новых состояний.
 
            // Переформатирование бит
            int input = oldReceived;
            int zip = 0;
            int mask = 0b_11;
            for (int i = 0; i < 5; i++)
            {
                input >>= 1;
                zip |= (input & mask);
                mask <<= 2;
            }
 
 
 
            bytes[0] = (byte)(zip & 255);
            bytes[1] = (byte)((zip >> 8) & 255);
 
            SendBit(....., bytes);
        }
    }
}
Добавлено через 2 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
два байта в int?
Да.
Для ushort битовая арифметика не переопределена.
Придётся делать постоянное приведение типов.

Применяем int, но реально используем из него только два младших байта.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:29  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Применяем int, но реально используем из него только два младших байта.
Я понял. Перекладываю в проект, посмотрим что выйдет...
0
1534 / 542 / 127
Регистрация: 09.01.2018
Сообщений: 1,763
30.08.2021, 15:40
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если у нас есть текущее состояние выходов, то нет проблем с его учётом.
Эта маска не будет работать. Например, такие значения:

010 - last
011 - current

Ваш метод в результате даст 0.
Биты не изменились, но участок включился. Я писал об этом уже.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:46  [ТС]
Что могу сказать - вроде бы работает


Сначала я включил 1-ю линию, затем 3-ю. Изменения сторон пока не пробовал.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:47  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
Эта маска не будет работать. Например, такие значения:
010 - last
011 - current
Ваш метод в результате даст 0.
Биты не изменились, но участок включился. Я писал об этом уже.
Так... По подробнее...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:49  [ТС]
Вот я успешно переключился на 1R

0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 15:52  [ТС]
Теперь выключил 1-ю линию:


Все четко... Или я что-то упускаю?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 16:00  [ТС]
Полный код текущего проекта:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
    class Program
    {
        static S7Client _client = new();
 
        static void Main( string[] args )
        {
            int err = _client.ConnectTo( "127.0.0.1", 0, 1 );
            if ( err == 0 )
                Console.WriteLine( "PLC connect success." );
            else
                Console.WriteLine( "PLC connect fault!" );
 
            while ( true )
            {
                Console.Write( "Press ENTER for Received and Send..." );
                Console.Read();
 
                //Чтение состояний входов:
                byte[] buffer = new byte[ 2 ];
                err = _client.ReadArea( S7Consts.S7AreaPE, 8, 8, 2, S7Consts.S7WLByte, buffer );
 
                if ( err == 0 )
                {
                    Console.WriteLine( "Read success: {0}_{1}", 
                        new string ( '0', 8 - Convert.ToString( buffer[ 1 ], 2 ) .Length ) + Convert.ToString( buffer[ 1 ], 2 ), 
                        new string( '0', 8 - Convert.ToString( buffer[ 0 ], 2 ).Length ) + Convert.ToString( buffer[ 0 ], 2 ) );
                }
                else
                    Console.WriteLine( "Read inputs fault: " + _client.ErrorText( err ) );
 
                //Массив бит E8 + E9
                //BitArray bitArr = new BitArray( buffer );
 
                //Сцепка двух байт:
                int Received = ( ( buffer[ 1 ] << 8 ) | buffer[ 0 ] );
                Console.WriteLine( Convert.ToString( Received, 2 ));
 
                // Последнее переданное состояние
                int oldReceived = 0b_001_001_001_001_001;
                // Буферный массив для передачи
                byte[] SndBytes = new byte[ 2 ];
 
 
                //Обработка...
                bits( Received );
 
 
                void bits( int received )
                {
                    lock ( SndBytes )
                    {
                        // Принятые биты
                        //int received = 0b_001_001_001_001_001;
 
                        //Маска активных узлов
                        int activeMask = 0b_001_001_001_001_001;
 
                        //Получаем активные узлы
                        int active = received & activeMask;
 
                        // Маска отслеживаемых бит.
                        int listen = active << 1 | active << 2;
 
                        // Маска изменившихся бит
                        int changed = received ^ oldReceived;
 
                        // Маска изменившихся отслеживаемых бит
                        int changedListen = changed & listen;
 
                        // Новое состояние изменившихся отслеживаемых бит
                        int newBits = received & changedListen;
 
                        if ( newBits != 0 )
                        {
                            // Запоминание состояния отслеживаемых бит
                            oldReceived &= ~changedListen; // Сброс ранее сохранённого состояния бит.
                            oldReceived |= newBits; // Запись на их место новых состояний.
 
                            // Переформатирование бит
                            int input = oldReceived;
                            int zip = 0;
                            int mask = 0b_11;
                            for ( int i = 0; i < 5; i++ )
                            {
                                input >>= 1;
                                zip |= ( input & mask );
                                mask <<= 2;
                            }
 
                            SndBytes[ 0 ] = ( byte ) ( zip & 255 );
                            SndBytes[ 1 ] = ( byte ) ( ( zip >> 8 ) & 255 );
 
                            //Запись по выходам...
                            err = _client.WriteArea( S7Consts.S7AreaPA, 8, 8, 2, S7Consts.S7WLByte, SndBytes );
                            Console.WriteLine( "Write to Out: " + _client.ErrorText( err ) );
                        }
                    }
                }
                               
 
 
                Console.WriteLine();
                Console.Read();
            }
 
            
        }
    }


Добавлено через 6 минут
escoult, мы сейчас работаем с байтами, не перебирая их бит. Может быть вы немного упустили текущий ход проекта?
0
1534 / 542 / 127
Регистрация: 09.01.2018
Сообщений: 1,763
30.08.2021, 16:06
Цитата Сообщение от wizard41 Посмотреть сообщение
Так... По подробнее...
Куда еще подробнее

010 - last
011 - current

001 - activeMask
001 - active (3 & 1 = 1)

110 - listen
001 - changed (3 ^ 2 = 1)

000 - changedListen (6 & 1 = 0)
000 - newBits (3 & 0 = 0)

Писал я уже об этом на прошлой странице. Маска не видит, что бит изменился (это логично, он не менялся). НО включился участок и теперь биты нужно отправить, не смотря на то что изменений в них не было.

Добавлено через 4 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
мы сейчас работаем с байтами, не перебирая их бит. Может быть вы немного упустили текущий ход проекта?
Я ничего не упустил. Перебирайте или не перебирайте, маска не работает. Какая разница, каким образом вы формируете неверное значение байта? Впрочем, дело это ваше.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
30.08.2021, 16:06  [ТС]
Цитата Сообщение от escoult Посмотреть сообщение
НО включился участок и теперь биты нужно отправить, не смотря на то что изменений в них не было.
Ну почему?
Исходное состояние - картинки из предыдущего моего поста, когда 1-я линия выключена.
Включаем:


Нужный байт (1R) отправился в сеть и включил свой выход...
Пока не пойму что не так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2021, 16:06

Изменить рандомный бит в байте
Доброго времени суток. Подскажите пожалуйста, как сменить рендомный бит в считанном из файла байте? На другом языке обычно строка - это...

Порядок байт в слове и бит в байте
читал эту требуются пояснения. A B C D - адреса в них число 128 BE A B C D ...

Написать функцию, меняющую порядок бит в байте
написать функцию, меняющую порядок бит в байте. заранее спасибо

последовательность инструкций для обнуления трех старших бит регистра DH, без изменения остальных бит
Напишите последовательность инструкций для обнуления трех старших бит регистра DH, без изменения остальных бит; результат сохраните в...

Есть ли функция которая может определить сколько бит в байте?
Нужно получить количество бит из байта, может есть готовые функции возвращающие результат?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru