物联网到底如何实现万物互联?

前言:作为计算机相关专业的你,绝对听说过物联网这个词,它的解释相比你也听过,叫万物互联,也就是所谓的IOT,但是说实话它到底如何实现的万物互联的你可能还真不知道。不是每个物体都有一个网络接口或者实体接口,等着你把网络连进来,今天你看完这篇文章哪怕你不会实际操作但是起码总体的原理流程你就知道了。

一.EPC与物联网

1.EPC的产生与发展

EPC的产生和发展1999年美国麻省理工学院成立Auto-ID中心,进行RFID技术研发,通过创建RFID标准,并利用网络技术,形成EPC系统。

EPC统一对全球物品的编码方法,直到编码至单个物品 (猪肉德和罐头 10万箱 每箱产品的条码是相同的,但是每箱产品的RFID标签是不一样的)。

EPC规定了将此编码以数字信息的形式存储于附着在物品上的应答器(在EPC中常称为标签)中。

阅读器通过无线空中接口读取标签中的EPC码,并经计算机网络传送至信息控制中心,进行相应的数据处理 。

看完是不是一头雾水,别急,这里给你总结一下:

  • 1.EPC是电子产品编码技术的缩写。这是一种基于RFID技术的新技术。(是什么?)
  • 2.EPC统一了对全球物品的编码方法,可以编码至单个物体。(做什么?)

实际过程:

​ EPC规定了将此编码以数字信息的形式存储于附着在物品上的应答器(在EPC中常称为标签)中,阅读器通过无线空中接口读取标签中的EPC码,并经过计算机网络传送至信息控制中学,进行相应的数据处理、存储、显示和相互。

这么解释你是不是感觉好多了?

2.EPC系统的组成

EPC系统是在计算机互联网(Internet)的基础上,利用RFID、EPC编码、数据通信等技术,构造的一个覆盖全球万事万物的实物互联网(Internet of Things)IOT,亦称物联网

在RFID和Internet的基础上,实物互联网可以将数量更为庞大的物品建立起信息联接,为商业、物流、仓储、生产、家庭等行业和用户提供了信息化的先进管理理念和手段。

9Z8x.jpg

EPC系统的组成: 通过EPC就能找到该EPC号的web地址

  • 应答器装载有EPC编码,它应附着在物品上,亦称为标签(后面称为EPC标签或标签)。

  • 阅读器用于读或读写EPC标签,并能连接于本地网络之中。

  • Savant是连接阅读器和应用程序的软件,亦称为中间件,它是物联网中的核心技术,可认为是该网络的神经系统,故称为Savant。

  • 对象名称解析服务(ONS)的作用类似于Internet中的域名解析服务(DNS),它给Savant指明了存储产品有关信息的服务器(EPCIS)。

    知道DNS服务吗,它相当于因特网中的DNS服务: ONS:EPC—>IP DNS: 域名—>IP

  • 系统中EPC信息描述采用实体标记语言(PML),PML是在可扩展标记语言(XML)基础上发展而成,用于描述有关物品信息的一种计算机语言。

3.PML和XML

PML你不知道,但你或多或少应该知道一些XML吧,不知道可以翻看我学习XML 的笔记

XML基础学习笔记

PML (Probabilistic Modeling Language) 是一种用于描述概率模型的语言,它通常被用于机器学习和人工智能领域中。PML可以用于描述各种类型的概率模型,包括贝叶斯网络、隐马尔可夫模型、高斯混合模型等。

XML (Extensible Markup Language) 是一种用于描述数据的标记语言,它是一种可扩展的语言,可以用来创建自定义的标记。XML通常被用于存储和传输数据,例如在Web服务中使用XML格式的数据进行交换。

虽然PML和XML都被用于描述数据,但它们的目的和使用场景有所不同。PML主要用于表示概率模型,并帮助我们进行推理和预测。而XML主要用于存储和传输数据,并提供了一种结构化的方式来组织数据。

这边建议可以不管,反正和今天的主要内容关系不大,你学到后面这些就都知道了。

4.ESP系统的特点

EPC系统的主要特点如下 :

  • 采用了EPC编码方法,可以识别物品到个件
  • 信息系统的网络基础是Internet网络,将企业的Intranet,RFID和Internet有机的结合起来
  • 着眼于全球的系统
  • 目前仍需要较多的投入,对于低价值的识别对象,必须考虑由此引进的成本

二.EPC编码

1.GTIN

