SICK系列激光雷达单点测距仪DT80-311111+SIG200配置和通信

devtools/2024/10/21 19:08:23/

文章目录

  • 一、硬件连接与SOPAS连接测距仪
  • 二、从SOPAS读取数据
  • 三、通过JSON获取数据
    • 1. 使用Postman测试接口
    • 2. 通过代码实现


一、硬件连接与SOPAS连接测距仪

首先硬件设备连接如下:
电源厂家应该是不提供,需要自行解决。
在这里插入图片描述
安装完成后需要使用sick的SOPAS软件进行配置:
1、通过软件更改设备IP
2、从设备导入
3、读取数据
4、点击“离线”按钮,切换为在线状态

具体请按照这篇文章来连接

二、从SOPAS读取数据

连接成功后如下图:
在这里插入图片描述
双击设备进入设备页面,如下:
在这里插入图片描述
在这里插入图片描述
这两位就是十六进制的距离信息,可以自行转换为十进制数,与测距仪表面显示屏上的十进制数字进行对比。

三、通过JSON获取数据

分别使用Python和C++来实现了:

1. 使用Postman测试接口

在这里插入图片描述
其中:

{"header": {"portNumber": 0},"data": {"processData":"in"}}

获取到如下内容表示成功

{"header": {"status": 0,"message": "ok"},"data": {"processDataIn": [0,0,123,212,252,1],"isValid": true}
}

2. 通过代码实现

1、C++代码如下:

#include <windows.h>
#include <winhttp.h>
#include <iostream>
#include <string>
#include <vector>
#include "nlohmann/json.hpp"#pragma comment(lib, "winhttp.lib")using json = nlohmann::json;HINTERNET OpenSession(const wchar_t* userAgent) {HINTERNET hSession = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,WINHTTP_NO_PROXY_NAME,WINHTTP_NO_PROXY_BYPASS, 0);if (!hSession) {std::cerr << "Failed to open WinHTTP session." << std::endl;}return hSession;
}std::string SendPostRequest(HINTERNET hSession, const wchar_t* serverName, const wchar_t* path, const std::string& postData) {HINTERNET hConnect = WinHttpConnect(hSession, serverName, INTERNET_DEFAULT_HTTP_PORT, 0);if (!hConnect) {std::cerr << "Failed to connect to server." << std::endl;return "";}HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"POST", path, NULL, WINHTTP_NO_REFERER,WINHTTP_DEFAULT_ACCEPT_TYPES, 0);if (!hRequest) {std::cerr << "Failed to open request." << std::endl;WinHttpCloseHandle(hConnect);return "";}const wchar_t* headers = L"Content-Type: application/json";DWORD dwBytesSent = 0;if (!WinHttpSendRequest(hRequest, headers, -1L, (LPVOID)postData.c_str(), postData.size(), postData.size(), 0)) {std::cerr << "Failed to send request." << std::endl;WinHttpCloseHandle(hRequest);WinHttpCloseHandle(hConnect);return "";}if (!WinHttpReceiveResponse(hRequest, NULL)) {std::cerr << "Failed to receive response." << std::endl;WinHttpCloseHandle(hRequest);WinHttpCloseHandle(hConnect);return "";}std::string response;DWORD dwSize = 0;DWORD dwDownloaded = 0;LPSTR pszOutBuffer;do {dwSize = 0;if (!WinHttpQueryDataAvailable(hRequest, &dwSize)) {std::cerr << "Failed to query data available." << std::endl;break;}pszOutBuffer = new char[dwSize + 1];if (!pszOutBuffer) {std::cerr << "Memory allocation failed." << std::endl;break;}ZeroMemory(pszOutBuffer, dwSize + 1);if (!WinHttpReadData(hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded)) {std::cerr << "Failed to read data." << std::endl;}else {response.append(pszOutBuffer, dwDownloaded);}delete[] pszOutBuffer;} while (dwSize > 0);WinHttpCloseHandle(hRequest);WinHttpCloseHandle(hConnect);return response;
}int main() {HINTERNET hSession = OpenSession(L"MyAppName/1.0");if (!hSession) {return 1;}const wchar_t* serverName = L"169.254.102.101";const wchar_t* path = L"/iolink/sickv1/readPort";json payload = {{"header", {{"portNumber", 0}}},{"data", {{"processData", "in"}}}};std::string postData = payload.dump();std::string response = SendPostRequest(hSession, serverName, path, postData);if (!response.empty()) {try {json data = json::parse(response);const json processDataIn = data.at("data").at("processDataIn");if (processDataIn.size() >= 4) {int thirdData = processDataIn[2].get<int>();int fourthData = processDataIn[3].get<int>();std::cout << "Third data: " << thirdData << std::endl;std::cout << "Fourth data: " << fourthData << std::endl;}else {std::cout << "Response does not contain enough data." << std::endl;}}catch (const std::exception& e) {std::cerr << "Failed to parse JSON response: " << e.what() << std::endl;}}else {std::cerr << "Request failed." << std::endl;}WinHttpCloseHandle(hSession);return 0;
}

