Eu63-Collecter Euromap63协议采集接口实现

2023-11-05

Eu63-Collecter Euromap63协议采集接口实现

项目仓库:https://github.com/tang0-0/Eu63-Collecter
Euromap 63协议认识:https://blog.csdn.net/lblmlms/article/details/129431977
Euromap63-IMM模拟器:<>
Eu63-Collecter:<>

特点

  1. C语言编写,无外部库依赖
  2. 支持Connect、Report、Set命令

实现思路

  1. 整个协议交互是基于对共享文件的操作,本组件只实现文件操作,不包含网络传输部分
  2. 首先创建一个共享文件夹,然后在里面为每个注塑机建立单独的文件夹
  3. 每个请求分为以下步骤:
    • 写会话层文件
    • 写表示层文件
    • 等待注塑机删除会话请求文件
    • 读取会话响应文件
    • 读取表示层响应文件
    • 读取应用层文件(如果有)
  4. 文件读写采用C语言标准库接口,监听文件是否删除采用Linux系统的inotify机制
  5. 参数的传入传出采用链表结构存储

使用例程

每隔一分钟发起一个Report请求,每次请求都包含Connect命令。


#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "../Src/eu63_collecter.h"


static char *param_name[] = {"ABC001", "ABC002", "ABC003", "ABC004"};
static void print_param_value(eu63_param_list *list)
{
    ty_list_t *pos, *n;
    eu63_report_param *param;

    ty_list_for_each_entry_safe(param, pos, n, &(list->param_head), param_node)
    {
        printf("%s value:%s\n", param->name, param->value);
    }
}