GTIN是全球商品条码标准,代表全球贸易项目代码(Global Trade Item Number)。它是一种数字编码,用于唯一识别商品和服务。GTIN由数字组成,长度可以是8、12、13或14个数字。其中最常见的是13位的GTIN,也被称为EAN(欧洲文章编号)或UPC(统一产品代码)。

GTIN码通常被印刷在商品包装上,可以通过扫描条形码或QR码进行读取。这使得全球范围内的供应链管理和物流变得更加高效和精确。同时,GTIN码还可以帮助消费者快速识别并比较不同品牌和型号的商品。

除了GTIN码之外,还有其他一些全球贸易项目代码,如GLN(全球定位码)、SSCC(序列运输集装箱代码)等,它们也都是为促进全球贸易和物流而设计的标准化编码系统。

要知道两点:

  • GTIN是唯一的、无含义的、多行业的、全球认可的代码。
  • GTIN有4种编码结构:EAN · UCC-13(EAN 13)、EAN · UCC-8(EAN 8)、UCC-12和EAN · UCC-14

2.平时生活的使用

  • EAN · UCC-13(标准版原印码)由厂商识别代码、商品项目代码和检验码3部分组成

9CGH.jpg

  • EAN • UCC-8由8位组成,左三位是EAN分配的前缀码,接着4位是分配给厂商的特定商品代码,最后一位是检验位

9UuG.jpg

3.EPC编码的类型和方法

目前,EPC编码有64位、96位和256位三种。 EPC编码由版本号、域名管理、对象分类和序列号四个字段组成:

  • 版本号字段标识EPC的版本号,它给出EPC编码的长度;
  • 域名管理字段标识相关的生产厂商信息;
  • 对象分类字段编码物品精确类型;
  • 序列号用于编码出唯一物品。

9iPz.jpg

4.EPC编码的性能

EPC编码的性能:

  • 唯一性:足够的编码容量和组织保证可以保证对某一个物品实现唯一编码

  • 简单性:编码简单且能实现物品的唯一标识,不包含物品的其他相关信息

  • 可扩展性:为未来的发展提供了充足的备用空间

  • 安全性:EPC编码和加密、认证技术相结合

三.EPC标签与阅读器

1.标签分类

EPC标签是一种被广泛应用于物联网领域的RFID标签。根据不同的分类方式,EPC标签可以分为以下几种类型:

  1. 按工作频率分类:EPC标签通常在低频(LF)、高频(HF)和超高频(UHF)三个频段工作。其中,低频标签通常在125KHz左右;高频标签通常在13.56MHz左右;超高频标签通常在840MHz到960MHz之间。
  2. 按存储容量分类:EPC标签的存储容量通常从几十比特到数千比特不等,因此可以按照其存储容量来分类。目前,最常见的EPC标签存储容量为96位或128位。
  3. 按封装形式分类:EPC标签可以采用多种封装形式,如贴纸式、硅片式、卡式、手环式等。
  4. 按功能分类:EPC标签还可以按照其功能进行分类。例如,有一些标签具有温度、湿度、压力、震动等传感器功能,可以用于监测物品的环境条件。还有一些标签具有加密、防伪等安全功能,可以用于确保产品的真实性和安全性。

2.Class与Gen(代)

  • Class描述的是标签的基本功能,譬如说它里面存储器情况或有无电池。

  • Gen是指标签规范的主要版本号。通常所说的第二代EPC,实际上是第二代EPC Class 1,这表明它是规范的第二个主要版本,针对拥有一次写入内存的标签。

  • EPC Class的目的是为了提供一种模块化结构,涵盖一系列众多的可能类型的标签功能。

3.EPC阅读器

应该具有下述功能和特征:

  • 空中接口功能
  • 阅读器防碰撞
  • 与计算机网络的连接

9TpT.jpg

  • 空中接口电路包括收发两个通道,包含编码、调制、解调、解码等功能,射频功率由天线辐射,并接收从标签返回的信息,空中接口电路是阅读器和标签之间交换信息的纽带。
  • 控制器可以采用微控制器(MCU)或数字信号处理器(DSP)。
  • 网络接口应具有支持以太网、无线局域网(IEEE 802.11)等网络联接方式,这也是EPC阅读器的重要特点。

4.中间件

