91精品国产麻豆_国产精品综合二区_国产麻豆一精品一av一免费_国产亚洲成aⅴ人片在线观看_亚洲国产你懂的_国产精品美女www爽爽爽_久久久精品免费网站_久久久av毛片精品_国产精品二三区_成人欧美一区二区三区1314_狠狠色2019综合网_欧美一级高清片在线观看_乱中年女人伦av一区二区_成人黄动漫网站免费app_久久影院午夜论_亚洲色图清纯唯美

咨詢熱線

18621916738

當(dāng)前位置:首頁  >  技術(shù)文章  >  西門子S7-200 ModBus從站通訊程序

西門子S7-200 ModBus從站通訊程序

更新時間:2016-01-04      點擊次數(shù):2420

西門子S7-200 ModBus從站通訊程序

一直看到有些朋友在問ModBus主從站的通訊問題,今天抽空兒給大家發(fā)幾篇。

事先申明,我是調(diào)用的主從站庫,庫本身并不是我編寫的,我沒有那么大的能耐。

另外,上位機是用VB編寫,VB本身不是很熟,如果有什么錯誤,請大家海諒。

zui后,這僅僅只是一個測試程序,如果各位想用到商業(yè)方面,還需要各位自己去完善。

說明:PLC從站,PC作主站,用ModBus協(xié)議進行通訊。PC機讀取PLCVW區(qū)的數(shù)據(jù);PC機還讀取PLC內(nèi)部I或者O地址的狀態(tài)。

///////////////////////////////////////

以下是PLC程序?qū)崿F(xiàn),方便貼出,已轉(zhuǎn)換為STL

TITLE=程序注釋

Network 1 // 網(wǎng)絡(luò)標(biāo)題

// 在*個循環(huán)周期內(nèi)初始化Modbus從站協(xié)議

LD SM0.1

CALL SBR3, 1, 12, 9600, 0, 0, 128, 32, 1000, &VB0, M10.1, MB11

Network 2 

// 在每個循環(huán)周期內(nèi)執(zhí)行Modbus 從站協(xié)議

LD SM0.0

CALL SBR1, M10.2, MB12

Network 3 

LD SM0.0

MOVW AIW0, VW100

/I +54, VW100

MOVW AIW2, VW102

/I +54, VW102

MOVW AIW4, VW104

/I +54, VW104

MOVW AIW6, VW106

/I +54, VW106

Network 4 

LD SM0.0

= Q0.0

Network 5 

LD I0.0

= Q0.1

Network 6 

LD I0.1

= Q0.2

///////////////////////////////////

以下是VB源碼

Option Explicit

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim x1

Dim p11, p12, p13, p14, p15, p16, p17, p18

Function CRC16(data() As Byte) As String

Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器

Dim CL As Byte, CH As Byte '多項式碼&HA001

Dim SaveHi As Byte, SaveLo As Byte

Dim i As Integer

Dim Flag As Integer

CRC16Lo = &HFF

CRC16Hi = &HFF

CL = &H1

CH = &HA0

For i = 0 To UBound(data)

CRC16Lo = CRC16Lo Xor data(i) '每一個數(shù)據(jù)與CRC寄存器進行異或

For Flag = 0 To 7

SaveHi = CRC16Hi

SaveLo = CRC16Lo

CRC16Hi = CRC16Hi \ 2 '高位右移一位

CRC16Lo = CRC16Lo \ 2 '低位右移一位

If ((SaveHi And &H1) = &H1) Then '如果高位字節(jié)zui后一位為1

CRC16Lo = CRC16Lo Or &H80 '則低位字節(jié)右移后前面補1

End If '否則自動補0

If ((SaveLo And &H1) = &H1) Then '如果LSB為1,則與多項式碼進行異或

CRC16Hi = CRC16Hi Xor CH

CRC16Lo = CRC16Lo Xor CL

End If

Next Flag

Next i

Dim ReturnData(1) As Byte

ReturnData(0) = CRC16Hi 'CRC高位

ReturnData(1) = CRC16Lo 'CRC低位

CRC16 = ReturnData

End Function

Private Sub About_Click()

frmAbout.Show

End Sub

Private Sub Form_Load() '初始化

