91黄动漫 I 欧美 日韩 国产 成人 在线 I a级成人毛片 I 农村黄色片 I 男生捅女生的肌肌 I 精品99一区二区三区 I 妃光莉av I 日日夜夜操操 I 性中国古装videossex I 久久不卡av I 美女高潮动态图 I 极品美女开粉嫩精品 I 牛牛精品一区二区 I 91精品福利视频 I 成人刺激视频 I 91国内精品视频 I 中国一级特黄毛片大片 I 校长狠狠挺进校花体内小说 I 欧美激情黄色片 I 欧美久久久一区 I 爱豆国产剧免费观看大全剧苏畅 I 麻豆国产人妻欲求不满谁演的 I 亚洲一区二区在线免费观看视频 I 国产超碰av人人做人人爽 I 精品国产第一国产综合精品 I 久久免费看av I 欧美一区二区三区白人 I 国产精品夫妻激情 I 校花被肉干高h潮不断 I 欧美最猛黑人xxxx黑人表情 I 国产欧美日韩一区二区搜索 I 极品女神露脸呻吟啪啪 I 人人天天久久 I 亚洲动漫在线 I 日本91福利区 I 五月天 桃色 开心 I av在线免费观看国产 I 男人添女人的免费视频 I 夜夜穞天天穞狠狠穞

  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
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)
    tkggtdkjpl
    工欲善其事,必先利其器!
    級別: 網絡英雄

    精華主題: 1 篇
    發帖數量: 3412 個
    工控威望: 21027 點
    下載積分: 39604 分
    在線時間: 1839(小時)
    注冊時間: 2010-01-03
    最后登錄: 2025-12-13
    查看tkggtdkjpl的 主題 / 回貼
    1樓  發表于: 2016-03-23 21:29
    將PLC的運行模式改為監控模式就行了!
    本帖最近評分記錄:
  • 下載積分:+1(dujiang100) 真誠感謝!
  • 自動化單機,生產線,項目編程調試!
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發帖數量: 426 個
    工控威望: 642 點
    下載積分: 1895 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    2樓  發表于: 2016-03-26 09:45
    研究了幾天,終于明白,FINS協議也可以通過串口和PLC通信上
    xyzenter
    活在當下,順其自然
    級別: 略有小成
    精華主題: 0
    發帖數量: 130 個
    工控威望: 266 點
    下載積分: 2080 分
    在線時間: 108(小時)
    注冊時間: 2014-04-09
    最后登錄: 2021-04-13
    查看xyzenter的 主題 / 回貼
    3樓  發表于: 2016-03-28 15:19
          FINS通訊命令,0401可以讓PLC進入運行/監控模式,0402可以讓PLC進入停止模式。
          實測用0402讓PLC停止后還可以用0101和0102對DM區進行讀寫。
          另:串口的hostlink模式FINS命令只能上位機控制PLC,PLC無法主動發數據給上位機。通過看w227文件,發現FINS幀格式自由度比較高,理論上來講可以通過修改幀里面的命令符進行PLC通過串口對上位機發送數據,就好像用以太網發送一樣。但是歐姆龍PLC說明書里面并沒這方面的介紹。目前來說,PLC通過串口主動發數據給上位機發送數據要用無協議通訊。但是無協議通訊的話上位機無法控制PLC的開關狀態。小弟剛學歐姆龍通訊,好多東西還不懂,望論壇各位前輩不吝賜教。
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發帖數量: 426 個
    工控威望: 642 點
    下載積分: 1895 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    4樓  發表于: 2016-04-01 10:16
    不用PLC發,上位機不斷的讀取就可以了.FINS協議是最好的.在運行時可以對PLC進行讀,寫操作.HOSTLINK在PLC運行時可以讀,但要寫入必須把PLC改成監控模式,太煩.
    mylinden
    工控閑人
    級別: 探索解密
    精華主題: 0
    發帖數量: 69 個
    工控威望: 196 點
    下載積分: 3026 分
    在線時間: 490(小時)
    注冊時間: 2012-12-16
    最后登錄: 2025-12-05
    查看mylinden的 主題 / 回貼
    5樓  發表于: 2016-04-03 23:39
    可以用FINS tcp/ip
    zhou5245
    級別: 探索解密
    精華主題: 0
    發帖數量: 52 個
    工控威望: 177 點
    下載積分: 16652 分
    在線時間: 184(小時)
    注冊時間: 2012-02-23
    最后登錄: 2025-12-10
    查看zhou5245的 主題 / 回貼
    6樓  發表于: 2016-04-06 22:02
    Use for Fins TCP/IP.
    shuangyu
    工控行業呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發帖數量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    7樓  發表于: 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的 主題 / 回貼
    8樓  發表于: 2016-04-13 18:20
    2015年一個項目寫的 工控機 與OMRON CP1H串口通訊, 使用FAINS 能夠穩定的讀寫數據;
    本帖最近評分記錄:
  • 下載積分:+1(oahz55) 熱心助人!
  • 下載積分:+1(靜水磐石) 厲害
    xyzenter
    活在當下,順其自然
    級別: 略有小成
    精華主題: 0
    發帖數量: 130 個
    工控威望: 266 點
    下載積分: 2080 分
    在線時間: 108(小時)
    注冊時間: 2014-04-09
    最后登錄: 2021-04-13
    查看xyzenter的 主題 / 回貼
    9樓  發表于: 2016-04-14 11:32
          如果用HostLink通訊,FINS指令,上位機要等待PLC某些步驟準備好,就要上位機監控PLC某位是否是設定值,那就需要不斷循環地發讀指令,這時候串口一直在工作,上位機程序一直調用串口函數,這樣會顯得很繁忙,整個程序的資源都被串口收發給占用了,程序經常處在假死狀態。這樣的程序顯然是有很大缺陷的。
          最好的解決辦法當然是用中斷來代替循環等待。然而,FINS指令無法讓PLC主動發送就緒信號,無法提供這個中斷。哪位高手有辦法解決這個問題?
    shuangyu
    工控行業呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發帖數量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    10樓  發表于: 2016-04-14 23:20
    線程 批量讀取
    dujiang100
    我是一只小小鳥
    級別: 家園常客
    精華主題: 0
    發帖數量: 426 個
    工控威望: 642 點
    下載積分: 1895 分
    在線時間: 243(小時)
    注冊時間: 2011-03-11
    最后登錄: 2024-05-22
    查看dujiang100的 主題 / 回貼
    11樓  發表于: 2016-04-21 16:47
    然而VB6是單線程的.
    • «
    • 1
    • 2
    • »
    • Pages: 1/2     Go

    主站蜘蛛池模板: 男人j进入女人j内部免费网站 | 精品99又大又爽又硬少妇毛片 | av新网址 | 熟女内射v888av | 无码国产精品一区二区免费虚拟vr | 99国产欧美精品久久久蜜芽 | 最近中文字幕免费 | 真实国产熟睡乱子伦视频 | 性欧美精品中出 | 18禁裸乳啪啪无遮裆网站 | 一本色道久久加勒比88综合 | 亚洲精品无码久久久久秋霞 | 亚洲性视频在线 | 欧美性视频网站 | 熟妇人妻无乱码中文字幕 | 91综合久久爱com | 综合无码成人aⅴ视频在线观看 | 四虎影院在线免费 | 91中文字幕在线 | 亚洲天堂网在线播放 | 久久96国产精品久久99软件 | 中文久久字幕 | 中日韩黄色大片 | 青青草伊人久久 | 欧美日韩综合一区二区三区 | 亚欧中文字幕久久精品无码 | 国自产拍偷拍精品啪啪一区二区 | 无线日本视频精品 | 波多野结衣一二三 | 成人中文字幕+乱码+中文字幕 | 中文字幕无码av免费久久 | 亚洲欧美综合 | 欧美大喷水吹潮合集在线观看 | 9色在线 | 久操资源在线 | 色综合久久网 | 婷婷综合视频 | 欧美人成网站在线看 | 一级做a爱片性色毛片 | 人妻精品丝袜一区二区无码av | 国产视频一区在线播放 | 国产91成人欧美精品另类动态 | 亚洲成a人 | 色婷婷五月综合欧美图片 | 国产成人乱码一二三区18 | 精品国产髙清在线看国产毛片 | 日韩a人毛片精品无人区乱码 | 色哟哟在线视频精品一区 | 精品人妻系列无码一区二区三区 | 国产原创视频在线观看 | 亚洲精品日韩中文字幕久久久 | 青青草久久 | 国产欧美一区二区视频 | 亚洲美腿 欧美 激情 另类 | 亚洲天堂男人网 | 毛片tv网站无套内射tv网站 | 无码一区二区免费波多野播放搜索 | 欧美一级免费看 | 国产cdts系列另类在线观看 | 色吊丝最新网址 | 99精品视频在线观看免费蜜桃 | 亚洲国产精品久久久久网站 | 一区二区在线 | 国 亚洲精品成人片在线观看精品字幕 | 99久久成人精品国产网站 | 三上悠亚中文字幕在线播放 | 97人人搞| 一区二区三区高清视频3 | 亚洲欧美国产精品专区久久 | 色噜噜狠狠综曰曰曰 | 国内精品久久久久影院免费 | 久久精品午夜 | 久久综合久久88中字幕文 | vr成人啪啪影视 | 国产男女猛烈无遮挡免费视频网站 | 午夜精品久久久久久久久久久久 | 人妻少妇乱子伦无码专区 | 天天躁日日躁狠狠躁视频2021 | 国产一区二区三区黄 | 日韩一区二区在线视频 | 国内精品久久久久久久影视红豆 | 婷婷亚洲精品 | 国产bbbbbxxxxx精品 | 国产福利高清在线视频 | 肉色丝袜脚交一区二区三区 | 欧美精品18videos性欧美 | 国产91在线观 | 91日韩欧美 | 欧美一级二级在线观看 | 国产aⅴ视频免费观看 | 中国精品无码免费专区午夜 | 日韩免费一区 | 中文字幕aav | 91麻豆精品一二三区在线 | 男女性动态激烈动全过程 | 少妇高潮水多太爽了动态图 | 91看片免费在线观看 | 伊人久久大香线蕉亚洲五月天 | 激情综合一区二区三区 | 男阳茎进女阳道视频大全 |