Java调用piapi32.dll动态库实现PI数据库2.x版本数据读写实战

Java调用PI API动态库实现PI数据库2.x版本数据读写实战 本文详细介绍了在Java环境中通过JNA调用PI API动态库(piapi32.dll)连接并操作PI数据库2.x版本的实战方法。内容涵盖环境配置、项目搭建、核心的数据读写操作(如获取快照与写入数据)、关键的数据类型与时间处理,以及性能优化和错误处理建议,为工业领域遗留系统集成提供了可靠的本地方案。 阅读详情

1. 为什么选择JNA调用piapi32.dll?

最近在做一个工业数据采集项目,客户现场有一套老旧的PI数据库系统,版本是2.x的。刚开始接到这个需求时,我心想这还不简单,直接用PI官方推荐的PI Web API或者JDBC驱动不就行了?结果一调研就傻眼了。PI Web API只支持3.x以上的版本,客户这套老系统根本用不了。至于PI JDBC Driver,理论上可行,但它需要额外安装和配置一个叫PI SQL Data Access Server的中间件,客户现场环境复杂,审批流程漫长,而且那个DAS服务对资源占用也不小,在客户那台老服务器上部署风险太大。

折腾了一圈,最后发现唯一靠谱的路子,就是直接调用PI官方提供的那个古老的piapi32.dll动态链接库。这个方法虽然听起来有点“复古”,但却是直连PI数据库2.x版本最稳定、最轻量的方案。它不需要任何中间件,只需要一个DLL文件,通过C语言的接口直接和PI服务器通信,效率非常高。当然,代价就是我们需要在Java里和C语言打交道,处理令人头疼的指针、内存和数据类型映射问题。

这就像你要和一个只会说方言的老工匠沟通,PI Web API是配备了标准翻译的现代方法,但老工匠听不懂。而piapi32.dll就是那本原始的方言词典,虽然用起来麻烦点,但能确保你们沟通无误。对于维护或集成这些遗留系统的开发者来说,掌握这套“方言”是必不可少的技能。接下来,我就把踩过坑、趟过雷之后总结出来的实战经验,手把手分享给你。

2. 环境准备与核心依赖

2.1 必须匹配的“三件套”

调用piapi32.dll成功与否,90%取决于环境是否配置正确。这里面有三个关键点,一个都不能错,我称之为“三件套”。

第一,操作系统必须是Windows。 piapi32.dll是一个标准的Windows动态链接库,所以你的Java程序必须运行在Windows环境上。Linux或Mac就别想了,这是硬性限制。我建议直接在部署PI数据库的服务器上,或者同一内网的另一台Windows机器上运行你的Java应用。

第二,Java必须是32位版本。 这是最容易踩坑的地方!piapi32.dll是32位的库,64位的JVM无法加载它。你会遇到类似UnsatisfiedLinkError的错误。怎么检查?在命令行输入 java -version,如果输出里有“64-Bit”字样,那就得换。你需要去Oracle官网下载一个老版本的jdk1.8uXX的32位安装包。别用太高版本的JDK,1.8的兼容性最好。安装后,记得在IDE(如IDEA)里和系统环境变量JAVA_HOME中,都指向这个32位JDK的路径。

第三,获取正确的piapi32.dll和头文件。 这个库文件通常不随PI客户端安装包默认提供,需要单独寻找。原始文章里提到了两个优快云的下载地址,你可以作为备选。但我更推荐的做法是,联系你们的PI系统管理员或OSIsoft原厂支持,获取官方的piapi32.dll以及配套的piapi.h头文件。头文件piapi.h至关重要,里面定义了所有可用的函数原型、参数类型和常量,是我们进行JNA映射的“说明书”。拿到DLL后,把它放到一个固定的路径,比如 C:\PIAPI\,或者直接放在你的Java项目的根目录下。为了方便,我通常还会把它放到Windows的系统路径(如C:\Windows\System32)下,这样JNA就能直接按库名找到了。

