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协议采集接口实现 的相关文章

随机推荐

  • 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