用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

相关推荐

  • 怎样才能进入官方技术文档

    在西门工业支持中心怎样才能进入技术文档。最好是图文并茂。我在这上面没有找到,进入的窗口。 图片说明:    最佳答案 在高级搜索中,只要你搜索到西门子官方文档就…

    2021年7月5日
  • 西门子200高速计数指令请教

    今天在看西门子的高速计数部分,对指令有些不太理解,希望能得到解答。比如我把SM37设为图116进制EC,应该是二进制的1110 1100,对应功能:图2主要就是更新编码器…

    2018年12月5日
  • 多个S7-200联网

    一个小系统中有1个CPU226CN和4个CPU224CN,其中CPU226通过modbus与上位机联网通讯,请教大家:其余的4个CPU224通过什么方式可以把数据送到CPU226上…

    SIMATIC S7-200 2020年11月5日
  • 关于200的数据低位和高位的问题

    我一直搞不清200的数据的低位、高位到底怎么排列的,在编程软件中DIV指令的说明是"整数与双整数相除(DIV)指令将两个16位整数相除,得出一个32位结果,其中包括一个1…

    2018年3月6日
  • em277和300通讯请问io点和模拟量怎么经行偏移啊。。

    新手做了一个200的程序 突然说要和控制室里的300做连接 弄了一个em277 和dp线 头疼啊 不晓得200的IO点 …

    SIMATIC S7-200 2017年11月27日
  • S7 200如何解密

    我们厂里有一台冷床,使用S7 200   CPU216 PLC,由于忘记了秘密,无法在线监控,也无法下载程序,望各位高手帮帮忙! …

    SIMATIC S7-200 2020年11月1日
  • 模拟量接错了会怎样

    如果我的cpu224xp自带的模拟量接口直接接了4~20ma的模拟量设备,由于CPU自带的是电压型模拟量输入,这样做会出现什么后果??会烧坏模拟量输入接口吗?还是仅仅不能读到正确的…

    SIMATIC S7-200 2020年11月1日
  • 简述PLC的I/O保护措施

    最佳答案 如果你够成本吧话: 1.所有I/O 加中间继电器转换。 2.如果1还不够的话,可以加光电隔离的继电器。 3.电源(包括24+)的加…

    SIMATIC S7-200 2021年7月5日
  • STEP 7-Micro/WIN V4.0 SP7 补丁包安装问题

    各位师傅,我现在安装的是西门子S7-200 CN STEP7_MicroWIN V4.0 ,今天有下载了个STEP 7-Micro…

    SIMATIC S7-200 2020年11月1日
  • S7-200怎样控制机械手

    我有一台机械手,升降和旋转是步进驱动,其它直流电机控制,有升/降、手的分开/闭合、左右旋转、前/后移动,各个动作都有相应的限位开关,控制顺序先手动操作,打到自动后按手动的过程动作。…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论