2.2 引入JNA依赖

Java调用本地库,我们选用JNA(Java Native Access)。它比传统的JNI(Java Native Interface)友好太多了,不需要写繁琐的C代码编译生成中间库,直接用Java接口声明就能映射。在Maven项目中,加入以下依赖:

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.13.0</version> <!-- 可以使用较新的稳定版本 -->
</dependency>

如果你用的是Spring Boot项目,直接加进去就行。JNA会帮你处理本地库的加载和内存管理,省心不少。这里版本我用的是5.13.0,比原始文章的5.5.0更新,经过测试完全兼容。

3. 从零开始构建JNA接口映射

3.1 理解映射的核心:接口声明

一切的核心在于创建一个Java接口,这个接口将作为piapi32.dll在Java世界里的“镜像”。我们需要根据piapi.h头文件,把C语言

java通过piapi动态库操作PI数据库(2.x版本)实例 此方案由于需要调用OSIsoft提供的piapi32.dll动态库,因此只能在windows系统上实现,同时对于c语言实现的库函数,java在调用时也需要完成变量类型的适配工作。以下主要详述此方案的具体实现方法。 阅读详情

相关推荐

Java调用piapi32.dll操作PI数据库2.x版本实战(附完整代码)

本文详细介绍了Java通过调用piapi32.dll动态库操作PI数据库2.x版本的实战指南。内容涵盖环境配置、核心功能封装、高级数据操作及性能优化策略,提供完整代码示例,帮助开发者高效访问工业自动化领域的历史数据。重点解决32位JDK兼容性、动态库加载等关键技术难点。

weixin_42520374的博客 183

PI数据库2.x版本三种访问方案对比:JDBC、WEB API与SDK实战解析

本文深入对比了PI数据库2.x版本的三种访问方案:JDBC、WEB API与SDK,特别针对Java环境下piapi32.dll的调用提供了实战指南。通过性能测试和实际案例分析,帮助开发者在工业自动化场景中做出最优技术选型,平衡开发效率与执行性能。

weixin_30275415的博客 472

PI数据库2.x版本访问方案对比:JDBC、WEB API与SDK的优缺点分析

本文深入对比了PI数据库2.x版本的三种访问方案:JDBC、WEB API与SDK,分析了它们在兼容性、性能表现和开发成本上的优缺点。通过实测数据和实战案例,揭示了SDK方案在性能上的优势及开发复杂度,为工业自动化领域的技术选型提供了实用指南。

weixin_42656416的博客 350

Spring Boot + JNA 直连 PI 实时数据库

本文介绍基于Spring Boot与JNA直连PI实时数据库的工业数据采集方案,通过绑定32位原生库piapi32.dll替代缺失的light.dll,实现测点快照批量读取并推送至Kafka。核心挑战包括:必须使用32位JRE(64位加载失败)、PI API非线程安全需全局串行化、连接上下文按线程维护、时间戳为UTC秒需正确时区处理。文中提供关键代码、踩坑总结与运维脚本,可直接复用于类似场景。

swtaly123的博客 491

piapi方法操作实例.zip

电厂实时数据库PI相关API操作方法类,很实用,配置简单,对电厂类项目帮助很大,C#版本,里面已经包含了所有需要的dll文件以及配置文件,需要的可以下载看看,自己整理,版权所有

pi数据库-java连接-调用piapi32.dll

java通过调用dll的方式连接pi数据库,需要用piapi32.dll,我将2个dll都打包好了,供大家使用,分数不高,完全就是为了方便大家。我已经测试通过。必须是可以用的,真的好难啊。不容易啊,连接pi数据库,真费劲啊。

PI SDK(pi数据库的SDK开发dll文件)

pi数据库的SDK开发dll文件 其中包括piapi32.dll和pilog32.dll文件

PI实时数据库的OPC和API接口浅析

