S 7. Net:シーメンスPLC用イーサネットCommunicationドライバ

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

S 7. Net:シーメンスPLC用イーサネットCommunicationドライバ

概要:概要

S 7. NetはSiemens PLC用に特別に設計されたPLCドライバで、イーサネット経由でのみ接続できます。つまり、PLCにはProfinet CPUまたはProfinet外付けカード(CPSXカードなど)が必要です。S 7. Netは完全にC#で書かれているため、ローカルDLLを処理することなく簡単にデバッグできます。

サポートされるPLCモデル

S 7. Netは、S 7 - 200、S 7 - 30 0、S 7 -400、S 7 -1200、S 7 -1500のSiemens PLCモデルと互換性があります。

S 7. Netを始める

S 7. Netの使用を開始するには、S 7. Net.dllをダウンロードしてプロジェクトに含める必要があります。NuGetパッケージをダウンロードするか、ソースコードをダウンロードしてコンパイルすることで実装できます。

PLCインスタンスの作成、接続と切断

ドライバインスタンスを作成するときは、次のコンストラクタを使用する必要があります。

public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot)
  • cpu接続するCPUの種類を指定します。サポートされているCPUの種類は次のとおりです。
public enum CpuType {
      S7200 = 0,
      S7300 = 10,
      S7400 = 20,
      S71200 = 30,
      S71500 = 40,
  }
  • ip:CPUまたは外部EthernetカードのIPアドレスを指定します。
  • rack:ステップ7のハードウェア構成で確認できるPLCを含むラック番号。
  • slot:これはCPUのスロット番号で、ステップ7のハードウェア構成にも記載されています。

たとえば、次のコードは、IPアドレスが127.0.0.1のS 7 - 30 0 PLC用のPLCオブジェクトを作成します。PLCはラック0にあり、CPUはスロット2にあります。

Plc plc = new Plc(CpuType.S7300, "127.0.0.1", 0, 2);

PLCへの接続

public void Open()

たとえば、次のコード行はジョインを開きます。

plc.Open();

PLCからの切断

public void Close()

たとえば、次のコードは接続を閉じます。

plc.Close();

エラー処理

どんな方法でもエラーが原因です。PlcException。適切なエラー処理が必要です。PlcException1つ提供したErrorCodeそして適切なエラーメッセージ。

エラー型の列挙は次のとおりです。

public enum ErrorCode
{
    NoError = 0,
    WrongCPU_Type = 1,
    ConnectionError = 2,
    IPAddressNotAvailable, 
    WrongVarFormat = 10,
    WrongNumberReceivedBytes = 11, 
    SendData = 20,
    ReadData = 30, 
    WriteData = 50
}

PLC可用性の確認

PLCが使用可能かどうかを確認する(ソケットを開く)には、プロパティを使用します:

public bool IsAvailable

このプロパティをチェックすると、ドライバはPLCへの接続を試み、接続可能な場合はtrueを返し、そうでない場合はfalseを返します。

PLC接続の確認

PCソケットが接続されているかどうか、PLCがソケットの反対側にまだ接続されているかどうかを確認する必要があるため、PLC接続の確認は簡単です。この場合、チェックする必要がある属性は次のとおりです。

public bool IsConnected

電話をかけることができる。Open()メソッドと成功した後にこのプロパティをチェックし、接続がまだアクティブかどうかを確認します。

バイトの読み取り/書き込み

このライブラリは変数を読み込むためのさまざまな方法を提供します。最も基本的で一般的な方法はReadBytes

public byte[] ReadBytes(DataType dataType, int db, int startByteAdr, int count)

public void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value)

このメソッドは、指定したメモリ位置から指定したすべてのバイトを読み取ります。バイト数が1回のリクエストで転送できる最大バイト数を超える場合、このメソッドは複数のリクエストを自動的に処理します。

  • dataTypeリストを使う必要がありますDataTypeメモリの場所を指定します
public enum DataType
  {
      Input = 129,
      Output = 130,
      Memory = 131,
      DataBlock = 132,
      Timer = 29,
      Counter = 28
  }
  • db:dataTypeのアドレス。例えば、DB1を読み込む場合は“1”、T 45を読み込む場合は45です。
  • startByteAdr:読み込む最初のバイトのアドレス。たとえば、DB 1.DBW200を読み込む場合は200です。
  • count- 読みたいバイト数を入力します。
  • value[]:PLCから読み込むバイトの配列。

例このメソッドはDB1の最初の200バイトを読み込みます。

