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 夜夜穞天天穞狠狠穞

dujiang100
我是一只小小鳥
級別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 426 個
工控威望: 642 點
下載積分: 1895 分
在線時間: 243(小時)
注冊時間: 2011-03-11
最后登錄: 2024-05-22
查看dujiang100的 主題 / 回貼
樓主  發(fā)表于: 2016-03-23 17:29
   最近在研究VB跟歐姆龍CP1H的通信.了解到可以用串口進(jìn)行HOSTLINK通信,還可以用以太網(wǎng)進(jìn)行FANS通信.CP1H沒有網(wǎng)口所以不可以用FANS通信嗎?串口通信情況下,PLC處于運行時寫入不了數(shù)據(jù),只有當(dāng)PLC是監(jiān)控狀態(tài)時才能寫入.這怎么能達(dá)到隨時寫入的目的呢?
本帖最近評分記錄:
  • 下載積分:+1(56071988)
    shuangyu
    工控行業(yè)呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    1樓  發(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進(jìn)制長度
            Dim HexAddNum As String     '地址值轉(zhuǎn)到16進(jìn)制
            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進(jìn)制
            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進(jìn)制,計算長度=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進(jìn)制長度
            Dim HexAddNum As String     '地址值轉(zhuǎn)到16進(jìn)制
            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進(jìn)制
            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 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    2樓  發(fā)表于: 2016-04-13 18:20
    2015年一個項目寫的 工控機 與OMRON CP1H串口通訊, 使用FAINS 能夠穩(wěn)定的讀寫數(shù)據(jù);
    本帖最近評分記錄:
  • 下載積分:+1(oahz55) 熱心助人!
  • 下載積分:+1(靜水磐石) 厲害
    shuangyu
    工控行業(yè)呆的越久越迷茫.......懂得多?少?......
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 329 個
    工控威望: 891 點
    下載積分: 1083 分
    在線時間: 115(小時)
    注冊時間: 2009-08-04
    最后登錄: 2024-07-12
    查看shuangyu的 主題 / 回貼
    3樓  發(fā)表于: 2016-04-14 23:20
    線程 批量讀取

    主站蜘蛛池模板: 4虎影院在线观看 | 久草在线观看福利视频 | 国产无遮挡aaa片爽爽 | 久久亚洲精品无码播放 | 一区二区三区四区产品乱 | 动漫美女h黄动漫在线观看 亚洲精品久久久日韩美女图片 | www91在线| 国产片av片永久免费观看 | 国产麻豆乱子伦午夜视频观看 | 欧美va天堂在线电影 | 亚洲成a人一区二区三区 | 国产成人在线观看免费网站 | 18禁黄无码免费网站高潮 | 亚洲aⅴ无码专区在线观看春色 | 国产国产人免费人成免费视频 | 国自产拍偷拍精品啪啪一区二区 | 香草乱码一二三四区别 | 国精品无码一区二区三区在线a片 | 日韩裸体人体欣赏pics | 免费的黄色大片 | 亚洲国产日韩在线视频 | 免费视频好湿好紧好大好爽 | 精品亚洲国产成人av制服 | 精品亚洲综合成人网 | 爱福利视频网 | 看全色黄大色黄女片爽名优 | 日韩久久久久久久久 | 91大神精品视频 | 亚洲天堂中文字幕在线观看 | 人妻丰满熟妇av无码处处不卡 | 国产毛片久久久久久美女视频 | 波多野结衣99 | 国产成人精品午夜片在线观看 | 日本囗交全过程无遮挡 | 精品中出| 插b内射18免费视频 91黄视频在线观看 亚洲男人av天堂男人社区 | 日韩人妻无码精品久久久不卡 | 在线看片a| 亚洲午夜av久久久精品影院 | 成人免费av网站 | 少妇乳大丰满诱人成熟 大胆 | 在线视频18在线视频4k | 天天操天天色综合 | 久久久久无码精品亚洲日韩 | 多毛小伙内射老太婆 | 国产精品一区二区三区四区五区 | 亚洲无人区码一码二码三码的含义 | www.色播.com | 中文字幕av久久爽 | 韩日综合成人中文字幕 | 国产欧美视频在线 | 国产精品人妻久久ai换脸 | 国产av无码日韩av无码网站 | 99在线播放视频 | 亚洲成人日韩 | 人人爽人人爽人人片a | 一本在线道| 中文字幕乱码在线蜜乳欧美字幕 | 人人草人人做人人爱 | 七月丁香五月婷婷首页 | 久久亚洲精选 | 秋霞无码久久久精品交换 | 欧产日产国产精品乱噜噜 | 一级特黄aa大片 | 狠狠躁夜夜躁av蜜臀少妇 | 99偷拍视频精品一区二区 | 國产一二三内射在线看片 | 在线观看免费人成视频网 | 久久国产精品大桥未久av | 亚洲另类在线视频 | 日韩精品一区二区三区第95 | 欧美日韩一级在线观看 | 色欲香天天天综合网站 | 久久国产一二区 | 欧美成 人版在线观看 | 桃色成人网 | 色综合天天 | 最近免费观看高清韩国日本大全 | 久久精品国产99国产精品图片 | 一本加勒比hezyo黑人 | 国产农村乱辈无码 | 伊人春色在线 | 337p亚洲精品色噜噜噜 | 成人三级视频在线观看一区二区 | 无码专区狠狠躁躁天天躁 | 无码国产色欲xxxxx视频 | 伊人www | 夜夜摸夜夜操 | 超碰免费观看 | 波多野无码中文字幕av专区 | 国产精品久久久久久久久鸭无码 | 欧美特级a | 清纯唯美经典一区二区 | 亚洲熟妇av欧差aa片爽 | 丰满老女人乱妇dvd在线播放 | 高清亚洲 | 国产做a爰片久久毛片a片 | 深夜男女福利18免费软件 | 男人j进入女人j内部免费网站 |