● リクエストに対してレスポンスを返さない場合
6.5 サンプルプログラム
6.5.1 送受信BASICプログラム例
ここでは,PC/AT *1 (または互換機)のVisual-Basic *2 コマンド送信/レスポンス受信プログラム の例を示します。
*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