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_久久影院午夜论_亚洲色图清纯唯美

      久久综合久久综合久久综合| 亚洲精品一区二区三区99| 美女一区二区三区| 国产精品成人一区二区艾草 | 日韩一区二区免费视频| 无遮挡亚洲一区| 少妇免费毛片久久久久久久久| 久久久综合亚洲91久久98 | 久久涩涩网站| 5g国产欧美日韩视频| 国产成人av福利| 国产在线精品一区二区不卡了| 日日夜夜精品视频免费| 一区二区三区在线免费播放| 中文字幕中文字幕一区| 国产婷婷一区二区| 久久久久久97三级| 国产婷婷一区二区| 中文字幕第一区第二区| 色综合久久综合| 亚洲视频精品一区| 中文字幕日韩精品久久| 一本色道久久加勒比精品 | 美美哒免费高清在线观看视频一区二区| 亚洲欧美激情插| 一区二区三区欧美日韩| 亚洲综合色婷婷| 亚洲国产精品精华液网站| 一区二区三区四区在线| 伊人色综合久久天天人手人婷| 亚洲免费在线视频一区 二区| 亚洲视频资源在线| 亚洲国产日韩在线一区模特| 日本v片在线高清不卡在线观看| 亚洲乱码国产乱码精品精的特点| 国产欧美日产一区| 中文字幕精品综合| 亚洲最大色网站| 另类小说综合欧美亚洲| 99久久精品无码一区二区毛片| 日韩久久不卡| 欧美一级欧美一级在线播放| 久久夜色精品一区| 亚洲视频香蕉人妖| 午夜精品久久久久久不卡8050| 日本成人中文字幕| 麻豆精品视频在线观看| 婷婷中文字幕综合| 国产精品一区在线观看你懂的| 99久久精品免费看国产| 黄色国产精品一区二区三区| 亚洲免费视频一区| 欧美一区二区福利视频| 国产精品护士白丝一区av| 亚洲午夜激情网页| 国产一区二区三区四区五区入口 | 4438x成人网最大色成网站| 最新中文字幕一区二区三区| 一区二区三区四区精品在线视频| 午夜日韩在线观看| av高清久久久| 亚洲图片小说在线| 一本久久综合亚洲鲁鲁五月天| www.性欧美| 秋霞久久久久久一区二区| 欧美亚洲国产一区二区三区va| 欧美α欧美αv大片| 亚洲男人都懂的| 国内成+人亚洲+欧美+综合在线| 99久久99久久精品国产片| 亚洲欧洲精品一区二区三区波多野1战4 | 成人高清在线视频| 先锋在线资源一区二区三区| 久久久久国产成人精品亚洲午夜| 亚洲国产精品久久久久婷婷884| 国产精品18久久久| 日本一区二区在线| 91精品国产高清一区二区三区| 中文字幕欧美一| 国产成人综合视频| 99re视频在线播放| 精品不卡在线| 91精品国产91久久久久久最新毛片 | 成人18视频在线播放| 日韩国产在线一区| 精品999久久久| 国产裸体歌舞团一区二区| 色噜噜狠狠色综合中国| 亚洲欧美激情小说另类| 成人综合婷婷国产精品久久蜜臀| 欧美日韩一区二区三区在线观看免| 欧美精品xxxxbbbb| 亚洲欧美日韩中文字幕一区二区三区| 久久99国内精品| 国产三级精品在线不卡| 欧美精品视频www在线观看 | 日韩欧美成人午夜| 香蕉成人伊视频在线观看| 97超碰在线播放| 这里是久久伊人| 日韩精品电影在线| 免费精品视频一区| 久久日一线二线三线suv| 精品亚洲成a人在线观看| 欧洲av在线精品| 午夜激情一区二区| 天天综合网 天天综合色| 国产尤物91| 精品久久久久久久久久久久久久久 | 国产在线精品免费av| 色综合666| 亚洲色欲色欲www| 91视频国产资源| 日韩精品中文字幕一区二区三区| 九九在线精品视频| 色噜噜一区二区| 中文字幕中文字幕一区二区 | 色香色香欲天天天影视综合网| 国产精品久久久久久久久快鸭 | 欧美日韩亚洲综合| 国产精品久久看| 亚洲一区二区三区四区五区中文| 鲁丝片一区二区三区| 国产精品久久久久久户外露出| 94色蜜桃网一区二区三区| 91精品婷婷国产综合久久竹菊| 美女视频免费一区| 色网综合在线观看| 视频一区欧美日韩| 亚洲一区精品视频| 天天综合日日夜夜精品| 一区二区三区av| 午夜精品成人在线视频| 国产一区二区三区奇米久涩| 中文字幕中文在线不卡住| 五月天婷亚洲天综合网鲁鲁鲁| 免费人成网站在线观看欧美高清| 色呦呦日韩精品| 日本午夜一区二区| 欧美综合视频在线观看| 久久国产精品99久久久久久老狼| 在线欧美小视频| 激情久久久久久久久久久久久久久久| 欧美熟乱第一页| 国产成人综合亚洲网站| 日韩免费看网站| 97中文在线| 亚洲人成网站影音先锋播放| 色综合666| 亚洲第一福利一区| 日韩在线导航| 国产精品久久久久影院亚瑟| 欧美日韩亚洲一区二区三区在线观看 | 欧美日韩无遮挡| 日韩二区三区在线观看| 欧美精品免费视频| 91超碰rencao97精品| 亚洲欧美自拍偷拍| 欧美成人性福生活免费看| 99久久久久久| 婷婷开心久久网| 国产调教视频一区| 一本色道亚洲精品aⅴ| 99热在线国产| 青青草一区二区三区| 欧美韩国日本不卡| 欧美日韩一二三| 免费日韩av电影| 成人理论电影网| 亚洲成人一区二区| 欧美经典一区二区| 在线播放一区二区三区| 日韩激情视频| 3d动漫精品啪啪一区二区三区免费| 日韩和欧美一区二区| 国产清纯白嫩初高生在线观看91| 欧美日韩精品是欧美日韩精品| 精品日本一区二区| 成人黄动漫网站免费app| 日韩中文欧美在线| 国产精品久久久久久久久免费丝袜 | 一区二区在线观| 97人摸人人澡人人人超一碰| 久久国产精品免费| 亚洲一区二区三区视频在线播放| 久久精品一区蜜桃臀影院| 欧美日本一区二区在线观看| 欧洲一区二区日韩在线视频观看免费 | 国产精品视频观看| 欧美剧情片在线观看| 欧美亚州在线观看| 99久久综合狠狠综合久久止| 国产精品99久| 蜜桃久久久久久久| 亚洲成人高清在线| 一区二区三区91| 亚洲人成伊人成综合网小说| 日本一区二区三区在线不卡| www国产亚洲精品久久麻豆| 欧美一区午夜精品|