九九热九九I在线观看i国产女优视频i中文字幕人成高清i欧美亚洲日本一区二I久久久久acI伊人在线视频网站I久久久久IVI中文字幕永久有效I9爱在线观看一区I久久鲁一鲁I国产精品98I天天综合网7799I大香蕉资源站I真人高清无码

dujiang100
我是一只小小鳥
級別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 426 個
工控威望: 642 點
下載積分: 2083 分
在線時間: 243(小時)
注冊時間: 2011-03-11
最后登錄: 2024-05-22
查看dujiang100的 主題 / 回貼
樓主  發(fā)表于: 2016-03-23 17:29
   最近在研究VB跟歐姆龍CP1H的通信.了解到可以用串口進行HOSTLINK通信,還可以用以太網(wǎng)進行FANS通信.CP1H沒有網(wǎng)口所以不可以用FANS通信嗎?串口通信情況下,PLC處于運行時寫入不了數(shù)據(jù),只有當(dāng)PLC是監(jiān)控狀態(tài)時才能寫入.這怎么能達到隨時寫入的目的呢?
本帖最近評分記錄:
  • 下載積分:+1(56071988)
    tkggtdkjpl
    工欲善其事,必先利其器!
    級別: 網(wǎng)絡(luò)英雄

    精華主題: 1 篇
    發(fā)帖數(shù)量: 3418 個
    工控威望: 25033 點
    下載積分: 2174 分
    在線時間: 1860(小時)
    注冊時間: 2010-01-03
    最后登錄: 2026-03-21
    查看tkggtdkjpl的 主題 / 回貼
    1樓  發(fā)表于: 2016-03-23 21:29
    將PLC的運行模式改為監(jiān)控模式就行了!
    本帖最近評分記錄:
  • 下載積分:+1(dujiang100) 真誠感謝!
  • 自動化單機,生產(chǎn)線,項目編程調(diào)試!
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 426 個
    工控威望: 642 點
    下載積分: 2083 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    2樓  發(fā)表于: 2016-03-26 09:45
    研究了幾天,終于明白,FINS協(xié)議也可以通過串口和PLC通信上
    xyzenter
    活在當(dāng)下,順其自然
    級別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 130 個
    工控威望: 266 點
    下載積分: 2268 分
    在線時間: 108(小時)
    注冊時間: 2014-04-09
    最后登錄: 2021-04-13
    查看xyzenter的 主題 / 回貼
    3樓  發(fā)表于: 2016-03-28 15:19
          FINS通訊命令,0401可以讓PLC進入運行/監(jiān)控模式,0402可以讓PLC進入停止模式。
          實測用0402讓PLC停止后還可以用0101和0102對DM區(qū)進行讀寫。
          另:串口的hostlink模式FINS命令只能上位機控制PLC,PLC無法主動發(fā)數(shù)據(jù)給上位機。通過看w227文件,發(fā)現(xiàn)FINS幀格式自由度比較高,理論上來講可以通過修改幀里面的命令符進行PLC通過串口對上位機發(fā)送數(shù)據(jù),就好像用以太網(wǎng)發(fā)送一樣。但是歐姆龍PLC說明書里面并沒這方面的介紹。目前來說,PLC通過串口主動發(fā)數(shù)據(jù)給上位機發(fā)送數(shù)據(jù)要用無協(xié)議通訊。但是無協(xié)議通訊的話上位機無法控制PLC的開關(guān)狀態(tài)。小弟剛學(xué)歐姆龍通訊,好多東西還不懂,望論壇各位前輩不吝賜教。
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 426 個
    工控威望: 642 點
    下載積分: 2083 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    4樓  發(fā)表于: 2016-04-01 10:16
    不用PLC發(fā),上位機不斷的讀取就可以了.FINS協(xié)議是最好的.在運行時可以對PLC進行讀,寫操作.HOSTLINK在PLC運行時可以讀,但要寫入必須把PLC改成監(jiān)控模式,太煩.
    mylinden
    工控閑人
    級別: 探索解密
    精華主題: 0
    發(fā)帖數(shù)量: 69 個
    工控威望: 196 點
    下載積分: 3214 分
    在線時間: 490(小時)
    注冊時間: 2012-12-16
    最后登錄: 2025-12-05
    查看mylinden的 主題 / 回貼
    5樓  發(fā)表于: 2016-04-03 23:39
    可以用FINS tcp/ip
    zhou5245
    級別: 探索解密
    精華主題: 0
    發(fā)帖數(shù)量: 52 個
    工控威望: 177 點
    下載積分: 16840 分
    在線時間: 184(小時)
    注冊時間: 2012-02-23
    最后登錄: 2026-01-19
    查看zhou5245的 主題 / 回貼
    6樓  發(fā)表于: 2016-04-06 22:02
    Use for Fins TCP/IP.
    shuangyu
    工控行業(yè)呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 329 個
    工控威望: 891 點
    下載積分: 1271 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    7樓  發(fā)表于: 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">傳入需要校驗內(nèi)容</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值函數(shù)
        '''
        ''' </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     '地址值轉(zhuǎn)到16進制
            Dim HCode As String = "@00FA000000000" '通訊表頭
            Dim CommandCode As String = "0102"    '通訊命令代碼
            Dim MemoryAreaCode As String          'PLC內(nèi)存功能碼
            Dim BitNum As String = "00"           '位寫入需要寫數(shù)值 0-15;字寫如=0
            Dim WriteNum As String = "0001"        '寫PLC地址個數(shù);單個寫入=0001
            Dim HexValue As String                '寫入數(shù)值轉(zhuǎn)換為16進制
            Dim FCSString As String               '需要校驗的字符串
            Dim FCSValue As String                '命令校驗碼
            Dim EndCode As String = "*" & vbCr    '結(jié)束碼
            Dim SenCode As String                 '發(fā)送到PLC字符串
            '*************************************************************************
            '修改版本20150526 新建
            '寫入數(shù)值到D
            '通訊發(fā)送命令
            '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


                    '寫入地址轉(zhuǎn)換為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

                    '寫入數(shù)值轉(zhuǎn)換位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 返回結(jié)果處理

                    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     '地址值轉(zhuǎn)到16進制
            Dim HCode As String = "@00FA000000000" '通訊表頭
            Dim CommandCode As String = "0101"    '通訊命令代碼
            Dim MemoryAreaCode As String          'PLC內(nèi)存功能碼
            Dim BitNum As String = "00"           '位讀取需要寫數(shù)值 0-15;字讀入=0
            Dim ReadNum As String = "0001"        '讀PLC地址個數(shù);單個寫入=0001
            'Dim HexValue As String                '寫入數(shù)值轉(zhuǎn)換為16進制
            Dim FCSString As String               '需要校驗的字符串
            Dim FCSValue As String                '命令校驗碼
            Dim EndCode As String = "*" & vbCr    '結(jié)束碼
            Dim SenCode As String                 '發(fā)送到PLC字符串
            '*************************************************************************
            '修改版本2015703 新建
            '讀D數(shù)值
            '通訊發(fā)送命令
            '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


                    '讀地址轉(zhuǎn)換為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 返回結(jié)果處理

                    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
    工控行業(yè)呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 329 個
    工控威望: 891 點
    下載積分: 1271 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    8樓  發(fā)表于: 2016-04-13 18:20
    2015年一個項目寫的 工控機 與OMRON CP1H串口通訊, 使用FAINS 能夠穩(wěn)定的讀寫數(shù)據(jù);
    本帖最近評分記錄:
  • 下載積分:+1(oahz55) 熱心助人!
  • 下載積分:+1(靜水磐石) 厲害
    xyzenter
    活在當(dāng)下,順其自然
    級別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 130 個
    工控威望: 266 點
    下載積分: 2268 分
    在線時間: 108(小時)
    注冊時間: 2014-04-09
    最后登錄: 2021-04-13
    查看xyzenter的 主題 / 回貼
    9樓  發(fā)表于: 2016-04-14 11:32
          如果用HostLink通訊,F(xiàn)INS指令,上位機要等待PLC某些步驟準(zhǔn)備好,就要上位機監(jiān)控PLC某位是否是設(shè)定值,那就需要不斷循環(huán)地發(fā)讀指令,這時候串口一直在工作,上位機程序一直調(diào)用串口函數(shù),這樣會顯得很繁忙,整個程序的資源都被串口收發(fā)給占用了,程序經(jīng)常處在假死狀態(tài)。這樣的程序顯然是有很大缺陷的。
          最好的解決辦法當(dāng)然是用中斷來代替循環(huán)等待。然而,F(xiàn)INS指令無法讓PLC主動發(fā)送就緒信號,無法提供這個中斷。哪位高手有辦法解決這個問題?
    shuangyu
    工控行業(yè)呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 329 個
    工控威望: 891 點
    下載積分: 1271 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    10樓  發(fā)表于: 2016-04-14 23:20
    線程 批量讀取
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 426 個
    工控威望: 642 點
    下載積分: 2083 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    11樓  發(fā)表于: 2016-04-21 16:47
    然而VB6是單線程的.

    主站蜘蛛池模板: 亚洲综合在线第一页 | 色综合av男人的天堂伊人 | 激情内射人妻1区2区3区 | 国产精品乱码一区二区三 | 人妻少妇乱子伦精品无码专区电影 | 国外成人免费视频 | 国产女人水真多18毛片18精品视频 | 亚洲爆乳无码专区 | 五月天丁香综合久久国产 | 波多野结衣在线观看一码 | 欧美 亚洲 另类 激情 另类 | 手机免费看av | 午夜激情在线观看 | 国产成人免费看 | 日本一道一区二区视频 | 亚洲天堂视频网站 | 黄色av免费在线看 | 国产精品亚洲一区二区 | 亚洲国产精品久久久久秋霞影院 | 日本大码a∨欧美在线 | 午夜欧美视频 | 青草视频在线 | 色综合久久伊人 | 激情综合色综合啪啪五月丁香搜索 | 另类小说五月天 | 国产a一区 | 中国人与牲禽动交精品 | 五月天爱爱| 国产又粗又猛又色又 | 午夜性视频国产牛牛视频 | 午夜精品久久久久久久四虎美女版 | 奇米777四色成人影视 | 美女国产网站 | 免费无码黄十八禁网站在线观看 | 18禁又污又黄又爽的网站不卡 | 在线观看色网 | 国产在线孕妇孕交 | 久久se精品一区精品二区 | 最新国产在线拍揄自揄视频 | 午夜乱码爽中文一区二区 | 亚洲色在线v中文字幕 | 精品人妻系列无码一区二区三区 | 亚洲精品久久久久久一区 | www.五月婷婷.com | 欧美专区一区二区三区 | 躁躁躁日日躁 | 美女张开腿黄网站免费下载 | 公么大龟弄得我好舒服秀婷视频 | 激情内射亚洲一区二区三区爱妻 | 天天干夜夜想 | 日韩欧美专区 | 久久在线视频精品 | 在线播放亚洲人成电影 | 91传媒理伦片在线观看 | 日本免费在线视频 | 久久久二区 | 久久αv| 欧洲精品久久久av无码电影 | 欧美精品人人做人人爱视频 | 日韩版在线看免费 | 青青草国产午夜精品 | 中文字幕精品久久久久 | 欧美国产成人久久精品 | 日本三线免费视频观看 | 国产精品青草久久福利不卡 | 国产精品国产三级国产aⅴ下载 | 国产精品狼人久久久久影院 | 四虎影音先锋 | 国内精品少妇在线播放98 | 一本色道久久综合亚洲 | 亚洲精品久久久日韩美女极品 | 亚洲亚洲中文字幕无线码 | 综合激情四射 | 国产乱码人妻一区二区三区四区 | 国内爆初菊对白视频 | 奇米777四色精品综合影院 | 人人爽人人爽人人 | 亚洲精品自产拍在线观看亚瑟 | 性猛交xxxxx富婆免费 | jzzijzzij亚洲成熟少妇18 久久亚洲成人av | 国精产品推荐视频 | 中国xxxx真实偷拍老妇 | 中文字幕乱偷在线 | 国内精品一区二区福利视频 | 成人在线精品视频 | 亚洲天天影院色香欲综合 | 亚洲综合网站精品一区二区 | 高清有码国产一区二区 | 国产第六页 | 久久亚洲精品无码av宋 | 中国一级特黄毛片大片久久 | 国产精品伦一区二区三区 | 亚洲春色另类 | 美日韩在线视频一区二区三区 | 乡下人产国偷v产偷v自拍 | 亚洲精品精华液一区二区 | 日韩亚洲欧美综合 | 色天天躁夜夜躁天干天干 | 一级片免费在线看 |