数据采集 订阅
数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。 展开全文
数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采集非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。
信息
别    称
数据获取
英    译
Data acquisition
简    称
DAQ
数据范围
电力系统
释    义
利用一种装置,从系统外部采集数据并输入到系统内部的一个接口
中文名
数据采集
采集方式
传感器和计算机
数据采集简介
数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛应用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。采集一般是采样方式,即隔一定时间(称采样周期)对同一点数据重复采集。采集的数据大多是瞬时值,也可是某段时间内的一个特征值。准确的数据测量是数据采集的基础。数据量测方法有接触式和非接触式,检测元件多种多样。不论哪种方法和元件,均以不影响被测对象状态和测量环境为前提,以保证数据的正确性。数据采集含义很广,包括对面状连续物理量的采集。在计算机辅助制图、测图、设计中,对图形或图像数字化过程也可称为数据采集,此时被采集的是几何量(或包括物理量,如灰度)数据。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生了重要的变化。首先,分布式控制应用场合中的智能数据采集系统在国内外已经取得了长足的发展。其次,总线兼容型数据采集插件的数量不断增大,与个人计算机兼容的数据采集系统的数量也在增加。国内外各种数据采集机先后问世,将数据采集带入了一个全新的时代。
收起全文
精华内容
参与话题
问答
  • 基于spark的数据采集平台

    万次阅读 2020-06-10 09:59:55
    数据采集平台管理端 https://github.com/zhaoyachao/zdh_web 数据采集平台服务 https://github.com/zhaoyachao/zdh_server 平台介绍 数据采集,处理,监控,调度,管理一体化平台具体介绍请看github连接中的readme ...

    数据采集平台管理端

    https://github.com/zhaoyachao/zdh_web

    数据采集平台服务

    https://github.com/zhaoyachao/zdh_server

    web端在线查看

    http://zycblog.cn:8081/login
    用户名:zyc
    密码:123456

    界面只是为了参考功能,底层的数据采集服务 需要自己下载zdh_server 部署,服务器资源有限,请手下留情

    如果觉得项目不错记得分享给同伴和点star!!!

     

    平台介绍

    数据采集,处理,监控,调度,管理一体化平台具体介绍请看github连接中的readme 文档

    # 数据采集,处理,监控,调度,管理一体化平台
    
    # 提示
       
        zdh 分2部分,前端配置+后端数据ETL处理,此部分只包含前端配置
        后端数据etl 请参见项目 https://github.com/zhaoyachao/zdh_server.git
        zdh_web 和zdh_server 保持同步 大版本会同步兼容 如果zdh_web 选择版本1.0 ,zdh_server 使用1.x 都可兼容
    
    # 特色
        开箱即用
        支持多数据源
        高性能数据采集
        单独的调度器,调度也可和三方调度器对接airflow,azkaban
        二次开发
        
       
    # 使用场景
      + 数据采集(本地上传数据,hdfs,jdbc,http,cassandra,mongodb,redis,kafka,hbase,es,sftp,hive)
      + 数据加密
      + 数据转换,数据离线同步,实时数据同步
      + 质量检测
      + 元数据,指标管理
      + drools灵活动态的数据清洗
      
      
      
    # 主要功能
     zdh 主要的作用 是从hdfs,hive,jdbc,http-json接口 等数据源拉取数据,并转存到hdfs,hive,jdbc等其他数据源
     支持集群式部署
     
     
      + 支持sql标准函数
      + 支持界面选择配置
      + 支持快速复制已有任务
      + 支持外部调度工具(需要修改,新增特定接口)
      + 弹性扩展(可单机,可集群)
      + 支持客户级权限
      + 简单易用支持二次开发
      + 自带简单调度工具,可配置定时任务,时间序列任务,设定次数
      + 调度依赖
      + SQL数据仓库数据处理(单一数仓)
      + 质量检测,及对应报告
      + 支持SHELL 命令,SHELL 脚本,JDBC查询调度,HDFS查询调度
      + 支持本地上传,下载文件
      + 支持多源ETL
      + 任务监控
      + 灵活动态drools规则清理
      
    # 功能图
    ![功能图](img/zdh_web.jpg)  
      
    # 版本更新说明
      + v1.0 支持常用数据jdbc,hive,kafka,http,flume,redis,es,kudu,mongodb,hbase,cassandra,hdfs(csv,json,orc,parquet,xml,excel...),本地上传数据(csv)
      + v1.0 调度支持任务依赖等
     
      + v1.1 支持clickhouse-jdbc
      
      + v1.2 支持外部jar etl任务(任务状态需要外部jar 自己跟踪)
      
      + v1.3 支持drools 数据清理
      
      
    # FAQ
        shell 脚本格式
        
        window:
        @echo off
        ping -c 4 www.baidu.com1
        :throw
        if %ERRORLEVEL% EQU 1 exit 1 goto end //此处捕获不可少,异常 输出exit 1
        :end
        echo "success"
        exit 0 //此处不可少 正常输出 exit 0
        
        linux
        ping -c 4 www.baidu.com1
        if [ $? -eq 0 ];then
        exit 0
        else
        exit 1
        fi
     
     # 支持的数据源
       + 本地文件
       + hive(单集群使用多个远程hive,以及内外部表)
       + hdfs(csv,txt,json,orc,parquet,avro)
       + jdbc (所有的jdbc,包含特殊jdbc如hbase-phoenix,spark-jdbc,click-house)
       + hbase
       + mongodb
       + es
       + kafka
       + http
       + sftp
       + cassandra
       + redis
       + flume
    
    # 支持的调度对象
       + shell 命令
       + 数据库查询
       + 特色开发jar
       
    # 支持的调度器模式
       + 时间序列(时间限制,次数限制)
       + 单次执行
       + 重复执行(次数限制,时间限制)
       
    # 支持调度动态日期参数   
       详见说明文档
     
    # 用到的技术体系
    
        前端:Bootstrap
        后端:Springboot+shiro+redis+mybatis
        数据ETL引擎:Spark(hadoop,hive 可选择部署)
        
    # 下载修改基础配置
    
        打开resources/application-dev.properties
         1 修改服务器端口默认8081
         2 修改数据源连接(默认支持mysql8),外部数据库必须引入
         3 修改redis配置
    
        创建需要的数据库配置
         1 执行sql脚本db.sql
         
        依赖
         1 必须提前安装redis 
    
    # 下载编译好的包
    
        1 找到项目目录下的release 目录 直接将release 目录拷贝
        2 到relase的bin 目录下执行start 脚本(启动脚本必须到bin 目录下执行)
        3 执行编译好的包需要提前安装mysql8,redis
    
    # 源码自定义打包
        
        清理命令 mvn clean
        打包命令 mvn package -Dmaven.test.skip=true
    
    # 运行
        在target 目录下找到zdh.jar
        执行 java  -Dfile.encoding=utf-8 -jar zdh.jar

     

     

    展开全文
  • 数据采集

    千次阅读 2019-01-26 20:43:09
    我们知道,做数据分析,数据是第一位,所以首先我们应该拥有自己的数据,如果我们自身没有足够的数据,那就需要做大量的数据采集,现在用python做数据采集也就是我们常说到的爬虫是最广泛的,基本上可以会经历三个...

    我们知道,做数据分析,数据是第一位,所以首先我们应该拥有自己的数据,如果我们自身没有足够的数据,那就需要做大量的数据采集,现在用python做数据采集也就是我们常说到的爬虫是最广泛的,基本上可以会经历三个过程:
    1. 使用request库爬取网页内容,这个时候网页已经拉到我们本地了。
    2. 使用XPath解析内容。XPath是XML+Path的缩写,也就是XML路径语言。它是一种用来确定XML文档中某部分位置的语言,在开发中经常用来当作小型查询语言。XPath可以通过元素和属性进行位置索引。
    3. 使用Pandas保存数据。Pandas是让数据分析工作变得更加简单的高级数据结构,我们可以用Pandas保存爬取的数据。最后通过Pandas再写入到XLS或者MySQL等数据库中。

    具体的使用python做爬虫的实现可以自行上网搜一下,网上有大量资料关于这方面的介绍。
    或者可以看下我的github上面的几个例子:
    https://github.com/xiaoyuan199/Baike_Scrapy

    另外我们也可以不编程就抓取到网页信息,这里介绍三款爬虫工具:
    火车采集器
    八爪鱼
    集搜客
    一些比较简单的任务都可以通过这种软件进行抓取,因为不需要编程,所以入门比较简单,可以作为一种辅助工具。

    展开全文
  • 激光雷达学习笔记(一)数据采集

    万次阅读 多人点赞 2013-02-20 23:13:33
    激光雷达或者叫激光测距仪数据采集比较简单,有位好心的网友提供了一篇博客专门讲这个,这里就不再赘述,贴出链接,需要的直接去看原文,激光雷达的型号:UTM-30LX。 激光雷达数据采集 当前网上关于激光雷达的资料...

    激光雷达或者叫激光测距仪数据采集比较简单,有位好心的网友提供了一篇博客专门讲这个,这里就不再赘述,贴出链接,需要的直接去看原文,激光雷达的型号:UTM-30LX。

    激光雷达数据采集

    当前网上关于激光雷达的资料比较少,毕竟用的人不是很多。开发环境主流的还是C/C++,官方提供的例程也都是C/C++的。

    官网资料:http://www.hokuyo-aut.jp/02sensor/07scanner/download/urg_programs_en/  上面包括激光雷达的驱动和采集软件都有提供,需要的话只需要按照上面的步骤去做就可以。

    虽然激光雷达的型号不同,采集部分的代码不同,但是数据处理部分的方法确实相同的,在接下来的日子里我会逐渐共享我使用激光雷达数据所用到的算法和代码,共同学习,共同进步。

          现在的开发语言是C/C++,控制台程序,为了便于快速实现以及进行图形的显示,使用了OpenCV2.4的代码。当然也有人用Labview或者Matlab开发激光雷达,不同的方法之间各有利弊,同时也看个人的喜好。Labview界面部分很简单快捷,编程效率也很高,但是感觉算法的实现稍微麻烦些;Matlab编程效率高,常用函数齐全。Matlab和Labview开发激光雷达一个共同的问题是程序的可移植性。我更加希望我的程序可以移植到嵌入式平台上,不管是Linux环境或者裸机环境。

    激光雷达数据采集程序:(UTM-30LX)

      

    /*!
      \file
      \brief Sample to get URG data using Win32
    
      \author Satofumi KAMIMURA
    
      $Id: capture_sample.cpp 1724 2010-02-25 10:43:11Z satofumi $
    
      Compling and execute process
      - In case of Visual Studio
      - Select capture_sample.sln from capture_sample.zip
      - When Visual Studio is started, press F5 to build and execute.
      - If COM port is not found, then change the com_port in main function.
    
      - In case of MinGW, Cygwin
      - % g++ capture_sample.cpp -o capture_sample
      - % ./capture_sample
      - If COM port is not found, then change the com_port in main function.
    
      \attention Change com_port, com_baudrate values in main() with relevant values.
      \attention We are not responsible for any loss or damage occur by using this program
      \attention We appreciate the suggestions and bug reports
    */
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <windows.h>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <string>
    
    using namespace std;
    
    
    // To record the output of SCIP,define RAW_OUTPUT
    //#define RAW_OUTPUT
    
    #if defined(RAW_OUTPUT)
    static FILE* Raw_fd_ = NULL;
    #endif
    
    
    enum {
      Timeout = 1000,               // [msec]
      EachTimeout = 2,              // [msec]
      LineLength = 64 + 3 + 1 + 1 + 1 + 16,
    };
    
    static HANDLE HCom = INVALID_HANDLE_VALUE;
    static int ReadableSize = 0;
    static char* ErrorMessage = "no error.";
    
    
    /*!
      \brief Manage sensor information
    */
    typedef struct
    {
      enum {
        MODL = 0,                   //!< Sensor model information
        DMIN,                       //!< Minimum measurable distance [mm]
        DMAX,                       //!< Maximum measurable distance [mm]
        ARES,                       //!< Angle of resolution
        AMIN,                       //!< Minimum measurable area
        AMAX,                       //!< Maximum measurable area
        AFRT,                       //!< Front direction value
        SCAN,                       //!< Standard angular velocity
      };
      string model;                 //!< Obtained MODL information
      long distance_min;            //!< Obtained DMIN information
      long distance_max;            //!< Obtained DMAX information
      int area_total;               //!< Obtained ARES information
      int area_min;                 //!< Obtained AMIN information
      int area_max;                 //!< Obtained AMAX information
      int area_front;               //!< Obtained AFRT information
      int scan_rpm;                 //!< Obtained SCAN information
    
      int first;                    //!< Starting position of measurement
      int last;                     //!< End position of measurement
      int max_size;                 //!< Maximum size of data
      long last_timestamp;          //!< Time stamp when latest data is obtained
    } urg_state_t;
    
    
    // Delay
    static void delay(int msec)
    {
      Sleep(msec);
    }
    
    
    static int com_changeBaudrate(long baudrate)
    {
      DCB dcb;
    
      GetCommState(HCom, &dcb);
      dcb.BaudRate = baudrate;
      dcb.ByteSize = 8;
      dcb.Parity = NOPARITY;
      dcb.fParity = FALSE;
      dcb.StopBits = ONESTOPBIT;
      SetCommState(HCom, &dcb);
    
      return 0;
    }
    
    
    // Serial transceiver
    static int com_connect(const char* device, long baudrate)
    {
    #if defined(RAW_OUTPUT)
      Raw_fd_ = fopen("raw_output.txt", "w");
    #endif
    
      char adjust_device[16];
      _snprintf(adjust_device, 16, "\\\\.\\%s", device);
      HCom = CreateFileA(adjust_device, GENERIC_READ | GENERIC_WRITE, 0,
                         NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
      if (HCom == INVALID_HANDLE_VALUE) {
        return -1;
      }
    
      // Baud rate setting
      return com_changeBaudrate(baudrate);
    }
    
    
    static void com_disconnect(void)
    {
      if (HCom != INVALID_HANDLE_VALUE) {
        CloseHandle(HCom);
        HCom = INVALID_HANDLE_VALUE;
      }
    }
    
    
    static int com_send(const char* data, int size)
    {
      DWORD n;
      WriteFile(HCom, data, size, &n, NULL);
      return n;
    }
    
    
    static int com_recv(char* data, int max_size, int timeout)
    {
      if (max_size <= 0) {
        return 0;
      }
    
      if (ReadableSize < max_size) {
        DWORD dwErrors;
        COMSTAT ComStat;
        ClearCommError(HCom, &dwErrors, &ComStat);
        ReadableSize = ComStat.cbInQue;
      }
    
      if (max_size > ReadableSize) {
        COMMTIMEOUTS pcto;
        int each_timeout = 2;
    
        if (timeout == 0) {
          max_size = ReadableSize;
    
        } else {
          if (timeout < 0) {
            /* If timeout is 0, this function wait data infinity */
            timeout = 0;
            each_timeout = 0;
          }
    
          /* set timeout */
          GetCommTimeouts(HCom, &pcto);
          pcto.ReadIntervalTimeout = timeout;
          pcto.ReadTotalTimeoutMultiplier = each_timeout;
          pcto.ReadTotalTimeoutConstant = timeout;
          SetCommTimeouts(HCom, &pcto);
        }
      }
    
      DWORD n;
      ReadFile(HCom, data, (DWORD)max_size, &n, NULL);
    #if defined(RAW_OUTPUT)
      if (Raw_fd_) {
        for (int i = 0; i < n; ++i) {
          fprintf(Raw_fd_, "%c", data[i]);
        }
        fflush(Raw_fd_);
      }
    #endif
      if (n > 0) {
        ReadableSize -= n;
      }
    
      return n;
    }
    
    
    // The command is transmitted to URG
    static int urg_sendTag(const char* tag)
    {
      char send_message[LineLength];
      _snprintf(send_message, LineLength, "%s\n", tag);
      int send_size = (int)strlen(send_message);
      com_send(send_message, send_size);
    
      return send_size;
    }
    
    
    // Read one line data from URG
    static int urg_readLine(char *buffer)
    {
      int i;
      for (i = 0; i < LineLength -1; ++i) {
        char recv_ch;
        int n = com_recv(&recv_ch, 1, Timeout);
        if (n <= 0) {
          if (i == 0) {
            return -1;              // timeout
          }
          break;
        }
        if ((recv_ch == '\r') || (recv_ch == '\n')) {
          break;
        }
        buffer[i] = recv_ch;
      }
      buffer[i] = '\0';
    
      return i;
    }
    
    
    // Trasmit command to URG and wait for response
    static int urg_sendMessage(const char* command, int timeout, int* recv_n)
    {
      int send_size = urg_sendTag(command);
      int recv_size = send_size + 2 + 1 + 2;
      char buffer[LineLength];
    
      int n = com_recv(buffer, recv_size, timeout);
      *recv_n = n;
    
      if (n < recv_size) {
        // if received data size is incorrect
        return -1;
      }
    
      if (strncmp(buffer, command, send_size -1)) {
        // If there is mismatch in command
        return -1;
      }
    
      // !!! check checksum here
    
      // Convert the response string into hexadecimal number and return that value
      char reply_str[3] = "00";
      reply_str[0] = buffer[send_size];
      reply_str[1] = buffer[send_size + 1];
      return strtol(reply_str, NULL, 16);
    }
    
    
    // Change baudrate
    static int urg_changeBaudrate(long baudrate)
    {
      char buffer[] = "SSxxxxxx\r";
      _snprintf(buffer, 10, "SS%06d\r", baudrate);
      int dummy = 0;
      int ret = urg_sendMessage(buffer, Timeout, &dummy);
    
      if ((ret == 0) || (ret == 3) || (ret == 4)) {
        return 0;
      } else {
        return -1;
      }
    }
    
    
    // Read out URG parameter
    static int urg_getParameters(urg_state_t* state)
    {
      // Read parameter
      urg_sendTag("PP");
      char buffer[LineLength];
      int line_index = 0;
      enum {
        TagReply = 0,
        DataReply,
        Other,
      };
      int line_length;
      for (; (line_length = urg_readLine(buffer)) > 0; ++line_index) {
    
        if (line_index == Other + urg_state_t::MODL) {
          buffer[line_length - 2] = '\0';
          state->model = &buffer[5];
    
        } else if (line_index == Other + urg_state_t::DMIN) {
          state->distance_min = atoi(&buffer[5]);
    
        } else if (line_index == Other + urg_state_t::DMAX) {
          state->distance_max = atoi(&buffer[5]);
    
        } else if (line_index == Other + urg_state_t::ARES) {
          state->area_total = atoi(&buffer[5]);
    
        } else if (line_index == Other + urg_state_t::AMIN) {
          state->area_min = atoi(&buffer[5]);
          state->first = state->area_min;
    
        } else if (line_index == Other + urg_state_t::AMAX) {
          state->area_max = atoi(&buffer[5]);
          state->last = state->area_max;
    
        } else if (line_index == Other + urg_state_t::AFRT) {
          state->area_front = atoi(&buffer[5]);
    
        } else if (line_index == Other + urg_state_t::SCAN) {
          state->scan_rpm = atoi(&buffer[5]);
        }
      }
    
      if (line_index <= Other + urg_state_t::SCAN) {
        return -1;
      }
      // Calculate the data size
      state->max_size = state->area_max +1;
    
      return 0;
    }
    
    
    /*!
      \brief Connection to URG
    
      \param state [o] Sensor information
      \param port [i] Device
      \param baudrate [i] Baudrate [bps]
    
      \retval 0 Success
      \retval < 0 Error
    */
    static int urg_connect(urg_state_t* state,
                           const char* port, const long baudrate)
    {
      static char message_buffer[LineLength];
    
      if (com_connect(port, baudrate) < 0) {
        _snprintf(message_buffer, LineLength,
                  "Cannot connect COM device: %s", port);
        ErrorMessage = message_buffer;
        return -1;
      }
    
      const long try_baudrate[] = { 19200, 115200, 38400 };
      size_t n = sizeof(try_baudrate) / sizeof(try_baudrate[0]);
      for (size_t i = 0; i < n; ++i) {
    
        // Search for the communicate able baud rate by trying different baud rate
        if (com_changeBaudrate(try_baudrate[i])) {
          ErrorMessage = "change baudrate fail.";
          return -1;
        }
    
        // Change to SCIP2.0 mode
        int recv_n = 0;
        urg_sendMessage("SCIP2.0", Timeout, &recv_n);
        if (recv_n <= 0) {
          // If there is difference in baud rate value,then there will be no
          // response. So if there is no response, try the next baud rate.
          continue;
        }
    
        // If specified baudrate is different, then change the baudrate
        if (try_baudrate[i] != baudrate) {
          urg_changeBaudrate(baudrate);
    
          // Wait for SS command applied.
          delay(100);
    
          com_changeBaudrate(baudrate);
        }
    
        // Get parameter
        if (urg_getParameters(state) < 0) {
          ErrorMessage =
            "PP command fail.\n"
            "This COM device may be not URG, or URG firmware is too old.\n"
            "SCIP 1.1 protocol is not supported. Please update URG firmware.";
          return -1;
        }
        state->last_timestamp = 0;
    
        // success
        return 0;
      }
    
      // fail
      ErrorMessage = "no urg ports.";
      return -1;
    }
    
    
    /*!
      \brief Disconnection
    */
    static void urg_disconnect(void)
    {
      com_disconnect();
    }
    
    
    /*!
      \brief Receive range data by using GD command
    
      \param state[i] Sensor information
    
      \retval 0 Success
      \retval < 0 Error
    */
    static int urg_captureByGD(const urg_state_t* state)
    {
      char send_message[LineLength];
      _snprintf(send_message, LineLength,
                "GD%04d%04d%02d", state->first, state->last, 1);
    
      return urg_sendTag(send_message);
    }
    
    
    /*!
      \brief Get range data by using MD command
    
      \param state [i] Sensor information
      \param capture_times [i] capture times
    
      \retval 0 Success
      \retval < 0 Error
    */
    static int urg_captureByMD(const urg_state_t* state, int capture_times)
    {
      // 100 夞傪挻偊傞僨乕僞庢摼偵懳偟偰偼丄夞悢偵 00 (柍尷夞庢摼)傪巜掕偟丄
      // QT or RS 僐儅儞僪偱僨乕僞庢摼傪掆巭偡傞偙偲
      if (capture_times >= 100) {
        capture_times = 0;
      }
    
      char send_message[LineLength];
      _snprintf(send_message, LineLength, "MD%04d%04d%02d%01d%02d",
                state->first, state->last, 1, 0, capture_times);
    
      return urg_sendTag(send_message);
    }
    
    
    // Decode 6bit data
    static long urg_decode(const char data[], int data_byte)
    {
      long value = 0;
      for (int i = 0; i < data_byte; ++i) {
        value <<= 6;
        value &= ~0x3f;
        value |= data[i] - 0x30;
      }
      return value;
    }
    
    
    // Receive range data
    static int urg_addRecvData(const char buffer[], long data[], int* filled)
    {
      static int remain_byte = 0;
      static char remain_data[3];
      const int data_byte = 3;
    
      const char* pre_p = buffer;
      const char* p = pre_p;
    
      if (*filled <= 0) {
        remain_byte = 0;
      }
    
      if (remain_byte > 0) {
        memmove(&remain_data[remain_byte], buffer, data_byte - remain_byte);
        data[*filled] = urg_decode(remain_data, data_byte);
        ++(*filled);
        pre_p = &buffer[data_byte - remain_byte];
        p = pre_p;
        remain_byte = 0;
      }
    
      do {
        ++p;
        if ((p - pre_p) >= static_cast<int>(data_byte)) {
          data[*filled] = urg_decode(pre_p, data_byte);
          ++(*filled);
          pre_p = p;
        }
      } while (*p != '\0');
      remain_byte = (int)(p - pre_p);
      memmove(remain_data, pre_p, remain_byte);
    
      return 0;
    }
    
    
    static int checkSum(char buffer[], int size, char actual_sum)
    {
      char expected_sum = 0x00;
      int i;
    
      for (i = 0; i < size; ++i) {
        expected_sum += buffer[i];
      }
      expected_sum = (expected_sum & 0x3f) + 0x30;
    
      return (expected_sum == actual_sum) ? 0 : -1;
    }
    
    
    /*!
      \brief Receive URG data
    
      應掕僨乕僞傪攝楍偵奿擺偟丄奿擺僨乕僞悢傪栠傝抣偱曉偡丅
    
      \param state [i] Sensor information
      \param data [o] range data
      \param max_size [i] range data buffer size
    
      \retval >= 0 number of range data
      \retval < 0 Error
    */
    static int urg_receiveData(urg_state_t* state, long data[], size_t max_size)
    {
      int filled = 0;
    
      // fill -1 from 0 to first
      for (int i = state->first -1; i >= 0; --i) {
        data[filled++] = -1;
      }
    
      char message_type = 'M';
      char buffer[LineLength];
      int line_length;
      for (int line_count = 0; (line_length = urg_readLine(buffer)) >= 0;
           ++line_count) {
    
        // check sum
        if ((line_count > 3) && (line_length >= 3)) {
          if (checkSum(buffer, line_length - 1, buffer[line_length - 1]) < 0) {
            fprintf(stderr, "line_count: %d: %s\n", line_count, buffer);
           return -1;
          }
        }
    
        if ((line_count >= 6) && (line_length == 0)) {
    
          // 僨乕僞庴怣偺姰椆
          for (size_t i = filled; i < max_size; ++i) {
            // fill -1 to last of data buffer
            data[filled++] = -1;
          }
          return filled;
    
        } else if (line_count == 0) {
          // 憲怣儊僢僙乕僕偺嵟弶偺暥帤偱儊僢僙乕僕偺敾掕傪峴偆
          if ((buffer[0] != 'M') && (buffer[0] != 'G')) {
            return -1;
          }
          message_type = buffer[0];
    
        } else if (! strncmp(buffer, "99b", 3)) {
          // "99b" 傪専弌偟丄埲崀傪乽僞僀儉僗僞儞僾乿乽僨乕僞乿偲傒側偡
          line_count = 4;
    
        } else if ((line_count == 1) && (message_type == 'G')) {
          line_count = 4;
    
        } else if (line_count == 4) {
          // "99b" 屌掕
          if (strncmp(buffer, "99b", 3)) {
            return -1;
          }
    
        } else if (line_count == 5) {
          state->last_timestamp = urg_decode(buffer, 4);
    
        } else if (line_count >= 6) {
          // 庢摼僨乕僞
          if (line_length > (64 + 1)) {
            line_length = (64 + 1);
          }
          buffer[line_length -1] = '\0';
          int ret = urg_addRecvData(buffer, data, &filled);
          if (ret < 0) {
            return ret;
          }
        }
      }
      return -1;
    }
    
    
    void outputData(long data[], int n, size_t total_index)
    {
      char output_file[] = "data_xxxxxxxxxx.csv";
      _snprintf(output_file, sizeof(output_file), "data_%03d.csv", total_index);
      FILE* fd = fopen(output_file, "w");
      if (! fd) {
        perror("fopen");
        return;
      }
    
      for (int i = 0; i < n; ++i) {
        fprintf(fd, "%ld, ", data[i]);
      }
      fprintf(fd, "\n");
    
      fclose(fd);
    }
    
    
    int main(int argc, char *argv[])
    {
      // COM 億乕僩愝掕
      // !!! 奺帺偺娐嫬偵崌傢偣偰 COM 愝掕傪曄峏偡傞偙偲
      const char com_port[] = "COM10";
      const long com_baudrate = 115200;
    
      // URG 偵愙懕
      urg_state_t urg_state;
      int ret = urg_connect(&urg_state, com_port, com_baudrate);
      if (ret < 0) {
        // 僄儔乕儊僢僙乕僕傪弌椡偟偰廔椆
        printf("urg_connect: %s\n", ErrorMessage);
    
        // 懄嵗偵廔椆偟側偄偨傔偺張棟丅晄梫側傜偽嶍彍偡傞偙偲
        getchar();
        exit(1);
      }
    
      int max_size = urg_state.max_size;
      long* data = new long[max_size];
    
      enum { CaptureTimes = 5 };
      size_t total_index = 0;
    
      //
      // GD 僐儅儞僪傪梡偄偨僨乕僞庢摼
      printf("using GD command\n");
    
      // GD 僐儅儞僪偱偺僨乕僞庢摼偺応崌偵偼丄BM 僐儅儞僪偱偺儗乕僓揰摂偑昁梫
      int recv_n = 0;
      urg_sendMessage("BM", Timeout, &recv_n);
    
      for (int i = 0; i < CaptureTimes; ++i) {
        urg_captureByGD(&urg_state);
        int n = urg_receiveData(&urg_state, data, max_size);
        if (n > 0) {
          printf("% 3d: front: %ld, urg_timestamp: %ld\n",
                 i, data[urg_state.area_front], urg_state.last_timestamp);
    
          outputData(data, n, ++total_index);
        }
      }
      printf("\n");
    
      /
      // MD 僐儅儞僪傪梡偄偨僨乕僞庢摼
      printf("using MD command\n");
    
      urg_captureByMD(&urg_state, CaptureTimes);
      for (int i = 0; i < CaptureTimes; ++i) {
        int n = urg_receiveData(&urg_state, data, max_size);
        if (n > 0) {
          printf("% 3d: front: %ld, urg_timestamp: %ld\n",
                 i, data[urg_state.area_front], urg_state.last_timestamp);
    
          outputData(data, n, ++total_index);
        }
      }
      // MD 僐儅儞僪偱偺庢摼偑姰椆偡傞偲丄儗乕僓偼帺摦徚摂偡傞
    
      // 偨偩偟丄100 夞埲忋偺僨乕僞庢摼傪巜掕偟偨応崌偵偼丄
      // urg_captureByMD() 撪晹偱柍尷夞偺僨乕僞庢摼偵愝掕偝傟偰偄傞偺偱丄
      // QT 僐儅儞僪傪梡偄偰丄柧帵揑偵僨乕僞掆巭傪峴偆
      if (CaptureTimes >= 100) {
        int dummy;
        urg_sendMessage("QT", Timeout, &dummy);
      }
    
      urg_disconnect();
      delete [] data;
    
      printf("end.\n");
    
      // 懄嵗偵廔椆偟側偄偨傔偺張棟丅晄梫側傜偽嶍彍偡傞偙偲
      getchar();
      return 0;
    }
    

    //激光雷达采集到数据的显示:



    展开全文
  • 数据采集器与数据中心之间采用TCP连接方式进行交互,服务器地址:58.33.55.30,端口为1020。有效数据内容为经过AES(128位)加密后的XML数据。 本文档描述了通讯协议的规则。 2数据封包格式 ![图片说明]...
  • 数据采集

    千次阅读 多人点赞 2018-04-03 14:52:12
    二、大数据采集设备 1.科研数据 (1)大型强子对撞机 (2)射电望远镜 (3)电子显微镜 2.网络数据 我们可以利用数据中心采集网络中的数据。 三、大数据采集方法 1.科研数据 2.网络数据 爬虫(慎用) 3....

    一、大数据的来源
    1.人类活动
    2.计算机
    3.物理世界
    二、大数据采集设备
    1.科研数据
    (1)大型强子对撞机
    (2)射电望远镜
    (3)电子显微镜
    2.网络数据
    我们可以利用数据中心采集网络中的数据。
    三、大数据采集方法
    1.科研数据
    2.网络数据
    爬虫(慎用)
    3.系统日志
    (1)Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量应用。Scribe架构如下图所示:
    这里写图片描述
    (2)Chukwa
    Chukwa提供了一种对大数据量日志类数据采集、存储、分析和展示的全套解决方案和框架。Chukwa结构如下图所示:
    这里写图片描述
    四、大数据预处理技术
    1.目前存在四种主流的数据预处理技术:数据清理、数据集成、数据规约和数据变换。
    2.数据处理的主要任务
    (1)数据处理的主要步骤:数据清理、数据集成、数据规约和数据变换。
    (2)数据清理例程通过填写缺失值、光滑噪声数据、识别或者删除离群点并且解决不一致性来“清理数据”。
    (3)数据集成过程将来自多个数据源的数据集成到一起。
    (4)数据规约的目的是得到数据集的简化表示。数据规约包括维规约和数值规约。
    (5)数据变换使用规范化、数据离散化和概念分层等方法使得数据的挖掘可以在多个抽象层上进行。数据变换操作是引导数据挖掘过程成功的附加预处理过程。
    3.数据清理
    (1)缺失值
    对于缺失值的处理一般是想法设法把它补上,或者干脆弃之不用。一般处理方法有:忽略元组、人工填写缺失值、使用一个全局变量填充缺失值、使用属性的中心度量填充缺失值、使用与给定元组属同一类的所有样本的属性均值或中位数、使用最可能的值填充缺失值
    (2)噪声数据
    噪声是被测量变量的随机误差或方差。去除噪声、使数据“光滑”的技术:分箱、回归、离群点分析
    (3)数据清理的过程
    数据清理过程主要包括数据预处理、确定清理方法、校验清理方法、执行清理工具和数据归档。
    数据清理的原理是通过分析“脏数据”产生的原因和存在形式,利用现有的技术手段和方法去清理“脏数据”,将“脏数据”转化为满足数据质量或应用要求的数据,从而提高数据集的数据质量。
    数据分析主要有两种方法:数据派生和数据挖掘。
    五、数据集成
    1.实体识别
    2.冗余和相关分析
    冗余是数据集成的另一个重要问题。有些冗余是可以被相关分析检测到的,例如,数值属性,可以使用相关系数和协方差来评估一个属性随着另一个属性的变化。
    3.数据冲突的检测与处理
    六、数据变换与数据离散化(重点)
    1.数据变换的常用方法
    (1)中心化变换。中心化变换是一种坐标轴平移处理方法。
    (2)极差规格化变换。规格化变换是从数据矩阵的每一个变量中找出其最大值和最小值,且二者的差称为极差。
    (3)标准化变换。标准化变换是对变量的数值和量纲进行类似于规格化变换的一种数据处理方法。
    (4)对数变换。对数变换是将各个原始数据取对数,将原始数据的对数值作为变换后的新值。对数变换的用途:使服从对数正态分布的资料正态化;将方差进行标准化;使曲线直线化,常用于曲线拟合。
    2.数据离散化
    数据离散化的目的:
    (1)算法需要。例如,决策树和朴素贝叶斯本身不能直接使用连续型变量
    (2)离散化可以有效克服数据中隐藏的缺陷,使模型结果更加稳定。
    (3)有利于对非线性关系进行诊断和描述。
    数据离散化的原则:
    (1)等距
    等距可以保持数据原有的分布,段落越多对数据原貌保持得越好。
    (2)等频
    等频处理则把数据变换成均匀分布,但其各段内观察值相同这一点是等距分割做不到的。
    (3)优化离散
    需要把自变量和目标变量联系起来考察。切分点是导致目标变量出现明显变化的折点。常用的检验指标有信息增益、基尼指数或WOE(要求目标变量是两元变量)。
    数据离散化方法:
    聚类
    决策树
    相关分析(ChiMerge)

    展开全文
  • 利用rs232进行数据采集和利用usb采集数据有什么区别,感觉利用rs232进行数据采集时不管采集板卡是否一样,好像都不用考虑设备驱动程序的问题,除非用到rs232转usb,需要安装rs232转usb的驱动程序,但是好像都是通用的...
  • PMAC数据采集

    千次阅读 2015-06-12 15:58:13
    PMAC的数据采集和曲线绘制是分析程序运行结果的重要手段。本文以prog5为例介绍PMAC的数据采集方法。  END GATHER DELETE GATHER &1 CLOSE #1->27.77777777777778x OPEN PROG 5 CLEAR LINEAR ABS TA500 TS250 ...
  • 发那科数据采集 (法兰克数据采集

    千次阅读 热门讨论 2019-01-07 17:41:58
    因为项目需要用到发那科机器的一些数据,在里面踩了无数的坑,终于写好了一个可以满足目前项目需求的程序。 回想起来真是心酸都不足以形容。。 先上一个采集端的界面,界面是很丑陋,但是胜在简单。: 机器的配置...
  • M400数据采集管理软件,采集的数据怎么获取? 我想写个C#winform程序去获取采集的数据,做个预警功能。 求大神们指点 ![![图片说明](https://img-ask.csdn.net/upload/201706/29/1498708597_950463.png)图片说明]...
  • 总的来说目前互联网常用的数据采集分为APP采集和web端采集对于APP采集最常用的方式就是通过集成SDK,进行埋点采集对于这种方式,目前分为有无埋点采集,可视化埋点采集,手工埋点采集大类分别针对于:日志的全量收集...
  • APP数据采集 / 网站页面数据采集 / 小程序数据抓取定制软件采集数据服务 【服务介绍】 对国内外APP、网站、小程序数据进行采集,并可以按照您的要求把采集好的数据整理成需要的格式(txt/excel/sql/pdf), 从事...
  • 小红书用户笔记数据采集分析报告

    万次阅读 2019-06-13 22:19:37
    原文链接... Xiao Hongshu as a netizen's "grass base", there are wedding planning companies from across the country, new people will choose to understand on the platform to collect ...
  • 求教红色部分的方法,现在只能采集到第一个窗体的 频率对应的波峰最大值,具体代码为 public static List<double> getSWR(int channels, int part) { List<double> rs = new List(); double maxPoint = 0, ...
  • 电商图书数据采集-ISBN数据采集

    千次阅读 2018-04-12 14:49:08
    ISBN是International Standard Book Number(国际标准书号)的一个英文缩写,是国际上通用的出版物标识编码。图书采集与一般商品信息需求不同,他们的...因为这个是页面显示出来的东西,一般电商数据采集软件都能爬...
  • 《BackTrader从数据采集到实盘交易》是本系列的第一个中级课程。本网站的课程宗旨是缩短个人或小型投资者与大型机构投资者之间的的差距。 课程内容从python环境的安装开始使用,到股票数据采集,BackTrader开源...
  • 我现在在做一个数据采集端系统 采集方式:量测机器将量测的结果输出到 txt文本文件中, 我的程序从文本文件中读结果,经过分析和处理 ,然后放入数据库中。 文本文件大小1K-10M不等, 量测站点180个左右,24小时工作...
  • 上篇文章讲述了Fanuc数据采集的必备库的说明以及调用方式,此片文章开始真正的实战操作 首先看下上图,所有的公开函数都会有一个FlibHndl参数,次参数的含义为大家解释: 开发者开发客户端程序和Fanuc系统连接,...
  • LabView数据采集

    千次阅读 2019-08-12 15:15:52
    LabView数据采集 文章目录1. LabView 基础 1. LabView 基础 求极差、组距与数组、分点、频率分布表、频率分布直方图 数据质量分析的任务是检测原始数据 ... ...
  • 开源数据采集技术对比

    千次阅读 2018-11-05 16:51:10
    数据是监控报警的基石,我们在实现海量数据分析监控前,需要有一个顺手的工具来收集这些数据 开源日志收集工具对比 从上表中可以看出,Logstash 虽然功能比较强大,但是占用系统的资源也比较多, 而Filebeat虽然不...
  • 前一段时间一直在做用研华数据采集卡的PCI-1710来进行数据采集然后将数据采集的信号通过LabView显示在工控机中,在进行实验的过程中发现了许多问题,这些问题好像在网上看到了其他的人也有疑惑的,这里说一点经验,...
  • 数据采集:如何自动化采集数据?

    万次阅读 2019-01-27 20:33:54
    上一节中我们讲了如何对用户画像建模,而建模之前我们都要进行数据采集数据采集是数据挖掘的基础,没有数据,挖掘也没有意义。很多时候,我们拥有多少数据源,多少数据量,以及数据质量如何,将决定我们挖掘产出的...
  • 科加斯数据采集平台使用教程 当前版本 测试版 新建采集 功能 新建一个爬虫来进行数据采集 使用 打开“新建采集”菜单,进入爬虫配置界面: 基本配置: 项 是否必填 说明 示例 爬虫名字 是 任意字符,不可...
  • 简介数据采集就是搜集符合数据挖掘研究要求的原始数据(Raw Data)。原始数据是研究者拿到的一手或者二手资源。数据采集既可以从现有、可用的无尽数据中搜集提取你想要的二手数据,也可以经过问卷调查、采访、沟通等...
  • Hass数据采集

    2019-07-23 16:03:52
    哈斯机床数据采集分享 本着网络资源共享的理想,本人将开始工业机床数据采集的方法分享,为广大已投身工业采集或即将投入工业采集的同仁理一些思路。 哈斯机床数据采集是一个相对简单的采集类机床,没有专用的开发包...
  • prometheus数据采集

    千次阅读 2020-03-03 15:57:45
    prometheus数据采集 Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。 Prometheus通过HTTP...
  • 旭诺财税应用市场-认证通
  • 物联网数据采集

    千次阅读 2018-08-31 13:14:00
    硬件采集数据(包含采集协议和通讯协议) 硬件与网络通讯(传输数据和传输方式) 网络前端的显示和展示 1、硬件采集数据 我们现在用到的传感器大都是有固定通讯协议的,例如串口通讯 ...
  • Flume数据采集

    千次阅读 2018-06-12 15:42:16
    flume自带很长多的source,如:exe、kafka......常用的使用场景:对于有些应用环境中,不能部署Flume SDK及其依赖项,可以在代码中通过HTTP而不是Flume的PRC发送数据的情况,此时HTTP SOURCE可以用来将数据接收到Fl...
  • 基于FPGA的数据采集系统

    千次阅读 2014-01-23 13:26:20
    平时我们用的MCU(51系列,AVR系列,PIC系列)和DSP往往因为采集数据量大而不能完全满足我们的需要。现在众多测控公司采用的是FPGA(现场可编程逻辑器)采集数据。FPGA的优点:众多的I/O口,资源众多,可自由编程...

空空如也

1 2 3 4 5 ... 20
收藏数 57,583
精华内容 23,033
关键字:

数据采集