You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
4.0 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
}
}