核心功能是屏蔽不同厂家的RFID阅读器等硬件设备、应用软件系统以及数据传输格式之间的异构性,从而可以实现不同的硬件(阅读器等)与不同应用软件系统间的无缝连接与实时动态集成。

  • 程序模块集成器:由多个程序模块组成。
  • 阅读器接口:阅读器接口提供与阅读器的连接方法,并采用相应的通信协议。
  • 应用程序接口:程序模块和应用程序的接口。
  • 程序模块之间的接口:用自己定义的API(应用程序接口)函数实现。
  • 网络访问接口

四.ONS(对象名称解析服务)

1.对象名称解析服务

ONS: EPC<–>EPCIS(IP) DNS:域名<–>WEB(IP)

1.2.24.400 <----> 24.21.1.ONSROOT.ORG

在EPC系统中,需要将EPC编码与相应的商品信息相匹配,而相应的商品信息存储在对应的EPCIS服务器中,ONS服务提供与EPC编码对应的EPCIS服务器的地址,它的作用类似于因特网的域名解析服务。

9u74.jpg

阅读器将读到的EPC编码通过本地局域网上传至本地服务器,由本地服务器所带Savant软件对这些信息进行集中处理,然后由本地服务器通过查找本地ONS服务或通过路由器到达远程ONS服务器查找所需EPC编码对应的EPCIS服务器地址,本地服务器就可以和找到的EPCIS服务器进行通信了。

2.具体实现过程

96tv.jpg

通过EPC号找到该EPC号商品信息存放的web地址(EPC号转换成一个物联网上可以寻址的网址)

五.编码预备知识

1.join()函数

join() 是 Python 字符串对象的内置方法,用于将一个可迭代对象(例如列表、元组等)中的元素连接成一个字符串。其语法如下:

str.join(iterable)

其中,str是指定要使用的分隔符,即要把可迭代对象中的元素连接起来的字符串;iterable则是指定要连接的可迭代对象。

具体来说,join() 方法会在 iterable 中的每个元素之间插入 str 分隔符,并返回连接起来的新字符串。需要注意的是,这里的元素必须都是字符串类型,否则程序会因为数据类型不匹配而出错。

举个例子,如果我们有一个列表 my_list,它包含若干个字符串类型的元素,那么可以像下面这样使用 join() 方法将它们连接成一个新的字符串:

my_list = ['hello', 'world', 'how', 'are', 'you']
new_string = '-'.join(my_list)
print(new_string)  # 输出:"hello-world-how-are-you"

在上面的例子中,join() 方法使用了 - 作为分隔符,把列表中的所有字符串连成了一个新字符串。

2.split()函数

split() 函数是 Python 内置的字符串方法,用于将字符串按照指定的分隔符分割成一个列表。

它的语法如下:

str.split(sep=None, maxsplit=-1)

其中,sep 参数是可选的分隔符,默认为 None,表示使用空白字符(空格、制表符、换行符等)作为分隔符。如果指定了分隔符,则会按照该分隔符来对字符串进行分割。

maxsplit 参数也是可选的,表示最多分割几次。默认为 -1,表示不限制分割次数。

例如:

s = "Hello,world!"
print(s.split())      # ['Hello,world!']
print(s.split(','))   # ['Hello', 'world!']
print(s.split('o'))   # ['Hell', ',w', 'rld!']
print(s.split('l', 1))# ['He', 'lo,world!']

以上代码中,第一个 split() 没有指定分隔符,因此返回包含整个字符串的列表;第二个 split() 使用逗号作为分隔符,返回两个元素的列表;第三个 split() 使用字母 o 作为分隔符,返回四个元素的列表;第四个 split() 使用字母 l 作为分隔符,并且最多只分割一次,返回两个元素的列表。

3.反转列表

reversed_numbers = int_number[:-1][::-1]

反转列表在LeetCode题目中经常用到,[::-1]表示反转列表的用法,不要问为什么,当作一个函数使用就行,这个“函数”的返回值是一个反转后的新列表,前面的[:-1]不解释了,表示切片,不要最后一个元素。

六.完整编码及结果

1.python编码

# 判断epc类型并转化为点十进制格式返回
def judgment(epc0b, code_type):
    length = len(epc0b)
    #version_type表示版本号
    version_type1 = int(epc0b[:2], 2)
    version_type2 = int(epc0b[:8], 2)
    if length == 64 and version_type1 == 1:
        return transform(epc0b, code_type[0])
    if length == 64 and version_type1 == 2:
        return transform(epc0b, code_type[1])
    if length == 64 and version_type1 == 3:
        return transform(epc0b, code_type[2])
    if length == 96:
        return transform(epc0b, code_type[3])
    if length == 256 and version_type2 == 1:
        return transform(epc0b, code_type[4])
    if length == 256 and version_type2 == 2:
        return transform(epc0b, code_type[5])
    if length == 256 and version_type2 == 3:
        return transform(epc0b, code_type[6])