int main(int argc, char *argv[])
{
    int ret = -1;
    eu63_collecter *collecter = NULL;
    eu63_param_list *list = NULL;

    ret = eu63_create_share_folder();
    if (ret)
    {
        printf("EU63 create share folder failed\n");
        return -1;
    }

    collecter = eu63_collecter_create("IMM01");
    if (!collecter)
    {
        printf("EU63 create collecter failed\n");
        return -2;
    }

    ret = eu63_create_imm_folder(collecter);
    if (ret)
    {
        printf("EU63 create imm folder failed\n");
        ret = -3;
        goto _error;
    }

    list = eu63_create_param_list();
    if (!list)
    {
        printf("EU63 create param list failed\n");
        ret = -4;
        goto _error;
    }

    eu63_report_param *param = NULL;
    for (int i = 0; i < 4; i++)
    {
        param = eu63_create_param();
        if (!param)
        {
            continue;
        }

        strncpy(param->name, param_name[i], sizeof(param->name));
        ty_list_append_head(&list->param_head, &param->param_node);
        list->req_count++;
        printf("Append %s to param list\n", param->name);
    }

    if (0 == list->req_count)
    {
        printf("EU63 param list is null\n");
        ret = -5;
        goto _error;
    }

    while (1)
    {
        printf("REQ report file\n");
        ret = eu63_execute_report_req(collecter, list);
        if (!ret)
        {
            print_param_value(list);
        }
        else
        {
            printf("EU63 REQ report failed\n");
        }

        sleep(60);
    }

_error:
    if (collecter)
    {
        eu63_collecter_free(collecter);
    }
    if (list)
    {
        eu63_free_param_list(list);
    }

    return ret;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eu63-Collecter Euromap63协议采集接口实现 的相关文章

  • Tk 初始化失败:无显示名称且无 $DISPLAY 环境变量

    我试图从 Ubuntu 终端调用 Centos 服务器上的工具 我收到以下错误 Tk 初始化失败 没有显示名称 也没有 DISPLAY 环境变量 请帮我解决这个问题 提前致谢 连接到你的 CentOS 机器ssh Y其中 每man ssh
  • 有没有办法改变vim的默认模式

    有谁知道如何更改vim的默认模式 它的默认模式是命令模式 但是我可以将其更改为插入模式吗 只需将以下行添加到您的 vimrc 中 start Vim s default mode will be changed to Insert mode
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • 如何使用 shell 脚本解压所有 .tar.gz?

    我试过这个 DIR path tar gz if ls A DIR 2 gt dev null then echo not gz else tar zxvf path tar gz C path tar fi 如果该文件夹有一个 tar 则
  • 如何获取文件夹的大小,包括稀疏文件的表观大小? (du太慢了)

    我有一个包含很多KVM qcow2文件的文件夹 它们都是稀疏文件 现在我需要获取文件夹的总大小 qcow2 文件大小应计为表观大小 而不是实际大小 例如 图片 c9f38caf104b4d338cc1bbdd640dca89 qcow2 文
  • 如何更改Linux服务器中的MySQL表名不区分大小写?

    我正在开发一个旧网站 该网站曾经托管在 Apple 服务器上 当它迁移到新的 Linux 服务器时 它停止工作 我很确定这是因为 php 脚本中使用的所有 MySQL 查询对于表名都有不同的大小写组合 我不知道为什么原始开发人员在创建表名或
  • 查找当前打开的文件句柄数(不是 lsof )

    在 NIX系统上 有没有办法找出当前正在运行的进程中有多少个打开的文件句柄 我正在从正在运行的进程中寻找在 C 中使用的 API 或公式 在某些系统上 见下文 您可以在 proc pid fd 中对它们进行计数 如果不属于其中之一 请参阅下
  • 第一次如何配置postgresql?

    我刚刚安装了 postgresql 并在安装过程中指定了密码 x 当我尝试做的时候createdb并指定我收到消息的任何密码 createdb 无法连接到数据库 postgres 致命 用户密码身份验证失败 同样适用于createuser
  • AMD OpenCL 在 Linux 上工作所需的最小必要文件子集是什么?

    我已经使用 buildroot 构建了 Linux 内核 我已将开源 amdgpu 驱动程序和所需的固件合并到其中 驱动程序很好 检测 GPU 模式设置运行良好 调整 小文本 的分辨率 启动后会显示命令行 现在我需要运行 OpenCL 程序
  • 如何每周日运行 crontab 作业

    我想弄清楚如何每周周日运行 crontab 作业 我认为以下应该可行 但我不确定我是否理解正确 下面的说法正确吗 5 8 6 这是 crontab 格式的解释 1 Entry Minute when the process will be
  • Docker容器内的动态监听端口

    我有一个应用程序 在使用其默认端口建立一些连接后 开始打开 侦听 新的随机端口来处理现有连接 然后删除它们 视频通话 它还在通信协议内交换其IP地址和端口 我能够解决IP地址问题 但仍然无法找到一种方法来动态告诉主机的IPTABLES在Do
  • 如何在Linux中获取带有图标的活动应用程序

    我想找到一种方法获取活动应用程序的列表及其名称和图标 实际上 我正在使用此命令来获取所有活动进程 wmctrl lp 示例输出 0x03800002 0 3293 user notebook XdndCollectionWindowImp
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • C:运行系统命令并获取输出? [复制]

    这个问题在这里已经有答案了 我想在 Linux 中运行一个命令并获取其输出内容的返回文本 但我do not想要将此文本打印到屏幕上 有没有比制作临时文件更优雅的方法 你想要 popen http linux die net man 3 po
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 如何从内部找到C++ Linux程序的完整路径?

    我有这个要求 我需要从内部找到 C 程序的完整路径 对于Windows 我有以下解决方案 argv 0 可能包含也可能不包含完整路径 但我需要确定 TCHAR drive MAX DRIVE dir MAX DIR base MAX FNA
  • 检测后台操作

    在C中 检测程序在 后台模式 下调用的方法是什么 我有一个程序想要以交互方式或在后台启动 我怎样才能检测到我不应该从标准输入读取并以 已停止 tty 输入 状态结束 我应该测试 stdin 是否已关闭 我怎样才能做到这一点 编辑 isatt
  • 如何在 arago 项目构建中编写自己的食谱包

    我如何在 arago 项目构建中编写自己的食谱包 我知道它可以是 bitbake 文件 但我怎么写 不知道 我在互联网上搜索 但未能找到任何好的来源 有人可以给我提供链接或示例来开始吗 RegardsLinux 学习者 使用 Bitbake
  • 导入错误:没有名为“tensorrt”的模块

    我使用 Debian 安装在我的虚拟机上安装了 TensorRT 如果我运行 dpkg l grep TensorRT 我会得到预期的结果 ii graphsurgeon tf 5 0 2 1 cuda10 0 amd64 GraphSur
  • 设置 nginx 具有多个 IP

    我的 nginx 配置文件位于 etc nginx sites available 下 有两个上游说 upstream test1 server 1 1 1 1 50 server 1 1 1 2 50 upstream test2 ser

随机推荐

  • STC15单片机实战项目 - PCB设计

    PCB设计 一 设计文件链接 1 PADS9 5格式PCB设计文件 gt Project STC15 V1 0 pcb 2 AltiumDesigner格式PCB设计文件 gt Project STC15 V1 0 PcbDoc 二 获取开
  • 【python爬虫专项(23)】利用Selenium实现网页账号登录(以豆瓣网为例)

    案例网页 https book douban com 1 找到 登陆 注册 的标签 并click 输入对应代码如下 log in browser find element by xpath id db global nav div div
  • Mac os更新系统后安装scrapy报错error: command ‘xcrun‘ failed with exit status 1

    查看报错信息 In file included from src twisted test raiser c 4 In file included from Library Developer CommandLineTools Librar
  • 14 C语言进阶自定义类型详解

    自定义类型 结构体 枚举 联合 大纲 结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段 位段的填充 可移植性 枚举 枚举的定义 枚举的优点 枚举的使用 联合 联合类型的定义 联合的
  • 敏捷测试的“三板斧“

    什么是三板斧 可灰度 任何变更 都必须是可以灰度的 即控制变更的生效范围 先做小范围变更 验证通过之后才扩大范围 可监控 在灰度的过程中 必须能做到可监控 能了解到变更之后对系统的应用 可回滚 当通过监控发现变更后会引发问题时 还需要有方法
  • 八进制数的表达方法!八进制数在转义符中的使用!

    C C 语言中 如何表达一个八进制数呢 如果这个数是 876 我们可以断定它不是八进制数 因为八进制数中不可能出7以上的阿拉伯数字 但如果这个数是123 是567 或12345670 那么它是八进制数还是10进制数 都有可能 所以 C C
  • Spring学习笔记 搭建环境

    现在开始我们就要开始学习Spring框架了 首先要做的事情就是搭建Spring环境 为了让我们关注于Spring的功能 我在这里使用Spring Initializer 它会自动为我们创建一个包含了Spring依赖的项目 让我们能直接快速开
  • 试题 算法训练 二进制数数

    问题描述 给定L R 统计 L R 区间内的所有数在二进制下包含的 1 的个数之和 如5的二进制为101 包含2个 1 输入格式 第一行包含2个数L R 输出格式 一个数S 表示 L R 区间内的所有数在二进制下包含的 1 的个数之和 样例
  • linux 防火墙打开5432 端口,在ubuntu上打开端口5432

    我试图使用ufw使用sudo ufw allow 5432 tcp在ubuntu上打开端口5432 然后我使用nmap来查看端口5432是否已打开 我得到了这个 root domain sudo nmap sS O 127 0 0 1 St
  • Linux部署kettle并设置定时任务

    一 安装Kettle linux中使用kettle时首先需要jdk环境 这里就不概述linux中jdk的安装与配置了 1 首先将kettle压缩包放入linux并解压 unzip data integration zip kettle安装路
  • C++:理解this指针

    详情见 gt https blog csdn net keneyr article details 111758870
  • STM32 DAC 学习笔记

    本文基于SYM32F4 部分参数说明参考标准库 DAC简介 作用就是把输入的数字编码 转换成对应的模拟电压输出 DAC 可以按 8 位或 12 位模式进行配置 并且可与 DMA 控制器配合使用 在 12 位模式下 数据可以采用左对齐或右对齐
  • ASP.NET MVC Note1

    学习ASP NET MVC第一件事应该就是Route 下面的图摘自的Dino的书 由此粗略的学习可以归结于理解Routing Http Module和Http Handler Route Handler是Route Module的一部分 p
  • GAMES101回顾 -- Shading

    Shading 定义 将材质作用于对象的流程 Z Buffer 帧缓存 Frame Buffer Frame Buffer是一个用于存储图像像素数据的内存区域 它通常由一个二维数组表示 每个元素对应屏幕上的一个像素 Frame Buffer
  • c语言任意两个整数相减_c语言 大整数相减

    include include include include cin输入cout输出usingnamespacestd intmain void inta b c d e o f 210 0 h 210 0 g 210 0 include
  • Unity3D 中旋转和变换

    Transform 变换 是场景中最常打交道的类 用于控制物体的位移 旋转 缩放等功能 Transform Class inherits from Component IEnumerable Position rotation and sc
  • 小程序 bindtouchmove 使用拖动按钮 页面跟着滑动并拖动卡顿感 问题

    修改 bindtouchmove buttonMove 为 catchtouchmove buttonMove 使用touchmove监听滑动要更新视图层 导致动画卡顿 阻止冒泡可以解决
  • centos7下javac:未找到命令

    如果你配置了jdk的环境变量之后 如果输入javac 报下面错误 则你可以在终端使用命令 yum install java devel 完美解决
  • Monaco-Editor在Vue中使用(实现代码编辑与diff代码比较)

    Monaco在线代码编辑器使用总结 1 什么是Monaco Monaco编辑器是为VS代码提供支持的代码编辑器 官方API文档 2 Monaco Editor安装及使用 2 1安装 npm install monaco editor sav
  • Eu63-Collecter Euromap63协议采集接口实现

    Eu63 Collecter Euromap63协议采集接口实现 项目仓库 https github com tang0 0 Eu63 Collecter Euromap 63协议认识 https blog csdn net lblmlms