Перейти к содержанию

Тестер цифровых реле регуляторов


Рекомендуемые сообщения

Пользую motorherz crt 2.0.
Хорошо успел в своё время купить за 25000р

Сейчас нашёл самый дешёвый https://gmgauto.ru/products/MOTORHERZ/CRT20.html

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 133
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

6 часов назад, OreXov сказал:

Приветствую, я так понял тема затихла пока, ни кто не знает где приобрести готовый девайс ?

TRG - 1100 не рассматривал в качестве готового девайса  ?

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, AzarOF сказал:

TRG - 1100 не рассматривал в качестве готового девайса  ?

Не, не смотрел, С Сергеем созвонился. Попробую купить напрямую.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, OreXov сказал:

Не, не смотрел, С Сергеем созвонился. Попробую купить напрямую.

ЧТо купить ?

3 минуты назад, AzarOF сказал:

ЧТо купить ?

О какой пристаке речь и какая цена ?

Ссылка на комментарий
Поделиться на другие сайты

Только что, OreXov сказал:

ARC-311

ARC-311.jpg

Понял, а каков на неё ценник ?

Ссылка на комментарий
Поделиться на другие сайты

Только что, OreXov сказал:

40

Спасибо, себе тоже ищу , остановился пока  TRG

 

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, OreXov сказал:

на авито  25 трг есть

Поэтому на ней и остановился

Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, CERGEY121 сказал:

тоже такой пользуюсь,чень доволен 

Когда его приобрёл и по какой цене ?

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, AzarOF сказал:

Когда его приобрёл и по какой цене ?

год - полтора назад, точно не помню за 30 брал

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, CERGEY121 сказал:

год - полтора назад, точно не помню за 30 брал

