- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用文案
最近在做一个数据采集项目,涉及到许多与西门子 S7 系列 PLC 的通信,由于自己的 VC 水平属于半
瓶子晃荡,所以就想利用 C# 来进行开发(个人比较喜欢 C# 的代码风格,看着很清爽),虽然 C# 这种高
级语言与底层的设备通讯效率确实不如 C++ ,但好在数据量不大,实时性要求不算太高,用 C# 还是可以
应付的。在界面开发方面,高级语言确实不如 WinCC ,Intouch 之类的组态软件 ,但在数据处理上面 ,却有
很大的灵活性。
在这里很感谢吴向阳,在中国工控网上面发现了他的文章,因为我是从 C# 转到工控方向的,以前对
PLC 一点都不懂,刚接触这一行时 ,学习起来很吃力 ,看了他的这篇文章 ,让我对 PLC 的有了更加深入的了解。
我的这个 DCProdave.cs 就是在他的基础上修改的,加了一些自己的东西。还望各位多多提意见,多多交
流!
Prodave 版本 : PRODAVE6.0 - W95_S7.DLL
PLC 模拟环境 : PLCSIM V5.4
开发环境 : VS.NET 2005
.从 w95_s7.dll 中导入 PLC 通讯函数的方法 [DllImport]
在使用 DllImport 之前 ,必须引入 InteropServices, 代码如下 : using System.Runtime.InteropServices;
具体使用方法可以参考我的博客中转载的一篇文章 《C#(.net) 中的 DllImport 用法 [转 ] 》写的很不错,千
万要注意 C++ 数据类型到 C# 的对应关系,选用合适的类型。比如 char* 可以用 string 来转换,指针类型
可以 ref 或者数组。
二.定义结构体类型
2.1 PLC 连接参数结构体
// 定义结构体 [连接 PLC 所需参数 ]
public struct PLCConnParam
{
标准文档
实用文案
4
public
byte
Addres;
// 定义 CPU 的 MPI/DP
地址
5
//public byte SegmentId;
// 保留为 0
6
public
byte
Rack;
//
定义 CPU 的机架号
7
public
byte
Slot;
//
定义 CPU 的槽号
8
}
2.2 PLC 存储区域类别编号
// 定义枚举类型 [PLC 的存储区域编号 ]
public enum PLCBlockType
{
I = 1, //Input bytes
Q = 2 , //Output bytes
M = 3 , //Flag bytes
T = 4 , //Timer words
Z = 5 , //Counter words
D = 6 , //Data from DB
10 }
三.常用函数详细讲解
3.1 建立 PLC 连接函数
首先从 W95_S7.DLL 中导入连接函数 ,访问权限为私有 ,C# 将会对此函数进行封装 ,供外部调用 ,稍后讲解 .
/// <summary> 与 PLC 建立连接 ,该函数必须在其他所有函数调用之前被调用
/// </summary>
标准文档
实用文案
3
///
<param name="nr">
连接数 ,在 DOS,WIN3.1 最多可以有
4 个 ,在 WIN95
以上最多可以有
16 个<
/param>
4
///
<param name="device">
与 PLC 通讯的设备名称 ,一般为 S7ONLINE </param>
/// <param name="adr_table">参数列表 ,4 个值分别为 MPI/DP 地址 ,保留值 =0, 槽号 ,机架号 </para
m>
6
/// <returns>
0 正常返回 ,非 0
为错误号 </returns>
7
[DllImport( "w95_s7.dll" )]
8
private extern
static int load_tool( byte nr, string device, byte [,] adr_table);
说明 :
在一个 MPI/DP 网络中若有多个 PLC 时,可指定多个连接列。最后一列的所有参数须置 0 ,以标志参
数列结束。例如一个 MPI/DP 网中有两个 PLC,他们的 MPI 地址分别为 2 和 3,槽号均为 2 ,机架号均为 0,
则可按如下方式调用 :byte[,] ba={{2,0,2,0},{3,0,2,0},{0,0,0,0}}; int err=load_tool(1, "s7online",ba); 返
回值为 int 型,如果
文档评论(0)