用delphi7.0通过pc access读写s7226中的数据

请各位大师指点,我用delphi7.0编写一个程式,
 用SIEMENS公司的pc access的软件去读写S7226中的数据.我通过设置PC ACCESS,PC ACCESS已能监控S7226中的数据, DELPHI7.0如何去读写PC ACCESS中的数据.请给一个例程tianmb86@163.com

最佳答案

PC ACCESS安装后目录底下有VB、VC编程读取实例,主要调用w95_s7.dll

 

 VB与西门子S7-300的通讯
 西门子S7-300通讯协议不公开,我们无法按相应的协议写程序,但是西门子提供给我们更为简单的方式来与之通讯。

 大家可以在某些组态软件中找到这样一个DLL:w95_s7.dll

 就是这个DLL,使的我们与PLC进行数据交互极为简单

 在DLL时定义了如下一些接口函数:

 Public Declare Function load_tool Lib "w95_s7.dll" (ByVal nr As Byte, ByVal dev As String, adr As Type_PlcAddressType) As Long

 这个函数是初始化连接用的,这个过程比较慢,大约要20S左右,这大概也是西门子为什么启动那么慢的原因吧;包括了如下几个参数:nr是指激活的连接数,范围是1-4

 dev是设备名,SetPG/PC里面有这个指定,一般用S7ONLINE就可以了,adr是指参数表,它是这样的一个type:

 Type Type_PlcAddressType

      bytAddress       As Byte’这是站号,默认是2

      bytPlcSegmentID  As Byte’SegmentID,默认是0

     bytPlcSlotNo     As Byte’槽号,默认是2

      bytPlcRackNo     As Byte’Rack号,默认是0

 End Type

 
 Public Declare Function new_ss Lib "w95_s7.dll" (ByVal nr As Byte) As Long

 这个函数没用到,可以去找一些资料来看

 Public Declare Function unload_tool Lib "w95_s7.dll" () As Long

 ‘这个函数是程序退出时用的,用来断开连接

 ‘ no, amount, value

 Public Declare Function d_field_read Lib "w95_s7.dll" (ByVal db As Long, ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 ‘这是读取DB块中数据的函数

 db 是指DB块号,比如DB10,则这个参数指定为10就可以了

 nr 是指起始地址,比如读DB10的第4个字节中数据,则指定为4

 anz是指读取的长度

 value是返回的值,表面上看这是一个字节,但实际上它是一个字节数组,比如你要读取二十个字节的数据,那么应定义dim ReturnValue(20) as byte,然后用ReturnValue来做为传递的参数

 Public Declare Function d_field_write Lib "w95_s7.dll" (ByVal db As Long, ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 这是写DB块数据的函数,参数跟读数据函数一样,不多说了

 ‘ no, amount, value

 Public Declare Function e_field_read Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 ‘这个是用来读取外部输入的值,包括开关量输入,模拟量输入

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值,表面上看这是一个字节,但实际上它是一个字节数组,比如你要读取二十个字节的数据,那么应定义dim ReturnValue(20) as byte,然后用ReturnValue来做为传递的参数

 从分析也可以看出,只有外部输入的值不可以写,因而它单独存在

 Public Declare Function a_field_read Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 ‘这是用来读取外部输出的值,包括开关量输出,模拟量输出,参数可以参照上面的函数,

 Public Declare Function a_field_write Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 ‘这是用来写外部输出的值,包括开关量输出,模拟量输出

 nr 是指起始地址,

 anz是指读取的长度

 value是返回的值

 Public Declare Function m_field_read Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 读取内存变量的函数(M的值)

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值

 Public Declare Function m_field_write Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Byte) As Long

 写内存变量的函数

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值

 Public Declare Function t_field_read Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Integer) As Long

 ’读定时器的值

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值,这个返回的是整型量的值

 Public Declare Function z_field_read Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Integer) As Long

 ‘读计数器的值

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值,这个返回的是整型量的值

 Public Declare Function z_field_write Lib "w95_s7.dll" (ByVal nr As Long, ByVal anz As Long, value As Integer) As Long

 ‘写计数器的值

 nr 是指起始地址

 anz是指读取的长度

 value是返回的值,这个返回的是整型量的值

 有了以上这样函数,相信会VB的人都可以写跟西门子通讯的程序了。

 但是如何知道读或写是否成功呢,这就是每个函数的返回值来决定,返回为0时,说明操作成功,否则为通讯出错。

 

提问者对于答案的评价:
谢谢

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午10:40
下一篇 2021年7月4日

相关推荐

  • 字符串比较问题

    用条形码扫描器接s7-200自由口,扫描器扫描的一维条形码字符串寄存在smb2,可否通过比较指令比较“字符串”的前5位,将字符串分类 最佳答案 可否通过比较指令比较“字符串”的前5…

    SIMATIC S7-200 2020年11月1日
  • 怎么读取G120C变频器里面的报警信息

    怎么读取G120C变频器里面的报警信息我线采集变频器里面的报警信息,怎么采集?与1200通讯PN方式 问题补充:r2131  当前故障代码 r2132…

    2021年7月5日
  • s7-200 plc 日期能计算吗

    s7-200 plc  日期能计算吗,设定时间假设25天,这个月的10日执行过了,要到下个月的5日再去执行 钻石用户推荐最佳答案 最终答案:可以。但是…

    SIMATIC S7-200 2021年7月5日
  • 监控程序

    有个plc坏了,我换了个新的plc,程序下载进去无法监控,一点监控就是无法建立与指定地址的连接,可能是无效地址或不存在的地址。程序是源程序以前都运行的好好的。 钻石用户推荐最佳答案…

    SIMATIC S7-200 2021年7月5日
  • CPU226扩展模块的数量

    CPU226最多可以配置扩展模块的数量是7个是吗?我的配置是CPU226+CP243+….后面是扩展模块,是包括CP243在内最多超过7个是吗? 最佳答案 CPU226…

    SIMATIC S7-200 2020年11月1日
  • 224xp本体模拟量的输入地址如何确定

    224xp本体模拟量的输入输出如何使用,请告知 最佳答案 常问问题:CPU 224 XP本体上有没有电流信号模拟量输入? 没有。CPU 22…

    SIMATIC S7-200 2020年11月1日
  • 4.0软件安装遇提示错误

    我在安装S7-200中文版4.0软件时遇提示CRC错误,忽略错误安装到70%左右,又提示错误没有更多文件安装不上。请各位大哥帮忙解释一下。小第在此多谢了。 最佳答案 本网站就有下载…

    SIMATIC S7-200 2021年7月5日
  • 整体寄存器清零问题

    S7 200怎么清零几十个连续的寄存器。要简单的,不要一个一个清。有没有批传送指令或是其他什么指令实现。希望有个详细的程序。比如复位VB200到V800的连续寄存器. 专…

    SIMATIC S7-200 2020年11月1日
  • 怎样向S7-200中灌入程序?

    请各位大侠指导如何给S7-200上的微存储卡灌入程序,由怎样将微存储卡中的程序下载到PLC中? 最佳答案 存储卡目前有两个版本:32K存储卡:仅用于储存和传递程序、数据块和强制值&…

    SIMATIC S7-200 2020年10月31日
  • S7-200以太网通讯生成的程序块ETH0_CTRL错误代码240

    S7-200以太网通讯生成的程序块ETH0_CTRL错误代码240 图片说明:    最佳答案 PLC->信息里看下CPU能识别到CP243-1模块吗?报…

    2017年5月31日

发表回复

登录后才能评论