# 根据epc类型返回十进制格式
def transform(epc0b, code_type):
    results = []
    flag = 0
    # 按位置和位数将二进制转多个十进制,并用.隔开
    for i in code_type:
        temp = int(epc0b[flag:flag + i], 2)           #指定这是2进制形式表示的字符串
        flag += i
        results.append(temp)
    return ".".join(str(i) for i in results)    #str(i)表示把每个整数元素变为字符串型


# 根据十进制格式返回最后的URL
def address(class_ip, suffix_name):
    str_numbers = class_ip.split('.')
    int_number = [int(num) for num in str_numbers]
    print(f"序列号:{int_number[-1]}")
    # 去除序列号,并将整个列表反转
    reversed_numbers = int_number[:-1][::-1]
    # 合并后缀为最终URL地址
    string = ".".join(str(temp) for temp in reversed_numbers) + suffix_name
    return string


# --------------------------------------------数据准备------------------------------------------
code = (
    (2, 21, 17, 24), (2, 15, 13, 34), (2, 26, 13, 23), (8, 28, 24, 36), (8, 32, 56, 160), (8, 64, 56, 128),
    (8, 128, 56, 64))
test = '0100000000000000000001000000000000011000000000000000000110010000'
suffix = ".onsroot.org"
# ----------------------------------------------测试----------------------------------------------
result = judgment(test, code)
url = address(result, suffix)
print(result)
print("ONS解析得到URL:",url)


2.运行结果

9XKq.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/32383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++primer(第五版)第三章(字符串、向量和数组)

本章主要介绍了字符串和vector以及数组&#xff0c;但是vector和数组差不多甚至比数组更加强大&#xff0c;完全可以用vector来代替数组&#xff0c;所以尽管书中有介绍数组&#xff0c;但我也不过多记录&#xff0c;有兴趣的小伙伴可以自行查看原书。 3.1命名空间的using声明…

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项&#xff1f; 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…

【二】构造函数和原型

ES6&#xff08;ECMAScript 6.0&#xff09;之前js没有引入类的概念 在ES6之前&#xff0c;对象不是基于类创建的&#xff0c;而是用一种称为构建函数的特殊函数来定义对象和它们的特征 ES6之前创建对象可以通过以下三种方式创建对象&#xff1a; 对象字面量&#xff1a; v…

【Spring AOP】面向切面编程,面向切面编程是面向对象编程的孪生兄弟嘛?且听我细细道来! ! !

前言: 大家好,我是良辰丫,面向切面编程和面向对象编程是两种几乎不同的编程方式,并不是所谓的孪生兄弟,但是我们可以说面向切面编程是面向对象编程的一种补充和完善,到底是什么意思呢?请跟随良辰的步伐往下瞧! ! !&#x1f48c;&#x1f48c;&#x1f48c; &#x1f9d1;个人主…

TypeScript ~ 掌握基本类型 ①

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

Redis原理 - IO详解

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis原理 - IO详解 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-IO.html 用户空间与内核空间 任何Linux 系统的发行版&#xff0c;其系统内核都是 Linux 。我们的应用都需要通过 Linux 内核与硬…

怎么给PDF添加图片水印?其实很简单,看这篇就会了!

许多人都意识到版权问题的重要性&#xff0c;尽管在日常生活中我们可能很少遇到&#xff0c;但在办公和学习中却经常涉及到此类问题。例如&#xff0c;我们辛辛苦苦制作的PDF文件&#xff0c;如何确保不被他人盗用呢?这就涉及到如何为PDF添加图片水印的问题&#xff0c;相当于…

经典基于外观的SLAM框架-RTABMAP(RGBD视觉输入方案)

经典基于外观的SLAM框架-RTABMAP 文章目录 经典基于外观的SLAM框架-RTABMAP1. RTABMAP整体框架2.RTABMAP的内存管理机制3. 视觉里程计4. 局部地图5. 回环检测与图优化6. 代码工程实践 1. RTABMAP整体框架 RTABMAP是采用优化算法的方式求解SLAM问题的SLAM框架&#xff0c;本赛题…

【python 第三方库安装换源】