var bytes = plc.ReadBytes(DataType.DataBlock, 1, 0, 200);

デコードされた読み取りとデコード/書き込み

このメソッドを使用すると、提供されたvarTypeに基づいてデコードされた結果を読み取り、受信できます。これは、同じタイプの複数のフィールドを読み込む場合に便利です(たとえば、連続した20個のDBW)。VarType.Byteを指定すると、ReadBytesと同じ機能を持ちます。

public object Read(DataType dataType, int db, int startByteAdr, VarType varType, int varCount)

public void Write(DataType dataType, int db, int startByteAdr, object value)
  • dataTypeリストを使う必要がありますDataTypeメモリの場所を指定。
  • db:dataTypeのアドレス。例えば、DB1を読み込む場合は“1”、T 45を読み込む場合は45です。
  • startByteAdr:読み込む最初のバイトのアドレス。たとえば、DB 1.DBW200を読み込む場合は200です。
  • varType:バイトを変換するデータを指定します。
public enum VarType
  {
      Bit,
      Byte,
      Word,
      DWord,
      Int,
      DInt,
      Real,
      String,
      StringEx,
      Timer,
      Counter
  }
  • count読み取りたい変数の数を含みます。
  • valuePLCに書き込む値の配列。単一の値でも配列でもかまいませんが、型は一意であることに注意してください(例えば、double配列、int配列、shorts配列など)。

例:このメソッドはDB1の最初の20個のDWordを読み込みます。

var dwords = plc.Read(DataType.DataBlock, 1, 0, VarType.DWord, 20);

単一変数の読み取り/単一変数の書き込み

このメソッドは、文字列をParseして正しい結果を返すことでPLCから個々の変数を読み込みます。これは開始する最も簡単な方法ですが、ドライバは変数ごとにTCPリクエストを送信するため、非常に非効率です。

public object Read(string variable)

public void Write(string variable, object value)
  • variable:“DB 1.DBW 20”、“T 45”、“C 21”、“DB 1.DBD 400”などの文字列を使用して、読み込む変数を指定します。

例:変数DB 1.DBW 0を読み込みます。結果は、C#で正しい16ビット形式を取得するにはushortに変換する必要があります。

ushort result = (ushort)plc.Read("DB1.DBW0");

構造体の読み取り/書き込み構造体

このメソッドは、指定されたDBからすべてのバイトを読み込み、C#内の構造体を埋め、値を含む構造体を返します。1つのデータブロック内の複数の変数を読み込みたい場合にお勧めします。

Read StructureメソッドとWrite Structureメソッドは文字列をサポートしていません。

public object ReadStruct(Type structType, int db, int startByteAdr = 0)

public void WriteStruct(object structValue, int db, int startByteAdr = 0)
  • structType読み込む
  • db:読み込むDBのインデックス
  • startByteAdr:読み込むバイトの最初のアドレスを指定します(デフォルトはゼロです)。

例:PLCでDataBlockを定義し、. NetアプリケーションでPLC内のDBに似た構造体を追加します。

public struct testStruct
{
    public bool varBool0;
    public bool varBool1;
    public bool varBool2;
    public bool varBool3;
    public bool varBool4;
    public bool varBool5;
    public bool varBool6;
    public byte varByte0;
    public byte varByte1;
    public ushort varWord0;
    public float varReal0;
    public bool varBool7;
    public float varReal1;
    public byte varByte2;
    public UInt32 varDWord;
}

次に、完全な構造体を読み書きするコードを追加します。

//開始アドレス0からDataBlock 1内の構造体を読み込む
testStruct myTestStruct = testStruct plc.ReadStruct typeof testStruct 1 0;

** クラスの読み取り/書き込み

カテゴリーに入る **

このメソッドは、指定されたDBからすべてのバイトを読み込み、C#内のクラスを入力します。クラスは参照として渡され、リフレクションを使って値を割り当てます。1つのデータブロック内の複数の変数を読み込みたい場合にお勧めします。

Read ClassメソッドとWrite Classメソッドは文字列をサポートしません。

public void ReadClass(object sourceClass, int db, int startByteAdr = 0)

public void WriteClass(object classValue, int db, int startByteAdr = 0)
  • sourceClass:値を割り当てたいクラスのインスタンス
  • db:読み込むDBのインデックス
  • startByteAdr:読み込むバイトの最初のアドレスを指定します(デフォルトはゼロです)。

例:PLCでDataBlockを定義し、PLC内のDBに似たクラスを. Netアプリケーションに追加します。

public class TestClass
{
    public bool varBool0 { get; set;}
    public bool varBool1 { get; set;}
    public bool varBool2 { get; set;}
    public bool varBool3 { get; set;}
    public bool varBool4 { get; set;}
    public bool varBool5 { get; set;}
    public bool varBool6 { get; set;}

    public byte varByte0 { get; set;}
    public byte varByte1 { get; set;}

    public ushort varWord0 { get; set;}

    public float varReal0 { get; set;}
    public bool varBool7 { get; set;}
    public float varReal1 { get; set;}

    public byte varByte2 { get; set;}
    public UInt32 varDWord { get; set;}
}

次に、クラス全体を読み書きするコードを追加します。

//開始アドレス0からDataBlock 1のクラスを読み込む
TestClass myTestClass = new TestClass;
plc.ReadClass myTestClass 1 0;

複数の変数の読み取り

このメソッドは1つのリクエストで複数の変数を読み込みます。変数は、同じデータブロックまたは異なるデータブロック内に配置できます。

public void Plc.ReadMultibleVars(List<DataItem> dataItems);
  • List<>:読み込むすべてのデータ項目を含むDataItemリストを指定する必要があります。

例このメソッドは、データ·ブロックからいくつかの変数を読み込みます。

まず、データ項目を定義します。

private static DataItem varBit = new DataItem()
{
    DataType = DataType.DataBlock,
    VarType = VarType.Bit,
    DB = 83,
    BitAdr = 0,
    Count = 1,
    StartByteAdr = 0,
    Value = new object()
};

(上记と

次に、DataItemsを格納するリストを定義します。

private static List<DataItem> dataItemsRead = new List<DataItem>();

データ項目をリストに追加するには、次の手順に従います。

dataItemsRead.Add(varBit);
dataItemsRead.Add(varByteArray);
dataItemsRead.Add(varInt);
dataItemsRead.Add(varReal);
dataItemsRead.Add(varString);
dataItemsRead.Add(varDateTime);

PLC接続を開き、すぐにプロジェクトリストを読み込みます。

myPLC.Open ViewCube;

//変数リストの読み込み
myPLC.ReadMultipleVars dataItemsRead;

リンクを閉じる。
myPLC.Close ViewCube;

//アクセスリストの値
Console.WriteLine Int + dataItemsRead[2].Value;

複数の変数を記述

このメソッドは、1つのリクエストで複数の変数を書き込みます。

public void Plc.Write(Array[DataItem] dataItems);
  • Array[]書き込むすべてのアイテムを含むDataItem配列を指定する必要があります。

例このメソッドでは、複数の変数を1つのデータブロックに書き込みます。

データ項目の定義:

ate static Data
{
    // ...(上記と重複するデータ·アイテムの定義は省略)
};

(上记と

データ·アイテムに値を割り当てます。S 7データ型に合わせて適切なデータ変換を使用してください。

varWordWrite.Value = (ushort)67;
varIntWrite.Value = (ushort)33;
varDWordWrite.Value = (uint)444;
varDIntWrite.Value = 6666;
varRealWrite.Value = 77.89;
varStringWrite.Value = "Writting";

次に、データ項目を格納するリストを定義し、作成した項目をリストに追加します。

private static List DataItem dataItemsWrite = new List DataItem;

//書き込むデータ項目のリストにデータ項目を追加する
dataItemsWrite.Add varWordWrite;
dataItemsWrite.Add varIntWrite;
dataItemsWrite.Add varDWordWrite;
dataItemsWrite.Add varDIntWrite;
dataItemsWrite.Add varRealWrite;
dataItemsWrite.Add varStringWrite;

最後に、PLC接続を開き、プロジェクトに一度書き込みます。.ToArrayを使用してリストを配列に変換する

//接続を開く
myPLC.Open ViewCube;

//プロジェクトに書き込む
myPLC.Write dataItemsWrite.ToArray;

リンクを閉じる。
myPLC.Close ViewCube;

この記事では、S 7. Netソフトウェアの機能、使用開始方法、PLCインスタンスの作成方法、接続と切断、エラー処理、PLCの可用性と接続ステータスのチェック、バイトの読み書き、構造体とクラスの読み書き、複数の変数の読み書きを一度に行う方法など、S 7. Netソフトウェアの詳細な紹介を行います。この記事がS 7. Netの理解を深めるのに役立つことを願っている。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.