PI实时数据库的OPC和API接口浅析 OPC以COM/DCOM技术为基础,采用客户/服务器模式,为工业自动化软件面向对象的开发提供了统一的标准。采用这项标准后,硬件开发商将取代软件开发商为自己的硬件产品开发符合标准的OPC SERVER程序,而软件开发者不用再关心硬件驱动方面的技术问题,只要按标准开发OPC CLIENT程序就可完成与硬件的连接,这样不但提高了系统的开放性,也提高了软件开发的效率,使软件开发人员可以有更多的精力投入到其核心产品的开发上。 OSI专门为PI开发了能支持OPC 2.0规范的OPC CLIENT接口程序OPCINT,OPCINT是DOS环境下运行的程序,一般通过编辑并运行OPCINT.BAT来启动。配置PI的OPC接口需做两件事,一是配置OPCINT.BAT,使接口OPCINT既能从OPC SERVER取到数据,又能根据PI的需要将数据提交出去;二是在PI SERVER端配置点及相关属性。在运行OPCINT之前,需安装PI-API,安装后,在\\PIPC\目录下会生成一些有用的文件供OPCINT调用。 在配置OPCINT.BAT时,重点注意以下项的配置: /ps=

PI数据库说明

PI数据库在电厂中的应用,可以帮助你大概对pi数据库有个了解,希望对你有用!

jna加载dll动态库获取动态库数据---java源码

java获取dll动态库源码分享。通过jna加载动态库,然后初始化动态库,打开动态库,在通过指针获取动态库里面的数据。

java读取PI数据库测点值.docx

java读取PI数据库测点值.docx

生信实战|EffectorP3.0在植物病原菌效应子预测中的高效应用

本文详细介绍了EffectorP 3.0在植物病原菌效应子预测中的高效应用。通过机器学习模型,该工具能快速从海量分泌蛋白中批量预测胞质与质外体效应子,显著提升研究效率。文章提供了从环境配置、RNA-seq数据处理到批量预测的完整实战流程,并分享了结果解读与避坑指南,是生信研究人员进行病原物效应子鉴定的必备利器。

weixin_29195615的博客 302

【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现

前言 在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。 一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。 现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给...

sishuihuahua的博客 7056

手把手教你给H3C MSR路由器配置4G/5G上网(保姆级图文教程)

本文提供H3C MSR路由器配置4G/5G上网的保姆级图文教程,涵盖硬件准备、运营商适配、命令行配置、多运营商策略优化及信号故障排查等全流程。通过实测数据和典型场景分析,帮助用户快速实现4G/5G模块的部署与优化,提升网络稳定性和业务连续性。

weixin_28745067的博客 441

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析

本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。

weixin_28725949的博客 704

ORB-SLAM3单目+IMU实战:从数据加载到位姿优化的完整流程解析

本文详细解析了ORB-SLAM3单目+IMU模式的完整实战流程。从EuRoC等数据集的数据格式准备、系统启动与数据流入口,到帧构建、IMU预积分、视觉-惯性联合初始化,再到基于运动模型的跟踪、局部地图优化及多线程协同,提供了从环境配置到代码解读的全面指南,并分享了参数调优与性能分析的实用调试经验。

weixin_29085151的博客 296

保姆级教程:Windows下用GDC-Client下载TCGA数据,从环境变量配置到成功下载

本文提供Windows平台下使用GDC-Client下载TCGA数据的完整教程,从环境变量配置到成功下载。详细介绍了GDC-Client工具的安装、系统环境变量设置、配置文件优化以及数据下载实战技巧,帮助生物信息学研究者高效获取TCGA数据库中的癌症基因组数据。

weixin_42520025的博客 404

【鸿蒙游戏上架审核规范指南】

华为鸿蒙游戏上架审核规范指南摘要

weixin_44161102的博客 927

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 555

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: CLIP模型下载太慢?3种国内镜像加速方案实测对比(附完整代码)
下一篇: 深入解析HCI协议:UART传输层的配置与实战应用
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值