У кого какой любимый язык программирования?

Тема в разделе "Флудилка", создана пользователем Pain123, 8 дек 2017.

  1. Посмотреть можно?
     
  2. null

    null Гик

    Пока нет, сейчас получил крупный заказ, скоро будет полный сайт. А так готов на 17%
     
  3. Удачи!!! :) А что, php и mysql не используете?
     
  4. null

    null Гик

    Да там такой сайт, что ни PHP, ни mysql не нужны. Там сайт про Мебельные туры в Китай, надо рассказать как это классно и убедить позвонить и договориться. Обычная лендинг-страница
     
    БАРМАТОГРАФ нравится это.
  5. Igor68

    Igor68 Гуру

    вот соединение с портом в линуксе (настройка и т.п.)
    Код (C++):
    int MRTU_Connect(char* strPort, int baud, int stout)
    {
        //struct termios tio;
        int i, table_size= 23;
        //===== speed tables ======
        int speed_table1[]={ 0, 50, 75, 110, 134, 150, 200, 300,
                     600, 1200, 1800, 2400, 4800, 9600,
                     19200, 38400, 57600, 115200, 230400,
                     460800, 500000, 576000, 921600};
        int speed_table2[]={ B0, B50, B75, B110, B134, B150, B200, B300,
                     B600, B1200, B1800, B2400, B4800, B9600,
                     B19200, B38400, B57600, B115200, B230400,
                     B460800, B500000, B576000, B921600};
        //=========================
        for( i= 1; i< table_size; i++)    ///< i start from 1, bellow 50 will be set to B0
            if( speed_table1[ i] >= baud)
                break;
        //fd = open(strPort, O_RDWR | O_NOCTTY | O_NDELAY);
        fd = open(strPort, O_RDWR);
        //
        if (fd == -1) {
                perror(strPort);
                return -1;
            }
        //
        if (tcgetattr(fd, &serial) < 0) {
                perror("Getting configuration");
                return -1;
            }
        //serial= fd;
        bzero( &serial, sizeof(serial));        ///< clear struct for new port settings
        // Set up Serial Configuration
            serial.c_iflag = 0;
            serial.c_oflag = 0;
            serial.c_lflag = 0;
            serial.c_cflag = 0;
            serial.c_cc[VMIN] = 0;
            serial.c_cc[VTIME] = 1;
            //serial.c_cflag = B9600| CS8 | CREAD;
        serial.c_cflag = speed_table2[ i] | CS8 | CREAD;
         tcflush( fd, TCIFLUSH);
        cfsetispeed( &serial, speed_table2[ i]);
        cfsetospeed( &serial, speed_table2[ i]);
            tcsetattr(fd, TCSANOW, &serial); // Apply configuration
        tcflush(fd, TCIOFLUSH);
        tcsetattr(fd, TCSANOW, &serial); // Apply configuration
        //
        wait_tx_rx = stout;
        //
        return 0;
    }
     
    Вот по этому порту передаём команду 6 Modbus RTU
    Код (C++):
    //команда 6 - запись в один регистр
    int MRTU_CMD_6(u_int8_t Dev, u_int16_t Addr, u_int16_t Reg)
    {
        u_int16_t        crc;
        u_int16_t        incrc;
        int         wcount;
        int         rcount;
        //
        txbuf[0]    = Dev;    //адрес
        txbuf[1]    = 6;    //команда
        txbuf[2]    = (u_int8_t)((Addr & 0xFF00) >> 8);
        txbuf[3]    = (u_int8_t)(Addr & 0xFF);
        txbuf[4]    = (u_int8_t)((Reg & 0xFF00) >> 8);
        txbuf[5]    = (u_int8_t)(Reg & 0xFF);
        //
        crc         = MRTU_CRC(&txbuf[0], 6);
        txbuf[6]    = (u_int8_t)((crc >> 8) & 0xFF);
        txbuf[7]    = (u_int8_t)(crc & 0xFF);
        //
        tcflush(fd, TCIOFLUSH);
        wcount = write(fd, &txbuf[0], 8);
            if (wcount < 8) {
            #if(_mdbg == 1)
                    printf("send CMD6 error! ...dev: %i  addr: %i\n", Dev, Addr);
            #endif
                return _tx_err;
            }
        //tcflush(fd, TCIOFLUSH);
        usleep(wait_tx_rx);
        memset(&rxbuf[0], 0, _szbuf);
        rcount = read(fd, &rxbuf[0], _szbuf);
            if (rcount < 1)
        {
            #if(_mdbg == 1)
                    printf("receive ansver CMD6 error! ...dev: %i  addr: %i\n", Dev, Addr);
            #endif
                return _rx_err;
        }
        crc        = MRTU_CRC(&rxbuf[0], rcount - 2);
        incrc         = (u_int16_t)((u_int8_t)(rxbuf[rcount - 2])) << 8;
        incrc         |= (u_int16_t)((u_int8_t)(rxbuf[rcount - 1]));
        if (crc != incrc)
        {
            #if(_mdbg == 1)
                    printf("receive ansver CMD6 CRC error! ...dev: %i  addr: %i  rcount: %i  CRC: %04X  INCRC: %04X\n",
                Dev, Addr, rcount, crc, incrc);
            #endif
                return _rx_crc_err;
        }
        if(txbuf[1] != (rxbuf[1] & 0x7F))
        {
            #if(_mdbg == 1)
                    printf("receive ansver CMD6 no main CMD! ...dev: %i  addr: %i sendCMD: %02X recvCMD: %02X\n",
                    Dev, Addr, txbuf[1], (rxbuf[1] & 0x7F));
                MRTU_TestRxTx(&txbuf[0], 8, &rxbuf[0], rcount);
            #endif
            return _rx_cmd_err;
        }
        //rcount = read(fd, &rxbuf[0], _szbuf);
        usleep(wait_tx_rx);
        //
        return _no_err;
    }
     
    Видите... ну прям как работа с файлом.
    У меня было устройство /dev/ttyUSB0 - это и было строчное его название при открытии. А дальше как по маслу.
     
    БАРМАТОГРАФ нравится это.
  6. Спасибо. Ну пока для меня это сложновато. Но есть к чему стремиться :)
     
  7. Igor68

    Igor68 Гуру

    Да что тут сложного? Вам всего навсего убрать лишнее. И делов-то.
     
  8. Ну посижу, вникну... :)
     
  9. DIYMan

    DIYMan Guest

    Несложно, примеров кучу в сети ;)