Timer1.Enabled = False '定時器1無效

Timer1.Interval = 1000 '定時器1時間為1S

Timer2.Enabled = True '定時器2有效

Timer2.Interval = 1000 '定時器2時間為1S

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text4.Text = ""

Text5.Text = ""

Text6.Text = ""

Text8.Text = ""

Text10.Text = ""

MSComm1.CommPort = 1 '設(shè)定端口號

MSComm1.Settings = "9600,n,8,1" '設(shè)定通訊波特率

MSComm1.InBufferSize = 1024 '接收緩沖器大小

MSComm1.OutBufferSize = 1024 '輸出緩沖器大小

MSComm1.InputMode = comInputModeBinary '以二進制傳輸

MSComm1.RThreshold = 1 '

MSComm1.SThreshold = 0

MSComm1.InputLen = 0 '讀取接收緩沖器所有字符

MSComm1.OutBufferCount = 0 '清空發(fā)送緩沖區(qū)

MSComm1.InBufferCount = 0 '清空接收緩沖區(qū)

If MSComm1.PortOpen = False Then

Command3.Caption = "打開串口"

Else

Command3.Caption = "關(guān)閉串口"

End If

End Sub

Private Sub Command1_Click()

Timer1.Enabled = True

End Sub

Private Sub Command2_Click() '退出程序,定時器1無效

Timer1.Enabled = False

Cls

Unload Me

End Sub

Private Sub Command3_Click()

On Error Resume Next

If MSComm1.PortOpen = False Then

MSComm1.PortOpen = True

Else

MSComm1.PortOpen = False

End If

If MSComm1.PortOpen Then '打開關(guān)閉按鈕顯示文字

Command3.Caption = "關(guān)閉串口"

Else

Command3.Caption = "打開串口"

End If

If Err Then '打開串口失敗,則顯示出錯信息

MsgBox Error$, 48, "錯誤信息"

Exit Sub

End If

End Sub

Private Sub Timer1_Timer() '讀V存儲區(qū)數(shù)據(jù)

Dim CRC() As Byte

Dim FGetData As String

Dim aa() As Byte

Dim s As String

Dim str As String

Dim i As Integer

Dim bb, cc As String

ReDim aa(5) As Byte '定義動態(tài)數(shù)組

aa(0) = &HC

aa(1) = &H3

aa(2) = &H0

aa(3) = &H32

aa(4) = &H0

aa(5) = &H4

CRC = CRC16(aa)

str = CRC

s = ""

For i = 1 To LenB(str)

s = s + Hex(AscB(MidB(str, i, 1)))

Next i

bb = Right(s, 2)

cc = Mid(s, 1, 2)

If Len(s) < 4 Then

cc = Mid(s, 1, 1)

End If

ReDim Preserve aa(0 To 7) As Byte

aa(6) = Val("&H" & bb)

aa(7) = Val("&H" & cc)

MSComm1.OutBufferCount = 0 '清空輸出寄存器

MSComm1.Output = aa

FGetData = ReceiveData

Text5.Text = FGetData

p11 = Val("&H" & Mid(FGetData, 7, 4))

p12 = Val("&H" & Mid(FGetData, 11, 4))

p13 = Val("&H" & Mid(FGetData, 15, 4))

p14 = Val("&H" & Mid(FGetData, 19, 4))

End Sub

Private Sub Command4_Click() 'I狀態(tài)

Dim CRC() As Byte

Dim FGetData As String

Dim aa() As Byte

Dim s As String

Dim str As String

Dim i As Integer

Dim bb, cc As String

ReDim aa(5) As Byte '定義動態(tài)數(shù)組

aa(0) = &HC

aa(1) = &H2

aa(2) = &H0

aa(3) = &H0

aa(4) = &H0

aa(5) = &H1

CRC = CRC16(aa)

str = CRC

s = ""

For i = 1 To LenB(str)

s = s + Hex(AscB(MidB(str, i, 1)))

Next i

bb = Right(s, 2)

cc = Mid(s, 1, 2)

If Len(s) < 4 Then

cc = Mid(s, 1, 1)

End If

ReDim Preserve aa(0 To 7) As Byte

