none
用socket類別 讀 永宏PLC RRS feed

  • 問題

  • 我在測試的時候都會停在"tcp.GetStream.Read(readbuf, 0, tcp.ReceiveBufferSize)"

    原始碼:

    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text


    Public Class Form1
        Dim tcp As New TcpClient

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If tcp.Connected = False Then
                tcp.Connect("192.168.0.21", 600)
                If tcp.Connected = True Then
                    Label1.Text = "ok"
                End If
            End If

            If tcp.Connected = True Then
                Dim sendbuf() As Byte = Encoding.ASCII.GetBytes(Chr(2) & "01463CD00100" & Chr(3)) '連續讀取60個暫存器
                tcp.GetStream.Write(sendbuf, 0, sendbuf.Length)
            End If

            If tcp.Connected = True Then
                If tcp.GetStream.CanRead = True Then
                    Dim readbuf(tcp.ReceiveBufferSize) As Byte
                    tcp.GetStream.Read(readbuf, 0, tcp.ReceiveBufferSize) '都停在這
                End If
            End If

        End Sub
    End Class

    注:

    永宏通訊格式http://fatek.com/Download%20Page/Tradition%20Chinese/FBs_Manual/Manual_2-Cht/Appendix_1.pdf

    2012年7月22日 下午 01:20

解答

  • 我覺得還是用封包監測的軟體來觀察一下幾件事

    (1) 你的程式送出的封包內容和廠商範例送出的封包有何不同

    (2) 你的程式送出封包後,  PLC 是否有回應

    監測軟體可以試試 Microsoft Network Monitor  , 為了讓過程單純, 電腦只要和 PLC 對接, 不要連其它任何的網路.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 宇信 2012年7月23日 下午 11:19
    2012年7月23日 上午 05:27
    版主

所有回覆

  • FAQ

    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/34161e0e-443c-451d-8d05-f928439db97d

    簡單的說,當你讀取時,不要以為這時候資料都已經收到了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年7月22日 下午 02:35
  • 如果會停在那, 表示它一直在等回傳. 你確定站號和命令的設定是對的嗎 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年7月22日 下午 02:44
    版主
  • TO 心冷熱情熄

    謝謝你的回覆,測試時我有事過讓程式等待3秒(System.Threading.Thread.Sleep(3000)),還有偵測是否可讀(If tcp.GetStream.CanRead = True Then)

    但都讀不進來。

    我還有遺漏其他方法嗎?

    2012年7月23日 上午 12:20
  • TO Bill Chung

    謝謝你的回覆,我相當肯定站號是對的,因為我用他的編寫軟體確認過了。

    2012年7月23日 上午 12:23
  • 我覺得還是用封包監測的軟體來觀察一下幾件事

    (1) 你的程式送出的封包內容和廠商範例送出的封包有何不同

    (2) 你的程式送出封包後,  PLC 是否有回應

    監測軟體可以試試 Microsoft Network Monitor  , 為了讓過程單純, 電腦只要和 PLC 對接, 不要連其它任何的網路.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 宇信 2012年7月23日 下午 11:19
    2012年7月23日 上午 05:27
    版主
  • 謝謝各位大大的協助,我已經發現我的問題了,原來是我給PLC的指令少了檢查碼。我真是粗心!

    Bill Chung 的 Avatar

    Bill Chung

    MVP

    27,705 點數1561
    近來的成就
    論壇監督人 II提議解答者 I論壇監督人 I
    2012年7月23日 下午 11:18