批量化下载OCO-2数据

本文介绍了如何从GES DISC网站上批量下载OCO-2数据的详细步骤,包括设置下载选项、获取数据列表以及利用wget工具进行自动化下载。
摘要由CSDN通过智能技术生成

oco文件下载,转载请注明出处。

1:地址:GES DISC

进入第一条

2: 进入后点击Subset/Get Data

3:进入下载页面,可设置下载方式、时间、区域等信息。注意:如果只需要部分地区数据就别选Original Files

4:设置完成后点击右下角绿色按钮 “Get Data”,弹出数据列表。可通过“Download links list”下载数据列表文件。

</

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CIP(Common Industrial Protocol)是一种用于工业自动设备之间通信的协议。要在Windows下使用C++实现CIP批量写入数据,可以使用开源的CIP协议栈实现,例如OpENer(https://github.com/EIPStackGroup/OpENer)。 以下是一个使用OpENer实现CIP批量写入数据的示例: ```c++ #include "cipconnectionmanager.h" #include "cipethernetlink.h" #include "cipconnection.h" #include "cipmessagerouter.h" #include "cipcommon.h" #include "ciperror.h" #include "enet_encap.h" #include "enet_encap_serialization.h" // 定义要写入的数据 const uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x05}; int main() { // 初始OpENer协议栈 CipStackInit(); // 连接到设备 CipEthernetLink link; link.ip_address = "192.168.1.10"; link.mac_address = "00:11:22:33:44:55"; link.netmask = "255.255.255.0"; link.gateway = "192.168.1.1"; link.interface_index = 1; CipConnectionManager::InsertEthernetLink(&link); // 创建连接 CipConnection connection; connection.connection_path.class_id = CIP_CONNECTION_MANAGER_CLASS_CODE; connection.connection_path.instance_id = 1; connection.connection_path.attribute_id = 2; connection.connection_path.segment = kSegmentTypeLogical; connection.connection_path.port = 0xAF12; // 随意指定一个未被使用的端口号 connection.connection_path.connection_point = 0; connection.connection_path.priority = 0; connection.connection_path.timeout_ticks = 0; connection.connection_path.transport_type = kTransportTypeTcp; connection.connection_path.owner_id = kOpenerConnectionOwnerTcpIp; connection.connection_path.connection_size = 0; // 由连接响应自动设置 connection.connection_path.data = nullptr; // 由连接响应自动设置 connection.remote_address = link.ip_address.c_str(); connection.remote_port = 0xAF12; // 端口号与连接路径的一致 connection.originator_address = "127.0.0.1"; connection.originator_port = 12345; connection.connection_serial_number = 0; connection.connection_timeout_multiplier = 3; connection.o_to_t_requested_packet_interval_us = 1000; connection.t_to_o_requested_packet_interval_us = 1000; connection.connection_path.message_router_path_size = 2; connection.connection_path.message_router_path[0] = 0x20; // Class ID: 0x20 -> Assembly Object connection.connection_path.message_router_path[1] = 0x01; // Instance ID: 0x01 -> Assembly 1 connection.connection_path.message_router_path[2] = 0x00; // Attribute ID: 0x00 -> Data // 建立连接 CipError error = CipConnectionManager::Connect(&connection); if (error != kCipErrorSuccess) { printf("Failed to connect: %d\n", error); return -1; } // 构造CIP数据包 EipUint32 interface_handle = link.interface_index; CipCommonPacketFormat cpf; CipMessageRouterRequestData request_data( 0x10, // Service Code: 0x10 -> Multiple Service Packet 3, // Request Path Size connection.connection_path.message_router_path, // Request Path sizeof(data), // Data Length data // Data ); CipMessageRouterRequest message( interface_handle, &connection, &cpf, &request_data ); // 发送CIP数据包 std::vector<uint8_t> buffer(message.MessageRouterRequestPacketLength()); message.Serialize(buffer.data()); EnetEncapSendTo(&link, buffer.data(), buffer.size()); // 断开连接 CipConnectionManager::Close(&connection); // 关闭OpENer协议栈 CipStackShutdown(); return 0; } ``` 在以上示例中,我们首先初始OpENer协议栈,然后连接到设备并创建CIP连接。接着,我们构造要写入的数据,并使用CipMessageRouterRequest类构造CIP数据包。最后,我们发送CIP数据包,并在完成后断开连接并关闭OpENer协议栈。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值