aa(6) = Val("&H" & bb)

aa(7) = Val("&H" & cc)

MSComm1.OutBufferCount = 0 '清空輸出寄存器

MSComm1.Output = aa

FGetData = IReceiveData

p17 = Val("&H" & Mid(FGetData, 7, 2))

p18 = Val("&H" & Mid(FGetData, 9, 2))

End Sub

Private Sub Command5_Click() 'Q狀態(tài)

Dim CRC() As Byte

Dim FGetData As String

Dim aa() As Byte

Dim s As String

Dim str As String

Dim i As Integer

Dim bb, cc As String

ReDim aa(5) As Byte '定義動態(tài)數(shù)組

aa(0) = &HC

aa(1) = &H1

aa(2) = &H0

aa(3) = &H0

aa(4) = &H0

aa(5) = &H1

CRC = CRC16(aa)

str = CRC

s = ""

For i = 1 To LenB(str)

s = s + Hex(AscB(MidB(str, i, 1)))

Next i

bb = Right(s, 2)

cc = Mid(s, 1, 2)

If Len(s) < 4 Then

cc = Mid(s, 1, 1)

End If

ReDim Preserve aa(0 To 7) As Byte

aa(6) = Val("&H" & bb)

aa(7) = Val("&H" & cc)

MSComm1.OutBufferCount = 0 '清空輸出寄存器

MSComm1.Output = aa

FGetData = QReceiveData

p15 = Val("&H" & Mid(FGetData, 7, 2))

p16 = Val("&H" & Mid(FGetData, 9, 2))

End Sub

Private Function ReceiveData() As String '返回V存儲器區(qū)數(shù)據(jù)

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

t1 = GetTickCount() '取時間,做延時用

Do '循環(huán)等待接收數(shù)據(jù)

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數(shù)據(jù)了

ReDataLen = MSComm1.InBufferCount '取數(shù)據(jù)長度

av = MSComm1.Input '將串口數(shù)據(jù)取出來

For i = 0 To ReDataLen - 1

FGetData = FGetData & Right("00" & Hex(av(i)), 2)

Next i

End If

If Len(FGetData) >= 6 Then

If Len(FGetData) > Val("&H" & Mid(FGetData, 5, 2)) * 2 + 8 Then

ReceiveData = FGetData

Exit Function

End If

End If

If GetTickCount - t1 > 2000 Then '2秒沒收完就不收了

ReceiveData = ""

Exit Function

End If

Loop

End Function

Private Function IReceiveData() As String '反回I狀態(tài)

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

t1 = GetTickCount() '取時間,做延時用

Do '循環(huán)等待接收數(shù)據(jù)

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數(shù)據(jù)了

ReDataLen = MSComm1.InBufferCount '取數(shù)據(jù)長度

av = MSComm1.Input '將串口數(shù)據(jù)取出來

For i = 0 To ReDataLen - 1

FGetData = FGetData & Right("00" & Hex(av(i)), 2)

Next i

End If

If Len(FGetData) >= 6 Then

If Len(FGetData) > Val("&H" & Mid(FGetData, 5, 2)) * 2 + 8 Then

IReceiveData = FGetData

Exit Function

End If

End If

If GetTickCount - t1 > 2000 Then '2秒沒收完就不收了

IReceiveData = ""

Exit Function

End If

Loop

End Function

Private Function QReceiveData() As String '反回Q狀態(tài)

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

t1 = GetTickCount() '取時間,做延時用

Do '循環(huán)等待接收數(shù)據(jù)

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數(shù)據(jù)了

ReDataLen = MSComm1.InBufferCount '取數(shù)據(jù)長度

av = MSComm1.Input '將串口數(shù)據(jù)取出來

For i = 0 To ReDataLen - 1

FGetData = FGetData & Right("00" & Hex(av(i)), 2)

Next i

End If

If Len(FGetData) >= 6 Then

If Len(FGetData) > Val("&H" & Mid(FGetData, 5, 2)) * 2 + 8 Then

QReceiveData = FGetData

Exit Function

End If

End If

If GetTickCount - t1 > 2000 Then '2秒沒收完就不收了

QReceiveData = ""

Exit Function

End If

Loop

End Function

