2021-05-12Libnodave10年开始总共8篇

libnodave是一个开源的西门子PLC通信库,支持200、300及以上型号,无需安装西门子PRODIVE驱动。它可以访问PLC的存储区、输入/输出映像区等,支持TCP/IP、RS485通信。通过libnodave,开发者可以使用C、C++、Delphi等语言进行编程,实现与PLC的通信。该库适用于有线连接如MPI、PPI以及通过以太网模块如CP243进行通信。此外,libnodave支持UDP通信,降低了在复杂电磁环境下编程的难度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

open Socket(By Val port As Long, ByVal peer As String)函数中,由于西门子以太网
中的ISO on TCP协议所使用的数据传输端口为102[
51],所以port被设置为102,而peer
则为PLC的以太网地址。 
 

 

How to use libnodave?

libnodave可以直接通过网口访问西门子PLC200,300及以上型号,无需安装西门子prodave驱动

 

 libnodave-0.8.5: 网上开源的西门子PLC读写库;

TIA V14 sp1, 西门子PLC程序编写软件, 本测试基本不用编写PLC程序;

 

SIEMENS.PRODAVE MPI/IE V6.0 Manual.2005

端口:是英文port的义译,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:USB端口、串行端口等。

接口:通信的两个机器的相同层次的实体叫做同层进程,它们之间的通信使用的各种约定统称协议,相邻层之间的约定称为接口。

基于 LIBNODAVE 的上位机与西门子 PLC 的通信-2010

LIBNODAVE 提 供类似于 PRODAVE 的动态链接库供用户编程调用, 但其所包 含的应用函数、支持的硬件和连接方式都比 PRODAVE 多。

 

。它可 以访问通过 PLC 程序能访问的存储区域:位存储区、数据块、输 入/输出映像区、定时器和计数器等。另外,LIBNODAVE 还可以 读取 PLC 程序中的功能块。

 

 

,LIBNODAVE 还有一个不 足是开发文档不够完整.,LIBNODAVE 已经可以结合 C、C++、C#、VB.NET、VB、 Pascal、Delphi、Perl 来使用,LIBNODAVE 的软件包里提供了相应 的测试例子,但是功能并不完善

 

而且可以进一步通过 Tk、Qt 等跨 平台 GUI 软件将 LIBNODAVE 的上位机功能拓展到嵌入式系 统中去.

 

的 TCP/IP 网络通信方式介 绍 LIBNODAVE 的应用。当使用这种方式时,只需设置上位机主 机的 IP 与 PLC 的 IP 在同一网段 (仅 IP 地址的最后一段不同), 无需 PG/PC 接口的设置,从而免除了对西门子软件的依赖。

内置以太网 口或加配 CP343)

 

  • 端口连接函数openSocket
  • 端口通信设置函数daveNewInterface
  • 适配器初始化(接口)daveInitAdapte
  • ) 与某个 PLC 建立连接的函数n daveNewConnection
  • 存储区读写函数daveReadBytes,daveWriteBytes

设要读取的数据区为:MB5、MW6、MD8、MD14, 数据类型分 别为 BYTE、INT、REAL、DINT

peer$ = "192.168.0.10" ' 此处设为 PLC 的 IP 地址
ph = openSocket(102, peer$)
If (ph > 0) Then
di = daveNewInterface (ph, ph, "IF1", 0, daveProtoISOTCP,
daveSpeed187k)
res = daveInitAdapter(di)
If res = 0 Then
Mpi=2 ' 单个 PLC 的位置一般为 Mpi=2,Rack = 0,Slot = 2
Rack = 0
Slot = 2
dc = daveNewConnection(di, Mpi, Rack, Slot)
res = daveConnectPLC(dc)
If res = 0 Then
initialize = 0 ' 连接成功
End If
End If
End If


res = daveDisconnectPLC(dc) ' 断开与 PLC 的连接
Call daveFree(dc) ' 释放内存
dc = 0
res = daveDisconnectAdapter(di) ' 断开与适配器的连接
Call daveFree(di)
di = 0
res = closePort(ph) ' 关闭通讯端口
ph = 0

'这里是读
res = daveReadBytes(dc, daveFlags, 0, 5, 13, 0)
If res = 0 Then
v1 = daveGetS8(dc)
v2 = daveGetS16(dc)
v3 = daveGetFloat(dc)
v4 = daveGetS32At(dc,9)
End If


Dim buffer(20) As Byte
res = daveReadBytes(dc, daveFlags, 0, 5, 13, buffer(0))
If res = 0 Then
v1 = daveGetS8from(buffer(0))
v2 = daveGetS16 from (buffer(1))
v3 = daveGetFloat from (buffer(3))
v4 = daveGet S32 from (buffer(9))
End If

'现在是写字节?
Dim buffer(20) As Byte
a = davePut8(buffer(0), d1)
a = davePut16(buffer(1), d2)
a = davePut32(buffer(3), d3)
a = davePutFloat(buffer(7), d4)
res = daveWriteBytes(dc, daveDB, 1, 5, 11, buffer(0))


(3) 读 1 位
设要读取的位为 DB5.DBX3.2,则函数调用方式为:
res = daveReadBits(dc, daveDB, 5, (3*8+2), 1,0)' 其中“8”是
指每个字节有 8 位
If res = 0 Then
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值