注意,nlohmann/json.hpp需要自行去github上把nlohmann下载下来,然后去包含目录导入。

python比较简单:

python">import requests# 定义请求的URL和请求体
url = "http://192.168.0.20/iolink/sickv1/readPort"
payload = {"header": {"portNumber": 0},"data": {"processData": "in"}
}# 发送POST请求
response = requests.post(url, json=payload)# 检查请求是否成功
if response.status_code == 200:# 解析返回的JSON数据data = response.json()# 获取processDataIn列表process_data_in = data.get('data', {}).get('processDataIn', [])# 检查列表长度是否足够if len(process_data_in) >= 4:# 获取第3和第4个数据(索引为2和3)third_data = process_data_in[2]fourth_data = process_data_in[3]print(f"Third data: {third_data}")print(f"Fourth data: {fourth_data}")else:print("Response does not contain enough data.")
else:print(f"Request failed with status code: {response.status_code}")

运行结果:
在这里插入图片描述
即为所求


http://www.ppmy.cn/devtools/127634.html

相关文章

Java爬虫:获取商品销量详情API返回值的实战指南

在数字化时代&#xff0c;数据已成为电商运营的核心。商品销量数据不仅反映了市场的需求和趋势&#xff0c;还能为商家提供决策支持。通过Java爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;从而深入分析商品的市场表现。 为何选择Java爬虫获取销量数据 自动化处…

13.3寸三防平板大尺寸+高速运行提升工业软件操作体验

在工业领域&#xff0c;移动设备的应用日益广泛&#xff0c;其性能直接影响着工作效率和数据安全。传统的工业平板电脑常常面临着屏幕尺寸过小、运行速度缓慢、以及抗环境能力不足等问题&#xff0c;这些都制约了工业软件的流畅运行和高效应用。而一款搭载先进硬件配置的13.3寸…

微信小程序/uniapp动态修改tabBar信息及常见报错

目录 uni.setTabBarItem(options)介绍&#xff1a;参数&#xff1a;示例&#xff1a; 报错 uni.setTabBarItem(options) 介绍&#xff1a; wx.setTabBarItem是不支持修改url路径的&#xff0c;所以使用uniapp的API。 动态设置 tabBar 某一项的内容&#xff1a;uniapp官网 se…

Sigrity-Power SI如何使用Model Extraction模式提取电源网络的S参数和阻抗操作指导(二)

Sigrity-Power SI如何使用Model Extraction模式提取电源网络的S参数和阻抗操作指导(二) Sigrity-Power SI如何查看电源网络的S参数和阻抗操作指导(一)结果中在74Mhz和720Mhz处出现较大的谐振。可以通过添加该谐振频率的电容来降低谐振峰值. 还是这块PCB,仅仅添加一些电容到PC…

Linux中device_create、device_add、device_register的区别

目录 前言&#xff1a; 一、源码分析 1、device_create() 2、device_register 3、device_add 二、device_create()、device_register()、device_add()使用中的区别 1、device_create() 2、device_register() 3、device_add() 前言&#xff1a; Linux设备驱动开发中&…

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具&#xff0c;广泛用于Java项目的管理和构建。以下是它们的对比&#xff0c;包括官网、Windows 11配置环境、在IDEA中的相同点和不同点&#xff0c;以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…

Docker基础操作

文章目录 一、安装Docker二、Docker镜像操作1.搜索镜像 docker search2.获取镜像 docker pull3.查看镜像信息 docker images4.获取镜像/容器 详细信息 docker inspect5.为本地的镜像添加新的标签 docker tag6.删除镜像 docker rmi7.将镜像保存成为本地文件 docker save -o8.将镜…

Redis优劣势分析

Redis优劣势分析 Redis是一个开源的、内存中的数据结构存储&#xff0c;用于数据库、缓存和消息代理。以下是Redis的优劣势分析&#xff1a; 优点&#xff1a; 高性能&#xff1a; Redis是内存数据库&#xff0c;读写速度非常快&#xff0c;适合需要高性能的场景。丰富的数据…