深入了解Modbus TCP协议:介绍、原理解析与应用示例
深入了解Modbus TCP协议:介绍、原理解析与应用示例
在工业自动化领域,设备之间的通信与数据交换至关重要。Modbus协议作为一种经典的通信协议,因其简单、开放和易于实现的特点,被广泛应用于各种工业设备之间的数据传输。而Modbus TCP则是Modbus协议的一个重要变体,基于以太网实现了更高效的通信。本文将全面介绍Modbus TCP协议,解析其工作原理,并通过实际示例展示其应用。
一、Modbus TCP协议介绍
1.1 什么是Modbus TCP
Modbus TCP(也称为Modbus TCP/IP)是Modbus协议的一个变种,基于TCP/IP协议栈在以太网上进行通信。它继承了Modbus协议的所有优点,同时利用以太网的高带宽和稳定性,提供更快速和可靠的数据传输。
1.2 Modbus TCP与其他Modbus变体的区别
Modbus协议有多种实现方式,包括:
- Modbus RTU:基于串行通信(如RS-485),数据传输效率较低,适用于点对点或点对多点的简单网络。
- Modbus ASCII:同样基于串行通信,但使用ASCII码表示数据,便于调试,但效率更低。
- Modbus TCP:基于以太网,支持更高的数据传输速率和更复杂的网络拓扑。
与传统的Modbus RTU相比,Modbus TCP消除了串行通信的限制,支持更大的网络规模和更高的数据传输速度,适用于现代工业自动化系统。
1.3 应用场景
Modbus TCP广泛应用于以下场景:
- 工业自动化控制系统
- 能源管理系统
- 智能制造与工业物联网(IIoT)
- 建筑自动化系统
二、Modbus TCP协议原理解析
2.1 通信模型
Modbus TCP采用客户端-服务器(Master-Slave)的通信模型。客户端发起请求,服务器响应请求。一个网络中可以有多个客户端和服务器,服务器通常是PLC、传感器、仪表等工业设备。
2.2 数据传输方式
Modbus TCP基于TCP协议,采用面向连接的通信方式。通信过程包括建立连接、数据传输和断开连接。数据传输过程中,客户端和服务器通过TCP端口(默认502)进行数据交换。
2.3 报文结构
Modbus TCP的报文由两部分组成:
- MBAP头(Modbus Application Protocol Header)
- PDU(Protocol Data Unit)
2.3.1 MBAP头
MBAP头包含7个字节,用于管理传输层的数据。具体结构如下:
- 事务标识符(Transaction Identifier):2字节,用于匹配请求和响应。
- 协议标识符(Protocol Identifier):2字节,固定为0,表示Modbus协议。
- 长度字段(Length Field):2字节,表示后续PDU的长度。
- 单元标识符(Unit Identifier):1字节,用于识别设备,特别在串行通信中用于区分不同的从设备。
2.3.2 PDU
PDU包含功能码和数据部分。
- 功能码(Function Code):1字节,指示请求的操作类型。
- 数据(Data):变长,根据功能码不同,数据内容和长度不同。
2.4 常用功能码
以下是一些常用的Modbus TCP功能码:
- 01:读取线圈状态(Read Coils)
- 02:读取离散输入(Read Discrete Inputs)
- 03:读取保持寄存器(Read Holding Registers)
- 04:读取输入寄存器(Read Input Registers)
- 05:写单个线圈(Write Single Coil)
- 06:写单个寄存器(Write Single Register)
- 15:写多个线圈(Write Multiple Coils)
- 16:写多个寄存器(Write Multiple Registers)
2.5 数据映射
Modbus协议通过地址映射实现数据的读写。主要包括:
- 线圈(Coils):用于表示单个位的输出量(如继电器状态)。
- 离散输入(Discrete Inputs):用于表示单个位的输入量(如开关状态)。
- 保持寄存器(Holding Registers):用于存储16位的读写数据(如设定值)。
- 输入寄存器(Input Registers):用于存储16位的只读数据(如传感器读数)。
每种数据类型都有相应的地址范围,客户端可以通过功能码访问特定的地址范围。
三、Modbus TCP的实现与使用
3.1 硬件与软件要求
实现Modbus TCP通信需要以下硬件与软件:
- 以太网设备:支持以太网通信的PLC、传感器、服务器等。
- 网络连接:局域网或工业以太网。
- 开发环境:支持网络编程的编程语言,如Python、C#、Java等。
- Modbus库:如Python的
pymodbus
库,简化Modbus通信的实现。
3.2 使用Python实现Modbus TCP客户端与服务器
下面以Python为例,介绍如何使用pymodbus
库实现Modbus TCP客户端和服务器。
3.2.1 安装pymodbus库
首先,需要安装pymodbus
库:
pip install pymodbus
3.2.2 实现Modbus TCP服务器
以下代码实现一个简单的Modbus TCP服务器,模拟一些线圈和寄存器的数据。
from pymodbus.server.sync import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSlaveContext, ModbusServerContext# 配置数据存储
store = ModbusSlaveContext(di=ModbusSequentialDataBlock(0, [0]*100), # 离散输入co=ModbusSequentialDataBlock(0, [0]*100), # 线圈hr=ModbusSequentialDataBlock(0, [100]*100), # 保持寄存器ir=ModbusSequentialDataBlock(0, [200]*100) # 输入寄存器
)
context = ModbusServerContext(slaves=store, single=True)# 配置设备身份
identity = ModbusDeviceIdentification()
identity.VendorName = 'Pymodbus'
identity.ProductCode = 'PM'
identity.VendorUrl = 'http://github.com/riptideio/pymodbus/'
identity.ProductName = 'Pymodbus Server'
identity.ModelName = 'Pymodbus Server'
identity.MajorMinorRevision = '1.0'# 启动服务器
StartTcpServer(context, identity=identity, address=("0.0.0.0", 5020))
上述代码启动了一个监听在5020端口的Modbus TCP服务器,初始化了一些离散输入、线圈和寄存器的数据。
3.2.3 实现Modbus TCP客户端
以下代码实现一个Modbus TCP客户端,连接到服务器并读取保持寄存器的数据。
from pymodbus.client.sync import ModbusTcpClient# 连接到服务器
client = ModbusTcpClient('127.0.0.1', port=5020)
connection = client.connect()
if connection:print("连接成功")# 读取保持寄存器,从地址0开始,读取10个寄存器result = client.read_holding_registers(address=0, count=10, unit=1)if not result.isError():print("保持寄存器数据:", result.registers)else:print("读取保持寄存器失败:", result)# 写单个寄存器write_result = client.write_register(address=1, value=123, unit=1)if not write_result.isError():print("写入单个寄存器成功")else:print("写入单个寄存器失败:", write_result)# 读取修改后的寄存器result = client.read_holding_registers(address=1, count=1, unit=1)if not result.isError():print("修改后的寄存器数据:", result.registers)else:print("读取修改后的寄存器失败:", result)# 关闭连接client.close()
else:print("连接失败")
代码解析:
- 连接服务器:使用
ModbusTcpClient
连接到服务器的IP和端口。 - 读取保持寄存器:调用
read_holding_registers
方法,从地址0开始读取10个寄存器的值。 - 写单个寄存器:调用
write_register
方法,向地址1写入值123。 - 读取修改后的寄存器:再次读取地址1的寄存器,验证写入是否成功。
- 关闭连接。
3.3 常见问题与调试
在实际应用中,可能会遇到以下问题:
- 连接失败:检查服务器是否启动,IP地址和端口是否正确,网络是否通畅。
- 读写失败:检查功能码是否正确,访问的地址是否在合法范围内,设备是否支持相应的操作。
- 数据不一致:确保客户端和服务器的数据映射一致,避免地址偏移或数据类型错误。
使用网络抓包工具(如Wireshark)可以帮助分析Modbus TCP报文,定位通信问题。
四、结语
Modbus TCP凭借其简单性、开放性和高效性,成为工业自动化领域中广泛应用的通信协议。通过本文的介绍与示例,相信您对Modbus TCP有了更深入的了解,并能够在实际项目中灵活应用。随着工业物联网的发展,Modbus TCP将在更复杂和多样化的应用场景中发挥重要作用,助力工业自动化的智能化升级。
相关文章:
深入了解Modbus TCP协议:介绍、原理解析与应用示例
深入了解Modbus TCP协议:介绍、原理解析与应用示例 在工业自动化领域,设备之间的通信与数据交换至关重要。Modbus协议作为一种经典的通信协议,因其简单、开放和易于实现的特点,被广泛应用于各种工业设备之间的数据传输。而Modbus…...
vue2 项目中实现动态代理,服务器上通过nginx部署 实现动态代理
一、前言&&原理 前言:vue2 项目中,请求接口是从表格的当前获取的,也就是接口ip:端口号:路经不确定,要实现点击表格当前行请求对应的接口 实现原理:将实际要请求的ip等信息存在请求头中,用的时候再…...
OpenGL 几何着色器高级应用
几何着色器高级应用 概念回顾 几何着色器(Geometry Shader)是 OpenGL 管线中的可选着色器阶段,位于顶点着色器(Vertex Shader) 和光栅化阶段 之间。 其核心功能是基于输入的图元(如点、线或三角形),生成新的图元,或对输入的图元进行修改。 几何着色器的执行是以图元…...
QT JSON文件解析
参考博客 https://blog.csdn.net/cpp_learner/article/details/118421096 1 打开文件,读取全部内容 QFile file("../Json/js.json"); if (!file.open(QFile::ReadOnly | QFile::Text)) {qDebug() << "cant open error!";return; }// 读…...
c++中string字符串与其他类型的转换
一、string 转换成其他类型 1、转换为整数 使用std::stoi(适用于int)、std::stol(适用于long)、std::stoll(适用于long long)、std::stoul(适用于unsigned long)和std::stoull&…...
aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务
aws(学习笔记第十七课) SQS Amazon Simple Queue Service服务 学习内容: 使用SQS Amazon Simple Queue Service服务整体代码(nodejs的通常工程)代码动作 1. 使用SQS Amazon Simple Queue Service服务 利用应用程序来学习SQS 创建S3$ aws s…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)
1.问题描述: 在AGC中,推送服务的消息回执新建成功后,有一个有效期 1,这个有效期是什么意思,过期后,会影响什么呢? 2,这个有效期是否可以修改成一直不过期? 解决方案&…...
mysql 的 binlog 原理
binlog的作用:binlog的三种格式Statement-Based Replication (SBR):Row-Based Replication (RBR):Mixed-Based Replication (MBR): 总结:如何选择:如何配置binlog? binlog的作用: 数据恢复: 如果mysql的数据丢失了,又没有备份数…...
Android显示系统(10)- SurfaceFlinger内部结构
一、前言: 之前讲述了native层如何使用SurfaceFlinger,我们只是看到了简单的API调用,从本文开始,我们逐步进行SurfaceFlinger内部结构的分析。话不多说,莱茨狗~ 二、类图: 2.1、总体架构: 先看下SurfaceFlinger的关键成员和我们BootAnimation侧关键成员如何对应起来…...
独家首发 | 基于多级注意力机制的并行预测模型
往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享! EMD变体分解效果最好算法——CEEMDAN(五)-CSDN博客 拒绝信息泄露!VMD滚动分…...
Burp suite2 (泷羽sec)
声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面,了解网络安全领域的见闻,了…...
npm或yarn包配置地址源
三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装:yarn install 注意…...
Referer头部在网站反爬虫技术中的运用
网站数据的安全性和完整性至关重要。爬虫技术,虽然在数据收集和分析中发挥着重要作用,但也给网站管理员带来了挑战。为了保护网站数据不被恶意爬取,反爬虫技术应运而生。本文将探讨HTTP头部中的Referer字段在反爬虫技术中的应用,并…...
Next.js授权管理教程:深入掌握Session管理
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 引言 1. Session管理的基本概念 1.1 什么是Session管理? 1.2 Session与Cookie 1.3 使用Session的优点 2. 在Next.js中管理Session 2.1 使用cookie存储Se…...
Python+OpenCV系列:滤波器的魔力
滤波器是图像处理领域中不可或缺的工具。无论是去除噪声、锐化图像还是提取特征,滤波器都扮演着重要角色。本篇将从简单到复杂,带你快速掌握 PythonOpenCV 中的滤波器使用技巧。 什么是滤波器? 滤波器是一种对图像像素值进行计算、平滑或增强…...
代码随想录算法训练营day41|动态规划买卖股票问题
今天的三题买卖股票问题,实际上解题方法都大同小异,思路也和昨天的树形dp有相似之处,都是用一个dp数组的不同下标来记录不同的状态。其中第一题是只买卖一次,可以用贪心的方法,找出左边的最小值和右边的最大值…...
【EthIf目录】EthIf的文件结构
ls -R 查看目录EthIf的文件结构,包含四个目录, 一个make file文件,具体如下所示:...
Spring 面试题整理
文章目录 一、控制反转 IoC什么是 Bean 和 Spring Bean?依赖注入的常见方式?Bean 的作用域有哪些?protype bean 里面的依赖是 singleton bean 的话,IoC 容器会怎么处理?Bean 的生命周期?Resource 和 Autowi…...
Converting circular structure to JSON
最近在项目中遇到了这个问题,头疼,弄了一下午才解决。做一个笔记吧。 1 Converting circular structure to JSON 我这个问题大致就是在使用pinia中出现了循环引用,意思是两个或多个模块、对象或依赖之间形成了相互依赖的链条。在使用 Pinia…...
webstorm开发uniapp(从安装到项目运行)
1、下载uniapp插件 下载连接:Uniapp Tool - IntelliJ IDEs Plugin | Marketplace (结合自己的webstorm版本下载,不然解析不了) 将下载到的zip文件防在webstorm安装路径下,本文的地址为: 2、安装uniapp插…...
企业级包管理器之搭建 npm 私有服务器 (6)
在企业级应用开发中,常常需要处理私有包的发布和管理。搭建 npm 私有服务器是一个理想的解决方案,它不仅能保证代码的私密性,还能提供更快的下载速度和更精细的权限设置。 一、搭建 npm 私有服务器的优势 保证代码私密性:在企业…...
会议通知:人工智能通识教育与实践发展暨和鲸科技AI通识课解决方案发布会
今年秋季学期起,全国多所高校面向本科生开设人工智能通识课。 当前人工智能通识课程的建设进展主要分为三种情况: 全市统筹,由某头部高校牵头建设市级人工智能通识课,以北京市、天津市为代表; 已于秋季学期按照课程…...
windows C#-自动实现属性的轻型类
此示例演示如何创建一个不可变的轻型类,该类仅用于封装一组自动实现的属性。 当你必须使用引用类型语义时,请使用此种构造而不是结构。 可通过以下方法来实现不可变的属性: 仅声明 get 访问器,使属性除了能在该类型的构造函数中…...
汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
汽车零部件是汽车工业的基石,是构成车辆的基础元素。一辆汽车通常由上万件零部件组成,包括发动机系统、传动系统、制动系统、电子控制系统等,它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天,汽车零部件需…...
C#基础:结构
目录 1. C# 程序结构 示例: 2. 变量和数据类型 示例: 3. 控制结构 条件语句(if): 循环语句(for 和 while): 4. 函数定义和调用 示例: 5. 数组和集合 数组示例…...
[免费]SpringBoot+Vue疫苗接种预约管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue疫苗接种预约管理系统,分享下哈。 项目介绍 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在…...
C++50道经典面试题
文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 作为一种通用且面向对…...
iptables详解
华子目录 什么是防火墙分类netfilter(数据包过滤)定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...
静态链表的构建
前言: 静态链表的概述: 静态链表是一种在数组中模拟链表结构的数据结构,它通过数组的索引来模拟指针,实现节点之间的链接,就不需要使用指针了。每个节点由两部分组成:数据域和游标。数据域用于储存数据&a…...
python3中的身份运算符
一. 简介 本文简单学习一下,python3中的身份运算符。 在Python 3中,身份运算符用于比较两个对象的身份,即它们是否引用内存中的同一个对象。 二. python3 中的身份运算符 1. python3 中的身份运算符 python3 中的身份运算符如下表所示&a…...
Java泛型设计详解
引言 在日常Java开发中,泛型是一个非常重要的特性。它提供了编译时的类型安全检查,增强了代码的可读性和可维护性。然而,对于初学者甚至一些有经验的开发者来说,泛型的使用和理解仍然是一个挑战。本文旨在深入探讨Java泛型的诞生…...
第十九章程序清单合集——Java语言程序设计进阶篇(黑皮书)
目录 程序清单19_1GenericStack 程序清单19_2GenericMethodDemo 程序清单19_3BoundedTypeDemo 程序清单19_4GenericSort 程序清单19_5Max 程序清单19_6MaxUsingGenericType 程序清单19_7wildCardNeedDemo 程序清单19_8AnyWildCardDemo 程序清单19_9SuperWildChardDem…...
el-table组件树形数据修改展开箭头
<style lang"scss" scoped> ::v-deep .el-table__expand-icon .el-icon-arrow-right:before {content: ">"; // 箭头样式font-size: 16px; }::v-deep .el-table__expand-icon{ // 没有展开的状态background-color: rgba(241, 242, 245, 1);color:…...
LabVIEW前面板无法显示的常见原因
当 LabVIEW 前面板显示为白色或黑色时,可能由于控件可视性设置、显卡驱动问题、程序错误或 LabVIEW 设置不当引起。通过检查面板设置、更新驱动、重启程序等方式可有效解决此问题。 遇到前面板无法显示或显示为白色/黑色的情况,可能有以下几种原因。可以…...
PyQt事件机制练习
一、思维导图 二、代码 import sysfrom PyQt6.QtTextToSpeech import QTextToSpeech from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QLineEdit from PyQt6 import uic from PyQt6.QtCore import Qt, QTimerEvent, QTimeclass MyWidget(QWidget):d…...
Android 中,Activity Fragment:如何进行界面跳转、数据传递等
学习笔记 1. Activity 之间的界面跳转和数据传递 在 Android 中,Activity 之间的跳转通常通过 Intent 来完成。Intent 可以携带数据,并传递给目标 Activity,也可以从目标 Activity 返回数据。 从一个 Activity 跳转到另一个 Activity // 在…...
【ubuntu18.04】安装easycwmp出现/usr/bin/ld: cannot find -lubus问题解决方案
错误日志 rootw1804-virtual-machine:/opt/dev/easycwmp# make Making all in bin make[1]: Entering directory /opt/dev/easycwmp/bin gcc -DPACKAGE_NAME\"easycwmpd\" -DPACKAGE_TARNAME\"easycwmpd\" -DPACKAGE_VERSION\"1.8.6\" -DPACKAG…...
可视化建模以及UML期末复习----做题篇
一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...
【2024年浙江工商大学程序设计竞赛新生赛(同步赛)部分题解】
比赛链接 C. 交换 题目大意 给定一个长度为 n n n 的数组 a a a。一开始你有一个总和 s 0 s 0 s0。 现在你需要做 n n n 次操作,第 i i i 次操作的流程如下( 1 ⩽ i ⩽ n 1 \leqslant i \leqslant n 1⩽i⩽n): 选择一个下标 p ∈…...
[SAP ABAP] DEBUG ABAP程序中的循环语句
在ABAP程序开发中可能会遇到要DEBUG循环语句的情况,这个循环语句可能会执行上万次,但我们希望程序执行循环到100次就停下来,也就是希望DEBUG断点设置在循环语句的第100次停下来观察执行的结果,这时我们可以在DEBUG程序时通过设置一…...
解决阿里云轻量级服务器 Ubuntu 24.04.1 LTS 没网也 ping 不通 8.8.8.8 以及 route -n 没有输出任何转发信息
事情发生在两天前,位于公网的阿里云轻量级服务器(Ubuntu 24.04.1 LTS)忽然没网。主要是上次上服务器进行配置已经是一个多月前,最近也没有做什么事情,就忽然没网了,让人纳闷。更主要的是,上次备…...
AUTOSAR:SOME/IP 概念
文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统: 后座娱乐系统连接:允许后排乘客连…...
STM32--中断
中断 中断向量表 定义一段固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址。定义在启动文件中。 中断相关寄存器 内核中断不经过中断使能、除能寄存器。 中断优先级 1、抢占优先级:高高抢占优先级可以打断正在执行的低抢占优先…...
海思3559a开发
目录 固件烧录配置网络nfs挂载虚拟机文件使用telnet连接开发板 固件烧录 1、配置好HiTool烧录工具 需要注意长度必须不小于对应文件大小 2、开始烧录 先点击擦除全器件,重新给开发板上电,擦除成功后如下图所示。 点击烧写,重新给开发板上电…...
优选算法——位运算
1. 常见位运算总结 2. 判定字符是否唯一 题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 题目展示: 题目分析:本题有很多种做法,这里我们使用位图来解决,这种做法是一种效率很高…...
【JAVA】旅游行业中大数据的使用
一、应用场景 数据采集与整合:全面收集旅游数据,如客流量、游客满意度等,整合形成统一数据集,为后续分析提供便利。 舆情监测与分析:实时监测旅游目的地的舆情信息,运用NLP算法进行智能处理,及…...
使用html和JavaScript实现一个简易的物业管理系统
码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。设置字体、颜色、边距、对齐方式等样式。 JavaScript…...
浅谈Kubernetes(K8s)之RC控制器与RS控制器
1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表,并保证相应类型的Pod的数量与期望相符合,如果Pod数量过少,它会根据Pod模板创建新的副本,反之则会删除多余副本。通过RC可实现了应用服务的高可用…...
如何在 openAI Sora 上生成视频内容
近期OpenAI 推出了我们期待已久的视频生成模型 Sora。能够生成包含多个角色、特定类型的动作以及主体和背景的精确细节的复杂场景。该模型不仅了解用户在提示中要求的内容,还了解这些内容在物理世界中的存在方式。 如何在 openAI Sora 上生成视频内容 使用Sora 视频…...
【Oracle11g SQL详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等
日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。 一、SYSDATE:获…...