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

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

27.08.2021, 19:18. Показов 11293. Ответов 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 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
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 / 541 / 127
Регистрация: 09.01.2018
Сообщений: 1,758
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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru