• 検索結果がありません。

● リクエストに対してレスポンスを返さない場合

6.5 サンプルプログラム

6.5.1 送受信BASICプログラム例

ここでは,PC/AT *(または互換機)のVisual-Basic *コマンド送信/レスポンス受信プログラム の例を示します。

*1  PC/ATは,IBM Ltd.の製品です。

*2  Visual-Basicは米国Microsoft社の登録商標です。

上位機器 IPアドレス

      [192.168.1.0] (任意) LAN接続

LAN接続

RS-485接続 HUB

ステーション番号 01 (固定) IPアドレス

  [192.168.1.1] (任意)

Ethernet-シリアルゲートウェイ 機能を動作

ステーション番号 02 (任意)

HUBとモジュール間 100m以内 HUBのカスケード接続段数:

     10BASE-T:最大4段      100BASE-TX:最大2段

(例)

Visual-Basic 6.0による例

本サンプルは接続送信用メソッドとWinsockコントロールのSendDataメソッドでコマンド送信/

レスポンス受信を行います。

● 準備

本サンプルはWinsockコントロールを使用していますので,Microsoft Winsock Contolコン ポーネントを割付ける必要があります。コンポーネントの割付け方法についてはVisual-Basic の取扱説明を参照してください。

● サンプルプログラム

本プロシージャは,一般的な状態の確認,エラー処理,リトライ処理は省略してあります。

本プロシージャは単体では動作いたしません。実際のアプリケーション作成時の参考として ください。

'

変数宣言

'

Option Explicit

Dim strSendData As String

'送信データ

Dim strReceive As String

'受信データ

Dim binChrs(11) As Byte

'Binaryデータ

Dim iFlag As Integer

'完了待ちフラグ

'

'=====================================================================

Private Sub cmdSend1()

'

PR300とのTCP/IP接続を行い,送信データを作成し,送信するプロシージャ

'

'変数宣言

Dim iCount As Integer Dim strCher As String '

'

Winsockコントロールのプロパティを設定

Winsock1.Protocol = sckTCPProtocol

'TCPプロトコル

Winsock1.RemoteHost = "192.168.1.1"

'接続するPR300のIPアドレス

Winsock1.RemotePort = 502

'Modbus/TCPの使用ポート

'

'

PR300にTCP接続要求

Winsock1.Connect

'TCP接続要求

Do Until Winsock1.State = sckConnected

'接続完了待ち

iFlag = DoEvents()

IM 77C01E01-10

'

送信データ作成

strSendData = "123400000006010300000002"   '送信コマンド文字列 '

'  Dレジスタ数 (0002:2個)

'  Dレジスタ開始番号 (0000:D0001)

'  ファンクションコード (03:複数Dレジスタの読出し)

'  PR300のステーション番号 (01:ステーション1)

'  ステーション番号以降の送信バイト数 (0006:6byte)

'  プロトコルID (0000:固定)

'  転送ID (1234:任意の2byteの値)

'

テキスト→バイナリ変換

For iCount = 1 To 12

strCher = "&H" + Mid(strSendData, 2 * iCount - 1, 2)

'2文字切出し16進表現に変換

binChrs(iCount - 1) = CByte(Val(strCher))

'数値に変換

Next iCount '

'

送信

Winsock1.SendData binChrs

'コマンド送信

'

End Sub

'=====================================================================

Private Sub cmdSend2()

'

PR300をゲートウェイとしてRS485ラインに接続されたPR300へ送信するプロシージャ

'

'

変数宣言

Dim iCount As Integer Dim strCher As String '

'

Winsockコントロールのプロパティを設定

Winsock1.Protocol = sckTCPProtocol

'TCPプロトコル

Winsock1.RemoteHost = "192.168.1.1"

'ゲートウェイPR300のIPアドレス

Winsock1.RemotePort = 502

'Modbus/TCPの使用ポート

'

'

PR300にTCP接続要求

Winsock1.Connect

'TCP接続要求

Do Until Winsock1.State = sckConnected

'接続完了待ち     iFlag = DoEvents()

Loop

'

'送信データ作成

strSendData = "123400000006020300000002"   '送信コマンド文字列 '

'  Dレジスタ数 (0002:2個)

'  Dレジスタ開始番号 (0000:D0001)

'  ファンクションコード (03:複数Dレジスタの読出し)

'  PR300のステーション番号 (02:ステーション2)

'  ステーション番号以降の送信バイト数 (0006:6byte)

'  プロトコルID (0000:固定)

'  転送ID (1234:任意の2byteの値)

'

テキスト→バイナリ変換

For iCount = 1 To 12

strCher = "&H" + Mid(strSendData, 2 * iCount - 1, 2)

'2文字切出し16進表現に変換

binChrs(iCount - 1) = CByte(Val(strCher))

'数値に変換

Next iCount '

'

送信

Winsock1.SendData binChrs

'コマンド送信

'

End Sub

'=====================================================================

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'

PR300からのデータを受信し,接続を切断する。

'

Dim binData() As Byte Dim iCount As Integer Dim strCher As String '

受信

Winsock1.GetData binData

'コマンド受信

'

'

バイナリ変換→テキスト

For iCount = 0 To bytesTotal -1

strCher = Right(Hex(binData(iCount)), 2)

'1バイトごと文字列に変換

If Len(strCher) = 1 Then

strReceive = strReceive + "0" + Mid(strCher, 1, 1)

'変換後1文字の場合0を付加

Else

strReceive = strReceive + strCher

IM 77C01E01-10