用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日

相关推荐

  • PTO的子程序错误

    在PTO指令的错误代码中,有如下几项: 3---在脉冲发生器火PTO表的格式化中检测到的执行错误 127——遇到ENO错误,检查PLC信息,料及有关非重大错误的…

    SIMATIC S7-200 2021年7月4日
  • S7-200 profibus dp 通讯

    有两台S7-200的PLC,现想通过EM277走profibus dp通讯,能够实现吗?若不行,那只有用modbus通讯吗? 问题补充:如果还有一个上位机,将这个两个PL…

    SIMATIC S7-200 2020年11月1日
  • CPU224继电器型,能输出高速脉冲吗?

    我查了手册应该不行,我想问问继电器如果不能输出高速脉冲,那么我加一个EM222DC模块,是不是就可以输出高速脉冲了? 最佳答案 简单回答: 1,继电器型绝对不支持脉冲输出…

    SIMATIC S7-200 2018年1月1日
  • s7200想存实验数据用什么方法

    我想实现在定时中断中把数据先保存,然后延时0-5秒取出来,有什么办法吗?希望详细说一下,谢谢 问题补充:就是在100ms的定时中断中对一个v区的数比如vw0里的数据先保存起来,然后…

    SIMATIC S7-200 2017年6月8日
  • 模拟量程序

    有一称重传感器(0-20MA),配一称重仪表,上放一料斗,当放入料斗中的钉子接近设定值(25KG)时,停止向料斗内放钉(用仪表的输出点控制)。所欠的钉子(设0.5KG)对应的模拟量…

    SIMATIC S7-200 2021年7月4日
  • 如何限制电机量启动?

    现一个工程由PLC+HMI控制,有30台电机,为了安全,同时最多只能运行5台电机。 在触摸屏上用 “置位” 来选择要运行的电机。 问题:如何…

    SIMATIC S7-200 2021年7月5日
  • 自由协议

    我现在用s7-200和仪表做自由协议,可以用XTM把请求写进去,但是RCV数据读不上来,但当我用串口软件调试,收发数据都可是实现,所以应该还是程序的问题。我把程序的图片发上来,麻烦…

    2020年10月31日
  • 问个基础问题

    无符号数与有符号数分别用在什么不同的方面?无符号是用于地址,有符号用于数据计算吗?还有其它的地方? 最佳答案 如果表达的整数对象不可能出现负值,就可以用无符号数,否则就用有符号数。…

    SIMATIC S7-200 2020年11月1日
  • 数据断电保存问题

    使用CPU224XPCN需要在断电后进行数据的保存,已经在断电数据保存区进行了设置,可是保存的数据不对,有时又是正确的。现象是:自动运行一段时间后,需要对变频器的电压,电流,频率等…

    SIMATIC S7-200 2021年7月4日
  • 请教plc程序下载后能在线编辑程序吗?如果能的话该怎么操作?

    plc下载程序调试,想修改能在线编辑吗?还是要将plc关掉再编辑? 钻石用户推荐最佳答案 如果是200plc只要离线就可以编辑程序,下载需要plc在stop状态下进行。 提问者对于…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论