用户登陆 用户注册
您的位置:首页> 技术文章>内容正文
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-4dev是设备名,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号,默认是0end typepublic 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, valuepublic 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个字节中数据,则指定为4anz是指读取的长度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, valuepublic 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时,说明操作成功,否则为通讯出错。



网站首页 培训课程 维修指南
技术文章 家电专栏 供应信息
求购信息 培训资讯 展会信息
电脑专栏 教程下载 资料下载
常用软件 PLC教程 PLC资料
变频伺服 低压电器 维修资料
人机界面 自控仪表 工控机类
文章标题: 搜文章
中国工控资源网手机版 2012
电话:010-67577139 13811659603
培训咨询QQ:657167934 471895637 销售咨询QQ:623769457
联系邮箱:zggkzyw@163.com
 京ICP备11002135号
报时(2026-04-04 05:12:58) 流量统计