Private Sub Timer2_Timer()

x1 = x1 + 1

Text10.Text = str(x1)

Text1.Text = str(p11)

Text2.Text = str(p12)

Text3.Text = str(p13)

Text4.Text = str(p14)

Text7.Text = str(p15)

If Text7.Text = 1 Then Text7.BackColor = RGB(255, 0, 255)

If Text7.Text = 0 Then Text7.BackColor = RGB(0, 255, 255)

'Text6.Text = str(p16)

Text9.Text = str(p17)

If Text9.Text = 1 Then Text9.BackColor = RGB(255, 0, 255)

If Text9.Text = 0 Then Text9.BackColor = RGB(0, 255, 255)

'Text8.Text = str(p18)

End Sub
 

聯(lián)系我們

上海翰粵自動化系統(tǒng)有限公司 公司地址:上海市松江區(qū)思賢路2399弄137號   技術(shù)支持:化工儀器網(wǎng)
  • 聯(lián)系人:黃政武
  • QQ:76868608
  • 公司傳真:021-57657276
  • 郵箱:76868608@qq.com

掃一掃 更多精彩

微信二維碼

網(wǎng)站二維碼

91精品国产麻豆_国产精品综合二区_国产麻豆一精品一av一免费_国产亚洲成aⅴ人片在线观看_亚洲国产你懂的_国产精品美女www爽爽爽_久久久精品免费网站_久久久av毛片精品_国产精品二三区_成人欧美一区二区三区1314_狠狠色2019综合网_欧美一级高清片在线观看_乱中年女人伦av一区二区_成人黄动漫网站免费app_久久影院午夜论_亚洲色图清纯唯美

      5566中文字幕一区二区| 国产精品69毛片高清亚洲| 欧美成人欧美edvon| 日韩欧美高清一区| 久久中文字幕电影| 国产精品免费av| 亚洲国产精品久久不卡毛片 | 色阁综合av| 欧洲中文字幕精品| 日韩精品一区二区三区视频在线观看| 欧美精品一区二区三区在线播放 | 欧美婷婷六月丁香综合色| 日韩欧美国产精品| 18欧美亚洲精品| 日本欧美一区二区三区| 成人免费的视频| 美女黄毛**国产精品啪啪| 色狠狠色狠狠综合| 精品国产乱子伦一区| 亚洲裸体在线观看| 国产乱码一区二区三区| 国产成人免费观看| 在线免费视频一区二区| 国产午夜亚洲精品午夜鲁丝片| 一区二区三区日韩| 高清在线观看日韩| 日本视频一区二区不卡| 日韩美女一区二区三区四区| 依依成人综合视频| 成人综合婷婷国产精品久久免费| 久久亚裔精品欧美| 日韩欧美高清一区| 午夜一区二区三区在线观看| av电影在线观看一区| 色综合亚洲欧洲| 国产精品国产三级国产| 国产老肥熟一区二区三区| 欧美精品一区三区在线观看| 日韩欧美一二三| 丝袜美腿亚洲综合| 国产精品二区二区三区| 欧美日韩精品综合在线| 亚洲丝袜自拍清纯另类| 岛国一区二区三区| 色综合天天性综合| 中文字幕日韩精品一区| 国产精品69毛片高清亚洲| 婷婷久久五月天| 国产亚洲欧美在线| 国内成人免费视频| 亚洲图片在线观看| 中文字幕欧美日韩一区| 国产成人av一区| 伊人情人网综合| 亚洲人妖av一区二区| 99视频精品免费视频| 欧美亚洲高清一区| 亚洲一区二区高清| av一区二区三区在线观看| 7799精品视频| 蜜臀av性久久久久蜜臀aⅴ| 日本视频一区在线观看| 久久亚洲精品小早川怜子| 国产一级精品在线| 色av成人天堂桃色av| 亚洲综合无码一区二区| 国偷自产av一区二区三区小尤奈| 26uuu成人网一区二区三区| 国产精品18久久久久久久久| 在线观看中文字幕不卡| 日日噜噜夜夜狠狠视频欧美人| 麻豆成人小视频| 亚洲欧美影音先锋| 国产一区精品视频| 国产精品福利一区| 国产欧美综合精品一区二区| 国产欧美综合在线| 成人免费在线一区二区三区| 久久免费美女视频| 91亚洲精品乱码久久久久久蜜桃 | 欧美体内she精高潮| 午夜精品久久久久影视| 欧美日韩在线精品| 一区二区三区四区五区视频在线观看| 99一区二区| 国产精品天天看| 超碰国产精品久久国产精品99| 26uuu国产一区二区三区| 成人av在线播放网址| 日韩精品在线网站| 91九色在线观看| 中文久久乱码一区二区| 国产欧美日本在线| 亚洲精选视频免费看| 性欧美videosex高清少妇| 亚洲成人动漫精品| 91久久精品网| 国产伦精品一区二区三区视频青涩| 欧美精品在欧美一区二区少妇| 国产美女视频91| 精品奇米国产一区二区三区| 91美女精品福利| 亚洲天堂中文字幕| 秋霞毛片久久久久久久久| 午夜精品123| 在线中文字幕一区| 国产乱码精品一区二区三| 日韩视频一区二区在线观看| 99久久免费视频.com| 中文字幕一区二区三区视频| 欧美亚洲另类久久综合| 日韩av中文字幕一区二区 | 色婷婷av久久久久久久| 麻豆91在线观看| 日韩精品中文字幕在线一区| 91麻豆国产精品久久| 亚洲欧美日韩国产手机在线| 亚洲国产一区二区三区在线| 狠狠色狠狠色合久久伊人| 精品免费一区二区三区| 麻豆成人av| 激情综合网天天干| 欧美高清一级片在线观看| 色乱码一区二区三在线看| 久久不见久久见免费视频7| xvideos.蜜桃一区二区| 日韩精品一区二区三区丰满| 国产一区二区按摩在线观看| 中文一区在线播放| 色av一区二区| 91小视频在线免费看| 亚洲18女电影在线观看| 4438x亚洲最大成人网| 成人午夜电影免费在线观看| 天使萌一区二区三区免费观看| 日韩免费电影一区| 日韩中文一区| 丁香婷婷综合激情五月色| 亚洲精品国产a| 91精品国产乱| 日韩av一区二区三区在线| 国产成人啪午夜精品网站男同| 国产精品家庭影院| 欧美日韩1区2区| 欧美二区三区| 成人黄动漫网站免费app| 亚洲一区二区在线播放相泽| 日韩一区二区三区四区| 日韩av电影免费在线| 99视频一区二区| 老汉av免费一区二区三区| 中文字幕一区二区三| 91精品免费在线| 亚洲在线色站| 国产日产精品一区二区三区四区| 韩国成人在线视频| 亚洲综合丁香婷婷六月香| 精品国产精品网麻豆系列| 91国内精品野花午夜精品| 国产精品久久精品国产| 国产精品18久久久久久久久久久久| 亚洲乱码国产乱码精品精98午夜| 精品人在线二区三区| 欧美艳星brazzers| 日韩精品一区二区三区丰满| 91美女福利视频| 国产精品亚洲人在线观看| 午夜免费欧美电影| 亚洲情趣在线观看| 久久久久高清精品| 欧美高清你懂得| 色综合网色综合| 日韩资源av在线| 精品免费二区三区三区高中清不卡| 国产成人av一区二区三区在线| 天天操天天干天天综合网| 自拍av一区二区三区| 国产午夜精品在线观看| 欧美一级一区二区| 欧美亚一区二区| 综合网五月天| 欧美重口乱码一区二区| 国产精品一区二区在线观看| 波多野结衣一区二区三区| 国产一区二区中文字幕| 日本午夜精品视频在线观看| 亚洲黄色av一区| 亚洲青青青在线视频| 中文字幕精品三区| 久久久精品中文字幕麻豆发布| 欧美一区二区三区视频免费播放 | 性久久久久久久久久久久| 亚洲日本在线看| 国产精品久久久久久一区二区三区 | 97超碰人人模人人爽人人看| 懂色av噜噜一区二区三区av| 国产成人亚洲综合a∨婷婷 | 国产欧美一区二区三区沐欲| 26uuu国产电影一区二区| 欧美xxxxxxxxx|