用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日 下午10:40

相关推荐

  • S7 200里面的 A B是什么变量

    我在一个例程里面看到有AB0 A1.1 A1.2 这样的变量,不知道这是干嘛的 如图所示,请大神解答一下 问题补充:第一次图片没传上 图片说…

    2021年7月5日
  • 虚心求教MOV传送指令的一些问题

    如图,我这样写出来的VD值是不是正确的.请教 问题补充:因为没找到S7-200好用的仿真软件.经过用三菱的仿真测试,明白了每个脉冲的时的各个VD值的变化.下面是我的图 图片说明: …

    2017年11月19日
  • 我想问一下西门子有专门的485出线,modbus协议的接头嘛

    在网上只能找到PROFIBUS DP接头。不知道能不能跟modbus通用。如果能的话,给一个货号。还有就是我是用于PLC和仪表之间通信的。我看好像DP接口有带编程功能,有…

    SIMATIC S7-200 2018年12月5日
  • PPI通讯的最大距离

    两台S7200 PLC,用PPI做通讯,最远的可靠距离是多少? 最佳答案 手册上说直接连接的话50米,但如果你稍微超点,还是没问题的,因为官方都有余量的,如果超的很多,就…

    SIMATIC S7-200 2020年10月31日
  • 为什么显示不一样

    这是温度显示子程序的计算后得出的数值我在自己编写另一个子程序时候再读出来怎么就变了? 图片说明:       最佳答案 数据类型用的不对,应…

    2017年6月19日
  • 时钟/日期电池盒 如何选择

    CPU221、CPU222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。但是选型手册里面有两个电池盒型号,分别用于一代和二代CPU,问我们怎么知道CPU属于几代产品(…

    SIMATIC S7-200 2020年10月31日
  • s7-200 EM231模块问题

    各位老师好,向大家请教一个,我现在有一个s7-200 CPU 222  PLC  和一个EM231模拟量输入模块,当我给…

    SIMATIC S7-200 2020年10月31日
  • 在那能买到WINCC的软件?

    在那能买到WINCC的软件?我想学学,不能太贵啊,最好是能用的盗版,几块钱 最佳答案 1,请向你的销售商要wincc的演示版软件来学习吧!  2,你买那本《西门…

    SIMATIC S7-200 2021年7月5日
  • plc扫描周期与常开常闭的状态

    I0.0常开触点闭合时,I0.0常闭同时会断开吗(就是在一个周期内会断开吗)?那Q0.4能实现自锁吗, 问题补充:如果I0.0是点动的,那么Q0.4还可以在点动的状态下自锁吗? 图…

    2017年12月21日
  • 连接中断块的问题

    请问连接中断块的中的中断事件EVNT前面的数字是何意?如10,是代表序号吗 最佳答案 1. 是中断事件号。 2. S7-200的中断连接指令(ATCH…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论