|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
|
namespace Mesnac.Equip.Siemens.S7.Default
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 西门子S7-300PLC串口通讯接口类
|
|
|
/// </summary>
|
|
|
public class W95_S7
|
|
|
{
|
|
|
/*
|
|
|
PAdressType = ^AdressType;
|
|
|
AdressType = packed record
|
|
|
Adress : Char; // stationsadresse default 2
|
|
|
SegmentId : Char; // segment id default 0
|
|
|
SlotNo : Char; // slot no default 1
|
|
|
RackNo : Char; // rack no default 0
|
|
|
end;
|
|
|
|
|
|
function load_tool(a:char; b:PChar; c:PAdressType):integer;stdcall;external'W95_S7.dll';
|
|
|
function db_read(a,b:integer;var c:integer;d:pointer): Integer;stdcall;external'W95_s7.dll';
|
|
|
function db_write(a,b:integer;var c:integer;d:pointer):integer;stdcall;external'W95_s7.dll';
|
|
|
function unload_tool():integer;stdcall;external'W95_s7.dll';
|
|
|
*/
|
|
|
/// <summary>
|
|
|
/// 定义MPI链接参数
|
|
|
/// </summary>
|
|
|
public struct PLCConnParam
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 定义CPU的MPI地址
|
|
|
/// </summary>
|
|
|
public byte Adress;
|
|
|
//public byte SegmentId; //保留为0
|
|
|
/// <summary>
|
|
|
/// 定义CPU的机架号
|
|
|
/// </summary>
|
|
|
public byte RackNo;
|
|
|
/// <summary>
|
|
|
/// 定义CPU的槽号
|
|
|
/// </summary>
|
|
|
public byte SlotNo;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 与PLC建立连接,该函数必须在其他所有函数调用之前被调用
|
|
|
/// 在一个MPI网络中若有多个CPU时,可指定多个连接列。最后一列的所有参数须置0,以标志参数列结束。
|
|
|
/// e.g.一个MPI网中有两个CPU,他们的MPI地址分别为2和3,槽号均为2,机架号均为0,则可按如下方式调用:
|
|
|
/// byte[,] btr={{2,0,2,0},{3,0,2,0},{0,0,0,0}}; int err=load_tool(1, "s7online",btr);
|
|
|
/// </summary>
|
|
|
/// <param name="nr">连接数,在DOS,WIN3.1最多可以有4个,在WIN95以上最多可以有16个</param>
|
|
|
/// <param name="device">与PLC通讯的设备名称,一般为S7ONLINE</param>
|
|
|
/// <param name="adr_table">参数列表,4个值分别为MPI/DP地址,保留值=0,槽号,机架号</param>
|
|
|
/// <returns>0正常返回,非0为错误号</returns>
|
|
|
[DllImport("W95_S7.dll")]
|
|
|
public extern static int load_tool(byte nr, string device, byte[,] adr_table);
|
|
|
/// <summary>
|
|
|
/// 从DB中读取ushort数组(长度是WORD倍数,即双BYTE)
|
|
|
/// </summary>
|
|
|
/// <param name="dbno">DB块号</param>
|
|
|
/// <param name="dwno">DBW起始编号,=0表示DBW0,=1表示DBW2,跨度为WORD</param>
|
|
|
/// <param name="anzahl">读取的WORD长度(1个WORD==2个BYTE)</param>
|
|
|
/// <param name="buffer">返回值,ushort型buffer</param>
|
|
|
/// <returns>0正常返回,非0为错误号</returns>
|
|
|
[DllImport("W95_S7.dll")]
|
|
|
public extern static int db_read(int dbno, int dwno, ref int anzahl, ushort[] buffer);
|
|
|
/// <summary>
|
|
|
/// 向DB数据块中写入数据
|
|
|
/// </summary>
|
|
|
/// <param name="dbno">指定DB块号</param>
|
|
|
/// <param name="dwno">指定写入的起始字序号,=0表示DBW0,=1表示DBW2</param>
|
|
|
/// <param name="anzahl">指定写入的对象有多少个字</param>
|
|
|
/// <param name="buffer">写入值</param>
|
|
|
/// <returns>0正常返回,非0为错误号</returns>
|
|
|
[DllImport("W95_S7.dll")]
|
|
|
public extern static int db_write(int dbno, int dwno, ref int anzahl, ushort[] buffer);
|
|
|
/// <summary>
|
|
|
/// 断开与PLC的连接,必须在退出软件之前调用,否则PLC的连接一直被占用,影响下次连接
|
|
|
/// </summary>
|
|
|
/// <returns>0正常返回,非0为错误号</returns>
|
|
|
[DllImport("W95_S7.dll")]
|
|
|
public extern static int unload_tool();
|
|
|
|
|
|
}
|
|
|
}
|