换源&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/其他国内第三方库的下载源地址&#xff1a; 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple/ 科技大学&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣&a…

Vue实例知识点分享

文章目录 导文下面是创建 Vue 实例的基本步骤 常用的 Vue 实例方法和属性总结 导文 Vue的实例是用来创建 Vue 应用程序的对象。通过实例化 Vue 构造函数&#xff0c;我们可以创建一个具有响应式数据、计算属性、方法和生命周期钩子等特性的 Vue 实例。 下面是创建 Vue 实例的基…

python技术分享

文章目录 python介绍应用领域环境搭建基础知识编程工具变量基本数据类型容器数据类型程序结构运算符函数类 技巧总结python内存管理python常用技术python的缺陷优化python的编码规范提升性能总结 python介绍 弱类型的语言 声明一个变量&#xff0c;直接赋值即可&#xff0c;简…

Android强大的原生调试工具adb的常用命令

文章目录 ADB简介常用命令列出链接的设备进入设备的shell环境设备日志安装应用程序卸载应用程序将本地文件复制到调试设备上将设备上的文件拉取到本地启动程序强制停止程序运行截图屏幕录制列出调试设备所有的应用的报名 结语 ADB简介 ADB&#xff08;Android Debug Bridge&am…

【从零开始学习JAVA | 第二十一篇】常见API介绍 System

目录 前言&#xff1a; System&#xff1a; System类中静态方法&#xff1a; 总结&#xff1a; 前言&#xff1a; system 是一个很底层的 API&#xff0c;是一个工具类&#xff0c;提供了一些与系统相关的方法。他在我们写项目的时候提供了一些非常实用的方法&#xff0c;本…

量子机器学习Variational Quantum Classifier (VQC)简介

变分量子分类器&#xff08;Variational Quantum Classifier&#xff0c;简称VQC&#xff09;是一种利用量子计算技术进行分类任务的机器学习算法。它属于量子机器学习算法家族&#xff0c;旨在利用量子计算机的计算能力&#xff0c;潜在地提升经典机器学习方法的性能。 VQC的…

优化--分类树,我从2s优化到0.1s

1.前言 分类树查询功能&#xff0c;在各个业务系统中可以说随处可见&#xff0c;特别是在电商系统中。 但就是这样一个简单的分类树查询功能&#xff0c;我们却优化了5次。 到底是怎么回事呢&#xff1f; 2.背景 我们的网站使用了SpringBoot推荐的模板引擎&#xff1a;Thym…

【Python实战】Python采集情感音频

成年人的世界真不容易啊 总是悲伤大于欢喜 爱情因为懵懂而快乐 却走进了复杂和困惑的婚姻 前言 我最近喜欢去听情感类的节目&#xff0c;比如说&#xff0c;婚姻类&#xff0c;我可能老了吧。我就想着怎么把音乐下载下来了&#xff0c;保存到手机上&#xff0c;方便我们业余时…

Jnpf低代码开发平台

一、写在前面 低代码开发平台&#xff0c;一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。 很多人或许都隐隐听说过低代码&#xff0c;因为低代码不仅远名国外&#xff0c;国内的腾讯、阿里、华为、网易、百度等科技巨头也纷纷入局&#xff0c;足以…

URL到页面: 探索网页加载的神秘过程

当我们从浏览器的地址栏输入 URL, 按下回车, 再到最后出现需要的网页界面, 这中间究竟发生了什么, 接下来就一步步进行解析. 主要是如下过程: 输入网址DNS 解析客户端发送 HTTP 请求建立 TCP 连接服务器处理请求, 计算响应, 返回响应浏览器渲染页面关闭连接 本篇中只是概述整…

docker 操作手册

名词解释 images&#xff1a;封装了应用程序的镜像 tag&#xff1a;镜像的标记&#xff0c;一个镜像可以创建多个标记 container&#xff1a;装载镜像并运行 常用命令 查看容器 docker ps -a //查看全部镜像 启动容器 docker start mysql //启动mysql容器 停止容器 doc…

Maven(三):Maven的组成详解

文章目录 坐标和依赖坐标详解依赖配置依赖范围传递性依赖依赖调节可选依赖优化排除依赖归类依赖优化依赖 仓库本地仓库远程仓库仓库镜像常用搜索地址 生命周期与插件三套生命周期clean生命周期default生命周期site生命周期 插件 聚合与继承更加灵活的构建常见问题使用jdk来运行…