91美女视频-亚洲免费观看视频-欧美a∨-久热在线视频-日韩黄网站-成av人片在线观看www-久操综合-超碰av在线播放-性欧美欧美巨大69-婷婷二区-av男人的天堂网-中文字幕一区在线播放-玖草在线观看-国产网址在线观看-免费在线不卡av

dujiang100
我是一只小小鳥
級別: 家園常客
精華主題: 0
發帖數量: 426 個
工控威望: 642 點
下載積分: 1895 分
在線時間: 243(小時)
注冊時間: 2011-03-11
最后登錄: 2024-05-22
查看dujiang100的 主題 / 回貼
樓主  發表于: 2016-03-23 17:29
   最近在研究VB跟歐姆龍CP1H的通信.了解到可以用串口進行HOSTLINK通信,還可以用以太網進行FANS通信.CP1H沒有網口所以不可以用FANS通信嗎?串口通信情況下,PLC處于運行時寫入不了數據,只有當PLC是監控狀態時才能寫入.這怎么能達到隨時寫入的目的呢?
本帖最近評分記錄:
  • 下載積分:+1(56071988)
    shuangyu
    工控行業呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發帖數量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    1樓  發表于: 2016-04-13 18:17
    Public Class OmronFins
        Dim WithEvents OmronPLC As New System.IO.Ports.SerialPort
        Dim WithEvents T1 As New Timer
        Dim MLog As New MyFB.RunErrLog


        ''' <summary>
        ''' PLC返回字符
        ''' </summary>
        ''' <remarks></remarks>
        Dim PLCRtString As String

        ''' <summary>
        ''' =True 等待RS返回信息
        ''' </summary>
        ''' <remarks></remarks>
        Dim PLCBusyBit As Boolean = False
        Dim PLCCommd As Integer = 0

        Dim RtValue(19) As String
        Dim RtErrValue(19) As String


        Sub RS232PortSet(ByVal PortNum As Integer)

            Try
                With OmronPLC
                    .BaudRate = 38400
                    .StopBits = 2
                    .DataBits = 7
                    .Parity = IO.Ports.Parity.Even
                    .PortName = "COM" & PortNum
                    .ReceivedBytesThreshold = 1
                End With

                If OmronPLC.IsOpen = False Then
                    OmronPLC.Open()
                End If
            Catch ex As Exception
                MLog.LogErrWrite(ex.ToString)
            End Try



        End Sub

        Sub RS232PortClose()
            If OmronPLC.IsOpen = True Then
                OmronPLC.Close()
            End If
        End Sub

        Sub RS232SendMsg(ByVal SendString As String)
            Dim LenNum As Integer
            LenNum = SendString.Length
            If OmronPLC.IsOpen = True Then
                OmronPLC.Write(SendString)
            Else
                PLCBusyBit = False
            End If

        End Sub



        ''' <summary>
        ''' 20150525
        ''' Fins通訊計算校驗碼
        ''' </summary>
        ''' <param name="Value">傳入需要校驗內容</param>
        ''' <returns>返回Fins校驗值</returns>
        ''' <remarks></remarks>
        Public Function FinsFcsCheck(ByVal Value As String) As String

            Dim CheckValue As Integer
            Dim CheckHex As String

            For i As Integer = 1 To Value.Length
                CheckValue = Asc(Mid(Value, i, 1)) Xor CheckValue
            Next
            CheckHex = Hex(CheckValue)
            If CheckHex.Length < 2 Then
                CheckHex = "0" & CheckHex
            End If

        
            Return CheckHex


        End Function
        ''' <summary>
        ''' 20150526
        ''' 寫單個PLC值函數
        '''
        ''' </summary>
        ''' <param name="AddName"></param>
        ''' <param name="Value"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function SetValue(ByVal AddName As String, ByVal AddNum As Integer, ByVal Value As Integer) As Integer

            Dim AddNumHexLen As Integer '地址16進制長度
            Dim HexAddNum As String     '地址值轉到16進制
            Dim HCode As String = "@00FA000000000" '通訊表頭
            Dim CommandCode As String = "0102"    '通訊命令代碼
            Dim MemoryAreaCode As String          'PLC內存功能碼
            Dim BitNum As String = "00"           '位寫入需要寫數值 0-15;字寫如=0
            Dim WriteNum As String = "0001"        '寫PLC地址個數;單個寫入=0001
            Dim HexValue As String                '寫入數值轉換為16進制
            Dim FCSString As String               '需要校驗的字符串
            Dim FCSValue As String                '命令校驗碼
            Dim EndCode As String = "*" & vbCr    '結束碼
            Dim SenCode As String                 '發送到PLC字符串
            '*************************************************************************
            '修改版本20150526 新建
            '寫入數值到D
            '通訊發送命令
            'HCode & CommandCode & MemoryAreaCode  & HEXADDNum & BitNum & WriteNum & Value & FCS & EndCode
            '*************************************************************************


            Try
                If PLCBusyBit = False And OmronPLC.IsOpen Then
                    PLCCommd = 1
                    PLCBusyBit = True
                    '選擇寫入PLC地址類型
                    Select Case AddName
                        Case "D"
                            MemoryAreaCode = "82"
                        Case Else
                            Return 1000
                            Exit Function
                    End Select


                    '寫入地址轉換為HEX,計算長度是否=4;長度不夠補滿
                    HexAddNum = Hex(AddNum)
                    AddNumHexLen = HexAddNum.Length
                    Select Case AddNumHexLen
                        Case 1
                            HexAddNum = "000" & HexAddNum
                        Case 2
                            HexAddNum = "00" & HexAddNum
                        Case 3
                            HexAddNum = "0" & HexAddNum
                        Case 4
                            HexAddNum = HexAddNum
                        Case Else
                            Return 1001
                            Exit Function
                    End Select

                    '寫入數值轉換位16進制,計算長度=4;長度不夠布滿
                    HexValue = Hex(Value)
                    Select Case HexValue.Length
                        Case 1
                            HexValue = "000" & HexValue
                        Case 2
                            HexValue = "00" & HexValue
                        Case 3
                            HexValue = "0" & HexValue
                        Case 4
                            HexValue = HexValue
                        Case Else
                            Return 1002
                            Exit Function
                    End Select

                    FCSString = HCode & CommandCode & MemoryAreaCode & HexAddNum & BitNum & WriteNum & HexValue

                    FCSValue = FinsFcsCheck(FCSString)

                    SenCode = FCSString & FCSValue & EndCode
                    RS232SendMsg(SenCode)
                    ' Threading.Thread.Sleep(10)
                    '***************************************************
                    '20150608 返回結果處理

                    Dim StartTick As Integer
                    StartTick = Environment.TickCount
                    Do
                        If (Environment.TickCount - StartTick) > 1500 Then
                            '超時報警
                            PLCBusyBit = False
                            Return 9001
                            Exit Do
                        End If

                        If PLCBusyBit = False Then

                            Exit Do
                        End If
                        Application.DoEvents()
                    Loop

                    If RtErrValue(0) = "1" Then
                        Return 1
                    Else
                        '未知錯誤報警
                        Return 9002
                    End If
                Else

                    '通訊BUSY
                    Return 9003
                End If
            Catch ex As Exception
                ' MsgBox(ex.Message)
                MLog.LogErrWrite(ex.ToString)
            End Try




        End Function

        Public Function GetValue(ByVal AddName As String, ByVal AddNum As Integer, ByRef RtV As Integer) As Integer

            Dim AddNumHexLen As Integer '地址16進制長度
            Dim HexAddNum As String     '地址值轉到16進制
            Dim HCode As String = "@00FA000000000" '通訊表頭
            Dim CommandCode As String = "0101"    '通訊命令代碼
            Dim MemoryAreaCode As String          'PLC內存功能碼
            Dim BitNum As String = "00"           '位讀取需要寫數值 0-15;字讀入=0
            Dim ReadNum As String = "0001"        '讀PLC地址個數;單個寫入=0001
            'Dim HexValue As String                '寫入數值轉換為16進制
            Dim FCSString As String               '需要校驗的字符串
            Dim FCSValue As String                '命令校驗碼
            Dim EndCode As String = "*" & vbCr    '結束碼
            Dim SenCode As String                 '發送到PLC字符串
            '*************************************************************************
            '修改版本2015703 新建
            '讀D數值
            '通訊發送命令
            'HCode & CommandCode & MemoryAreaCode  & HEXADDNum & BitNum & ReadNum  & FCS & EndCode
            '*************************************************************************


            Try
                If PLCBusyBit = False And OmronPLC.IsOpen Then
                    PLCCommd = 1
                    PLCBusyBit = True
                    '選擇讀PLC地址類型
                    Select Case AddName
                        Case "D"
                            MemoryAreaCode = "82"
                        Case Else
                            Return 1000
                            Exit Function
                    End Select


                    '讀地址轉換為HEX,計算長度是否=4;長度不夠補滿
                    HexAddNum = Hex(AddNum)
                    AddNumHexLen = HexAddNum.Length
                    Select Case AddNumHexLen
                        Case 1
                            HexAddNum = "000" & HexAddNum
                        Case 2
                            HexAddNum = "00" & HexAddNum
                        Case 3
                            HexAddNum = "0" & HexAddNum
                        Case 4
                            HexAddNum = HexAddNum
                        Case Else
                            Return 1001
                            Exit Function
                    End Select



                    FCSString = HCode & CommandCode & MemoryAreaCode & HexAddNum & BitNum & ReadNum

                    FCSValue = FinsFcsCheck(FCSString)

                    SenCode = FCSString & FCSValue & EndCode
                    RS232SendMsg(SenCode)
                    ' Threading.Thread.Sleep(10)
                    '***************************************************
                    '20150608 返回結果處理

                    Dim StartTick As Integer
                    StartTick = Environment.TickCount
                    Do
                        If (Environment.TickCount - StartTick) > 1500 Then
                            '超時報警
                            PLCBusyBit = False
                            Return 9001
                            Exit Do
                        End If

                        If PLCBusyBit = False Then

                            Exit Do
                        End If
                        Application.DoEvents()
                    Loop

                    If RtErrValue(0) = "1" Then
                        RtV = Convert.ToInt32(RtValue(0), 16)
                        Return 1
                    Else
                        '未知錯誤報警
                        Return 9002
                    End If
                Else

                    '通訊BUSY
                    Return 9003
                End If
            Catch ex As Exception
                ' MsgBox(ex.Message)
                MLog.LogErrWrite(ex.ToString)
            End Try




        End Function

        Private Sub OmronPLC_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles OmronPLC.DataReceived
            Threading.Thread.Sleep(100)

            Dim ReadString As String
            If OmronPLC.IsOpen = True Then
                ReadString = OmronPLC.ReadExisting
                Call ReslutCount(ReadString)
            End If


            PLCBusyBit = False

        End Sub

        Sub ReslutCount(ByVal InputS As String)
            Dim FcsRead As String = String.Empty  '返回校驗碼
            Dim FcsCount As String = String.Empty '計算出校驗碼
            Dim RtCommand As String = String.Empty '返回命令
            Dim RtMsg As String = String.Empty '返回報警代碼
            Dim OKMsg As String = "0000"        '返回正確代碼
            Try
                If InputS.Length >= 25 Then
                    If Mid(Microsoft.VisualBasic.Right(InputS, 2), 1, 1) = "*" Then
                        PLCRtString = Mid(InputS, 1, InputS.Length - 4)
                        FcsRead = Mid(InputS, InputS.Length - 3, 2)
                        FcsCount = FinsFcsCheck(PLCRtString)
                        RtCommand = Microsoft.VisualBasic.Mid(PLCRtString, 16, 4)
                    End If

                    If FcsCount = FcsRead Then

                        Select Case RtCommand
                            Case "0101"
                                RtMsg = Microsoft.VisualBasic.Mid(PLCRtString, 20, 4)
                                If RtMsg = OKMsg Then
                                    '=1寫入PLC值正常
                                    RtValue(0) = Microsoft.VisualBasic.Mid(PLCRtString, 24, 4)
                                    RtErrValue(0) = "1"
                                    Exit Sub
                                End If

                            Case "0102"
                                RtMsg = Microsoft.VisualBasic.Mid(PLCRtString, 20, 4)
                                If RtMsg = OKMsg Then
                                    '=1寫入PLC值正常
                                    RtErrValue(0) = "1"
                                    Exit Sub
                                End If
                            Case Else
                                '不能識別通訊命令
                                RtErrValue(0) = "9002"
                                Exit Sub

                        End Select






                    Else
                        '返回校驗碼不對報警
                        RtErrValue(0) = "9001"
                    End If




                Else
                    '返回字符串長度不夠報警
                    RtErrValue(0) = "9000"

                End If
            Catch ex As Exception
                MLog.LogErrWrite(ex.ToString)
            End Try
          



        End Sub

        Sub ResetErr()
            Try
                If OmronPLC.IsOpen = True Then
                    OmronPLC.Close()
                End If


                If OmronPLC.IsOpen = False Then
                    OmronPLC.Open()
                End If

                PLCBusyBit = False
            Catch ex As Exception
                MLog.LogErrWrite(ex.ToString)
                MsgBox(ex.Message)
            End Try

        End Sub


    End Class
    本帖最近評分記錄:
  • 下載積分:+1(吃個鴨梨) 熱心助人!
  • 下載積分:+5(dujiang100) 熱心助人!
    shuangyu
    工控行業呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發帖數量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    2樓  發表于: 2016-04-13 18:20
    2015年一個項目寫的 工控機 與OMRON CP1H串口通訊, 使用FAINS 能夠穩定的讀寫數據;
    本帖最近評分記錄:
  • 下載積分:+1(oahz55) 熱心助人!
  • 下載積分:+1(靜水磐石) 厲害
    shuangyu
    工控行業呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發帖數量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    3樓  發表于: 2016-04-14 23:20
    線程 批量讀取

    主站蜘蛛池模板: 国产精品亲子伦对白 | 五月婷婷俺也去 | 日本黄色成人 | 久久精品国产熟女亚洲AV麻豆 | 91精品国产综合久久久久久久 | 亚洲欧洲日韩av | 麻豆视频在线观看 | 国产极品美女高潮无套嗷嗷叫酒店 | 在线伊人 | 黄色网页免费看 | www精品视频| 久久久久久电影 | 精品一区二区三区免费 | 老局长的粗大高h | 国产精品久久久久影院老司 | 婷婷丁香激情五月 | 美妇湿透娇羞紧窄迎合 | 亚洲另类av | 久久人体| 国产美女视频网站 | 一级大片免费看 | 人人射人人插 | 免费在线观看视频 | 手机在线免费观看av | 人人澡人人看 | 91欧美视频 | 国产三级第一页 | 啪啪免费| 亲女禁h啪啪宫交 | 荒野求生21天去码版网站 | 午夜视频在线免费看 | 巨乳动漫美女 | 精品综合久久久久 | 亚洲4p| 色香蕉网 | 国产精品av在线播放 | 免费无码肉片在线观看 | 调教撅屁股啪调教打臀缝av | 打屁屁日本xxxxx变态 | 国产精品久久国产精麻豆96堂 | 91美女片黄在线观看91美女 | 美女露出让男生揉的视频 | 欧美三日本三级少妇99 | 亚洲福利网址 | 国产不卡免费视频 | 亚洲国产专区 | 国产黄色视 | 潮喷失禁大喷水aⅴ无码 | 久久久一区二区 | 久久超级碰碰 | av手机版| 国产成人亚洲精品 | 久久午夜国产 | 久久福利影视 | 九九热视频在线播放 | 欧美一区二区三区系列电影 | 粉嫩一区 | 成人毛片软件 | 亚洲欧美日韩色 | 国产三级视频在线播放 | 里番精品3d一二三区 | 性欧美bb | 国产精品视频免费在线观看 | 美女在线网站 | 熟女一区二区三区四区 | 精品视频站长推荐 | 蜜桃网av| 成人看片在线观看 | 在线91观看 | 成年人的毛片 | 91综合网 | 亚洲精品国产精品国自产 | 胸网站| 国内自拍视频在线播放 | 一区二区三区高清不卡 | 成人黄色电影网址 | 国产精品你懂得 | 婷婷国产成人精品视频 | 国产同性人妖ts口直男 | 久久国产精品久久久久久电车 | 日韩精品一区二区三区中文在线 | 五月开心激情 | 亚洲国产果冻传媒av在线观看 | 亚洲第一成年人网站 | 日本一区二区三区网站 | 欧美激情国产日韩精品一区18 | 国产三级精品在线观看 | 亚洲一区图片 | av最新天 | 亚洲最新在线视频 | 亚洲综合图片网 | 九九热免费在线 | 四虎影院在线观看免费 | 成人免费视频播放 | 无套内谢大学处破女www小说 | 污视频软件在线观看 | 在线永久看片免费的视频 | 一级黄色片在线播放 | 欧美激情一二区 |