Сегодня цены увы больше (((((

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Привет Евгений Ст, Я дома балуюсь с LIN BUS на ардуинке, пытаюсь понять как оно работает и даже кое чего нарыл, так то оно дело не сложное но нет знаний в програмировании вот пришлось начать с того что леды на ардуинке зажигать. Есть несколько приборов для проверки регуляторов с которых можно снять сигнал а так же CAN LIN хакер

в нём всё чётко видно что шлёт что принимает, только пока нет знаний как это всё сделать.

Здесь подробно об LIN https://www.csselectronics.com/pages/lin-bus-protocol-intro-basics

Здесь канХакер которым пользуюсь https://canhacker.ru/шина-lin/что-такое-шина-lin/

Здесь брал LIN to TTL  https://www.aliexpress.com/item/1005006348310876.html

Есть ещё инфо если надо

Ссылка на комментарий
Поделиться на другие сайты

В 22.02.2024 в 20:56, CERGEY121 сказал:

год - полтора назад, точно не помню за 30 брал

Вижу тему подняли.....всё таки взял TRG-1100

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

Корпус металл. Всё интуитивно понятно, свои функции выполняет.

Уже давно пользуюсь.....продавец всегда на связи, если возникают вопросы, отвечает сразу....

Был один момент с генератором FF3 valeo на LIN , прибор показывал ошибку T , оказалось это перрегрев реле регулятора, просто этого не было в мануале.

Я доволен.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...
В 14.06.2024 в 14:05, chuckha сказал:

Привет Евгений Ст, Я дома балуюсь с LIN BUS на ардуинке, пытаюсь понять как оно работает и даже кое чего нарыл, так то оно дело не сложное но нет знаний в програмировании вот пришлось начать с того что леды на ардуинке зажигать. Есть несколько приборов для проверки регуляторов с которых можно снять сигнал а так же CAN LIN хакер

в нём всё чётко видно что шлёт что принимает, только пока нет знаний как это всё сделать.

Здесь подробно об LIN https://www.csselectronics.com/pages/lin-bus-protocol-intro-basics

Здесь канХакер которым пользуюсь https://canhacker.ru/шина-lin/что-такое-шина-lin/

Здесь брал LIN to TTL  https://www.aliexpress.com/item/1005006348310876.html

Есть ещё инфо если надо

Да, знать бы программирование, можно было много чего реализовать. Я вот тоже пытался выездной инструмент собрать на ардуине, да так и валяется всё по углам.

Ссылка на комментарий
Поделиться на другие сайты

Привет Евгений Ст, здесь все расписано https://github.com/macchina/LIN

тестер регуляторов работает как LIN bomber, шлёт сначало 13 нулей(бит) потом 1(бит) еденицу после чего синхронизирует 010101(0х55 в HEX) потом шлёт заголовок от 0 до 3B тут точнее -  (

ЛИН ПАКЕТ:
 Он состоит из:
 ___________ __________ _______ ____________ _________
 | | | | | |
 |Разрыв синхронизации|Байт синхронизации|Байт идентификатора| Байты данных |Контрольная сумма |
 |___________|__________|_______|____________|_________|

 Каждый байт имеет стартовый и стоповый бит, и первым отправляется младший бит.
 Разрыв синхронизации — 13 бит доминантного состояния («0»), за которыми следует 1 бит рецессивного состояния («1»).
 Synch Byte — байт для синхронизации связанной скорости, всегда 0x55.
 Байт идентификатора — состоит из четности, длины и адреса; четность определяется стандартом LIN и зависит от адреса и длины сообщения.
 Байты данных – определяются пользователем; зависит от устройств на шине LIN
 Контрольная сумма – инвертированная контрольная сумма 256; байты данных суммируются, а затем инвертируются)

 

все регуляторы что у меня есть отвечают на заголовок "92", регулирование на "15" сейчас не помню но могу посмотреть.

Тут описание библиотеки я её сейчас изучаю

/*  Copyright (c) 2016 Macchina
 *
 *  Permission is hereby granted, free of charge, to any person obtaining
 *  a copy of this software and associated documentation files (the
 *  "Software"), to deal in the Software without restriction, including
 *  without limitation the rights to use, copy, modify, merge, publish,
 *  distribute, sublicense, and/or sell copies of the Software, and to
 *  permit persons to whom the Software is furnished to do so, subject to
 *  the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included
 *  in all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 *  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 *  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 *  LIN STACK for TJA1021
 *  v2.0
 *
 *  Short description:
 *  Comunication stack for LIN and TJA1021 LIN transceiver.
 *  Can be modified for any Arduino board with UART available and any LIN slave.
 *  
 *  Author: Blaž Pongrac B.S., RoboSap, Institute of Technology, Ptuj (www.robosap-institut.eu)
 *  
 *  Arduino IDE 1.6.9
 *  RoboSap, Institute of Technology, September 2016
 */

#include <lin_stack.h>

/* LIN PACKET:
   It consist of:
    ___________ __________ _______ ____________ _________
   |           |          |       |            |         |
   |Synch Break|Synch Byte|ID byte| Data Bytes |Checksum |
   |___________|__________|_______|____________|_________|
   
   Every byte have start bit and stop bit and it is send LSB first.
   Synch Break - 13 bits of dominant state ("0"), followed by 1 bit recesive state ("1")
   Synch Byte - Byte for Bound rate syncronization, always 0x55
   ID Byte - consist of parity, length and address; parity is determined by LIN standard and depends from address and message length
   Data Bytes - user defined; depend on devices on LIN bus
   Checksum - inverted 256 checksum; data bytes are sumed up and then inverted
*/

// CONSTRUCTORS
lin_stack::lin_stack(byte Ch){
    sleep_config(Ch); // Configurating Sleep pin for transceiver
    ch = Ch;
}

lin_stack::lin_stack(byte Ch, byte ident){
    sleep_config(Ch); // Configuration of Sleep pin for transceiver
    identByte = ident; // saving idet to private variable
    sleep(1); // Transceiver is always in Normal Mode
}

// PUBLIC METHODS
// WRITE methods
// Creates a LIN packet and then send it via USART(Serial) interface.
int lin_stack::write(byte ident, byte data[], byte data_size){
    // Calculate checksum
    byte suma = 0;
    for(int i=0;i<data_size;i++)
        suma = suma + data[i];
    //suma = suma + 1;
    byte checksum = 255 - suma;
    // Start interface
    sleep(1); // Go to Normal mode
    // Synch Break
    serial_pause(13);
    // Send data via Serial interface
    if(ch==1){ // For LIN1 or Serial1
        Serial1.begin(bound_rate); // config Serial
        Serial1.write(0x55); // write Synch Byte to serial
        Serial1.write(ident); // write Identification Byte to serial
        for(int i=0;i<data_size;i++) Serial1.write(data[i]); // write data to serial
        Serial1.write(checksum); // write Checksum Byte to serial
        Serial1.end(); // clear Serial config
    }else if(ch==2){ // For LIN2 or Serial2
        Serial2.begin(bound_rate); // config Serial
        Serial2.write(0x55); // write Synch Byte to serial
        Serial2.write(ident); // write Identification Byte to serialv
        for(int i=0;i<data_size;i++) Serial2.write(data[i]); // write data to serial
        Serial2.write(checksum);// write Checksum Byte to serial
        Serial2.end(); // clear Serial config
    }
    sleep(0); // Go to Sleep mode
    return 1;
}

int lin_stack::writeRequest(byte ident){
    // Create Header
    byte identByte = (ident&0x3f) | calcIdentParity(ident);
    byte header[2]= {0x55, identByte};
    // Start interface
    sleep(1); // Go to Normal mode
    // Synch Break
    serial_pause(13);
    // Send data via Serial interface
    if(ch==1){ // For LIN1 or Serial1
        Serial1.begin(bound_rate); // config Serial
        Serial1.write(header,2); // write data to serial
        Serial1.end(); // clear Serial config
    }else if(ch==2){ // For LIN2 or Serial2
        Serial2.begin(bound_rate); // config Serial
        Serial2.write(header,2); // write data to serial
        Serial2.end(); // clear Serial config
    }
    sleep(0); // Go to Sleep mode
    return 1;
}

int lin_stack::writeResponse(byte data[], byte data_size){
    // Calculate checksum
    byte suma = 0;
    for(int i=0;i<data_size;i++) suma = suma + data[i];
    //suma = suma + 1;
    byte checksum = 255 - suma;
    // Start interface
    sleep(1); // Go to Normal mode
    // Send data via Serial interface
    if(ch==1){ // For LIN1 or Serial1
        Serial1.begin(bound_rate); // config Serial
        Serial1.write(data, data_size); // write data to serial
        Serial1.write(checksum); // write data to serial
        Serial1.end(); // clear Serial config
    }else if(ch==2){ // For LIN2 or Serial2
        Serial2.begin(bound_rate); // config Serial
        Serial2.write(data, data_size); // write data to serial
        Serial2.write(checksum); // write data to serial
        Serial2.end(); // clear Serial config
    }
    sleep(0); // Go to Sleep mode
    return 1;
}

int lin_stack::writeStream(byte data[], byte data_size){
    // Start interface
    sleep(1); // Go to Normal mode
    // Synch Break
    serial_pause(13);
    // Send data via Serial interface
    if(ch==1){ // For LIN1 or Serial1
        Serial1.begin(bound_rate); // config Serial
        for(int i=0;i<data_size;i++) Serial1.write(data[i]);
        Serial1.end(); // clear Serial config
    }else if(ch==2){ // For LIN2 or Serial2
        Serial2.begin(bound_rate); // config Serial
        for(int i=0;i<data_size;i++) Serial2.write(data[i]);
        Serial2.end(); // clear Serial config
    }
    sleep(0); // Go to Sleep mode
    return 1;
}

// READ methods
// Read LIN traffic and then proces it.
int lin_stack::setSerial(){ // Only needed when receiving signals
    if(ch==1){ // For LIN1 (Channel 1)
        Serial1.begin(bound_rate); // Configure Serial1
        PIOA->PIO_PUER = PIO_PA10; // We need software Pull-Up because there is no hardware Pull-Up resistor
    } else if(ch==2){ // For LIN2 (Channel 2)
        Serial2.begin(bound_rate); // Configure Serial1
        PIOA->PIO_PUER = PIO_PA12; // We need software Pull-Up because there is no hardware Pull-Up resistor
    }
}

int lin_stack::read(byte data[], byte data_size){
    byte rec[data_size+3];
    if(ch==1){ // For LIN1 or Serial1
        if(Serial1.read() != -1){ // Check if there is an event on LIN bus
            Serial1.readBytes(rec,data_size+3);
            if((validateParity(rec[1]))&(validateChecksum(rec,data_size+3))){
                for(int j=0;j<data_size;j++){
                data[j] = rec[j+2];
                }
                return 1;
            }else{
                return -1;
            }    
        }
    }else if(ch==2){ // For LIN2 or Serial2
        if(Serial2.read() != -1){ // Check if there is an event on LIN bus
            Serial2.readBytes(rec,data_size+3);
            if((validateParity(rec[1]))&(validateChecksum(rec,data_size+3))){
                for(int j=0;j<data_size;j++){
                data[j] = rec[j+2];
                }
                return 1;
            }else{
                return -1;
            }    
        }
    }
    return 0;
}

int lin_stack::readStream(byte data[],byte data_size){
    byte rec[data_size];
    if(ch==1){ // For LIN1 or Serial1
        if(Serial1.read() != -1){ // Check if there is an event on LIN bus
            Serial1.readBytes(rec,data_size);
            for(int j=0;j<data_size;j++){
                data[j] = rec[j];
            }
            return 1;
        }
    }else if(ch==2){ // For LIN2 or Serial2
        if(Serial2.read() != -1){ // Check if there is an event on LIN bus
            Serial2.readBytes(data,data_size);
            return 1;
        }
    }
    return 0;
}


// PRIVATE METHODS
int lin_stack::serial_pause(int no_bits){
    // Calculate delay needed for 13 bits, depends on bound rate
    unsigned int del = period*no_bits; // delay for number of bits (no-bits) in microseconds, depends on period
    if(ch==2){
        PIOA->PIO_PER = PIO_PA13; // enable PIO register
        PIOA->PIO_OER = PIO_PA13; // enable PA13 as output
        PIOA->PIO_CODR = PIO_PA13; // clear PA13
        delayMicroseconds(del); // delay
        PIOA->PIO_SODR = PIO_PA13; // set pin high
        PIOA->PIO_ODR = PIO_PA13; // enable PA13 as output
        PIOA->PIO_PDR = PIO_PA13; // clear configuration for PIO, needs to be done because Serial wont work with it
    }else if(ch==1){
        PIOA->PIO_PER = PIO_PA11; // enable PIO register
        PIOA->PIO_OER = PIO_PA11; // enable PA11 as output
        PIOA->PIO_CODR = PIO_PA11; // clear PA11
        delayMicroseconds(del); // delay
        PIOA->PIO_SODR = PIO_PA11; // set pin high
        PIOA->PIO_ODR = PIO_PA11; // enable PA13 as output
        PIOA->PIO_PDR = PIO_PA11; // clear configuration for PIO, needs to be done because Serial wont work with it
    }
    return 1;
}

int lin_stack::sleep(byte sleep_state){
    if(sleep_state==1){ // Go to Normal mode
        if(ch==1) PIOB->PIO_SODR = PIO_PB4; // Set PB4, high state, normal mode
        if(ch==2) PIOB->PIO_SODR = PIO_PB7; // Set PB7, high state, normal mode
    }else if(sleep_state==0){ // Go to Sleep mode
        if(ch==1) PIOB->PIO_CODR = PIO_PB4; // Clear PB4, low state, sleep mode
        if(ch==2) PIOB->PIO_CODR = PIO_PB7; // Clear PB7, low state, sleep mode
    }
    delayMicroseconds(20); // According to TJA1021 datasheet this is needed for proper working
    return 1;
}

int lin_stack::sleep_config(byte serial_No){
    if(serial_No==1){ // When using LIN1 channel - usign Serial1 and pin PB4 for Sleep
        PIOB->PIO_PER = PIO_PB4; // enable PIO register on pin PB4
        PIOB->PIO_OER = PIO_PB4; // set PB4 as output
        PIOB->PIO_PUDR = PIO_PB4; // disable pull-up
        ch=1; // saved as private variable, used for determening Serial port
    }else if(serial_No==2)
    { // When using LIN2 channel - usign Serial2 and pin PB7 for Sleep
        PIOB->PIO_PER = PIO_PB7; // enable PIO register on pin PB7
        PIOB->PIO_OER = PIO_PB7; // set PB7 as output
        PIOB->PIO_PUDR = PIO_PB7; // disable pull-up
        ch=2; // saved as private variable, used for determening Serial port
    }
    return 1;
}

boolean lin_stack::validateParity(byte ident) {
    if(ident == identByte)
        return true;
    else
        return false;
}

boolean lin_stack::validateChecksum(unsigned char data[], byte data_size){
    byte checksum = data[data_size-1];
    byte suma = 0;
    for(int i=2;i<data_size-1;i++)
        suma = suma + data[i];
    byte v_checksum = 255 - suma - 1;
    if(checksum==v_checksum)
        return true;
    else
        return false;
}

int lin_stack::busWakeUp()
{
  unsigned int del = period*10; // random delay for dominant signal, has to be in the timeframe from 250us ... 5ms
  if(ch==2)
  {
    PIOA->PIO_PER = PIO_PA13; // enable PIO register
    PIOA->PIO_OER = PIO_PA13; // enable PA13 as output
    PIOA->PIO_CODR = PIO_PA13; // clear PA13
    delayMicroseconds(del); // delay
    PIOA->PIO_SODR = PIO_PA13; // set pin high
    PIOA->PIO_PDR = PIO_PA13; // clear configuration for PIO, needs to be done because Serial wont work with it
  }
  else if(ch==1)
  {
    PIOA->PIO_PER = PIO_PA11; // enable PIO register
    PIOA->PIO_OER = PIO_PA11; // enable PA11 as output
    PIOA->PIO_CODR = PIO_PA11; // clear PA11
    delayMicroseconds(del); // delay
    PIOA->PIO_SODR = PIO_PA11; // set pin high
    PIOA->PIO_PDR = PIO_PA11; // clear configuration for PIO, needs to be done because Serial wont work with it
  }
  return 1;
}

/* Create the Lin ID parity */
#define BIT(data,shift) ((ident&(1<<shift))>>shift)
byte lin_stack::calcIdentParity(byte ident)
{
  byte p0 = BIT(ident,0) ^ BIT(ident,1) ^ BIT(ident,2) ^ BIT(ident,4);
  byte p1 = ~(BIT(ident,1) ^ BIT(ident,3) ^ BIT(ident,4) ^ BIT(ident,5));
  return (p0 | (p1<<1))<<6;
}

Ссылка на комментарий
Поделиться на другие сайты

В 12.06.2024 в 19:17, Евгений Ст сказал:

Проект умер? Жаль..

Он не был жизнеспособен изначально. Этим невозможно заниматься в перерывах основной работы. Побаловаться можно, не более. Это конечно же приведет к каким-то пониманиям, к результату же может привести только полное погружение в тему. Это не укладка бетона на дорогу - где закончил, там и продолжил далее. Здесь требуется постоянное хождение по уже проложенному пути для прокладки и отладки следующей части алгоритма.  

В 01.07.2024 в 11:39, chuckha сказал:

здесь все расписано https://github.com/macchina/LIN

 

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

А еще надо это устройство защитить от всяких неприятностей: замыканий, переполюсовок и т.п. И не забыть как-то отбразить полученную информацию.

Обычно на копипасте кодов из известных библиотек все и заканчивается).

Ссылка на комментарий
Поделиться на другие сайты

23 часа назад, autonica сказал:

Он не был жизнеспособен изначально. Этим невозможно заниматься в перерывах основной работы. Побаловаться можно, не более. Это конечно же приведет к каким-то пониманиям, к результату же может привести только полное погружение в тему. Это не укладка бетона на дорогу - где закончил, там и продолжил далее. Здесь требуется постоянное хождение по уже проложенному пути для прокладки и отладки следующей части алгоритма.  

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

А еще надо это устройство защитить от всяких неприятностей: замыканий, переполюсовок и т.п. И не забыть как-то отбразить полученную информацию.

Обычно на копипасте кодов из известных библиотек все и заканчивается).

По поводу жизнеспособности, топик стартер я так думаю реализовал свою идею в жизнь и счастлив(может рубит бабло уже :)). На счёт "бетона"  для меня это возможность изучения программирования, имея цель намного интереснее это делать чем просто писать "HELLO WORLD". Если я порчу настроение производителям приборов то извините совесть моя чиста так как для работы я купил аж 3 устройства(от разных пр.) и сделал бы это снова, объём работы позволяет это , предпочитаю готовый продукт для работы. Ищу единомышленников в этом вопросе тем более это не корабли в космос запускать.

 

LINregAnaliz3.jpg

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Похоже второе пришествие халявы с балтийского берега побурлило и скрылось в дюнах). 

Вопрос к неравнодушным: как вы смотрите на то, чтобы в приборах устройство управления и отображения было отдельно от тела прибора, т.е. управление с телефона, планшета, компа?

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, autonica сказал:

Похоже второе пришествие халявы с балтийского берега побурлило и скрылось в дюнах). 

Конечно глупо отвечать на хамство но ваше ЭГО не лопнет случайно от удовольствия, крепитесь. По поводу халявы, предлагалось заинтересованным людям создать народный прибор но так как таких не нашлось то приходится сидеть тихо за дюнами в своё так сказать удовольствие бурлить

 

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
  • Создать...