PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 1270|回复: 4

[三菱] UDP傳送Ffins指令

[复制链接]
发表于 2012-7-23 16:18:25 | 显示全部楼层 |阅读模式

想請教各位達人我的指令或程式是不是有地方錯了,導致PLC沒有動作,

我的PLC IP : 192.168.1.20 ; Port: 9600

PC IP : 192.168.1.10
PLC 透過 Ethernet 直接與 PC 連接,中間無其他分支,

Fins Command :800002001400000A00000102820001000001000176*CR


VB Code :


Public Class Form1

    Public Delegate Sub SetMsg1Callback(ByVal strReceive As String)
    Private Sub DisplayMsg1(ByVal strReceive As String)
        If TextBox1.InvokeRequired Then
            Dim d As SetMsg1Callback = New SetMsg1Callback(AddressOf DisplayMsg1)
            Invoke(d, New Object() {strReceive})
        Else
            TextBox1.Text += strReceive
            TextBox1.Text += Environment.NewLine
        End If
    End Sub

    Dim RemoteIpEndPoint As IPEndPoint
    Dim sendUdpClient As UdpClient

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RemoteIpEndPoint = New IPEndPoint(IPAddress.Parse(TextBox2.Text), TextBox3.Text)
        sendUdpClient = New UdpClient
        sendUdpClient.Connect(RemoteIpEndPoint)
        sendUdpClient.BeginReceive(New AsyncCallback(AddressOf Receivedata), sendUdpClient)
   End Sub

    Sub Receivedata(ByVal pIAsyncResult As IAsyncResult)

        Dim receiveBytes As Byte()
        receiveBytes = sendUdpClient.EndReceive(pIAsyncResult, RemoteIpEndPoint)
        Dim myString As String = ""

        myString = Encoding.ASCII.GetChars(receiveBytes)
        myString = myString.TrimEnd()
        DisplayMsg1(myString)

        sendUdpClient.BeginReceive(New AsyncCallback(AddressOf Receivedata), sendUdpClient)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim sendBytes As Byte()
        sendBytes = Encoding.ASCII.GetBytes(TextBox4.Text)
        sendUdpClient.BeginSend(sendBytes, sendBytes.Length, New AsyncCallback(AddressOf Senddata), sendUdpClient)
    End Sub

    Sub Senddata(ByVal pIAsyncResult As IAsyncResult)
        Dim OutBytes As Integer
        OutBytes = sendUdpClient.EndSend(pIAsyncResult)
    End Sub
End Class


回复

使用道具 举报

发表于 2012-7-23 18:13:41 | 显示全部楼层
800002001400000A00000102820001000001000176*CR
可以看到是16进制的,CR是回车符吧,所以也要转成16进制。
所以要保证VB发出的是16进制啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-24 08:57:37 | 显示全部楼层
是回車符沒錯,我打在 VB 裡用 vbCr 代替,
我用這語法「 Dim sendBytes As Byte() '宣告傳送字串的 Byte 陣列
        sendBytes = Encoding.ASCII.GetBytes("800002001400000A00000102820001000001000176*" & vbCr)」可以很順利,不過 Byte 陣列裡裝的是 10 進制的 Ascii 碼,
但當我用迴圈(For......Next) sendBytes = Hex(sendBytes) 將陣列轉成 16 進制時,* 號那邊出錯了  ,
* 號在 16 進制為 2A,電腦執行時出現了"從字串 "2A" 至型別 'Byte' 的轉換是無效的。"的錯誤訊息~~

請問怎麼了?
回复 支持 反对

使用道具 举报

发表于 2013-3-12 22:42:06 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

发表于 2013-3-13 14:55:50 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-20 23:43 , Processed in 0.053585 second(s), 25 queries .

快速回复 返回顶部 返回列表