久久久久久久久蜜桃精品,激情五月网婷婷69v,日韩国产欧美精品在线,久久精品国产日本波多野结夜

咨詢熱線

18621916738

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

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

更新時(shí)間:2016-01-04      點(diǎn)擊次數(shù):2059

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

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

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

另外,上位機(jī)是用VB編寫,VB本身不是很熟,如果有什么錯(cuò)誤,請(qǐng)大家海諒。

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

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

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

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

TITLE=程序注釋

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

// 在*個(gè)循環(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 

// 在每個(gè)循環(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 '多項(xiàng)式碼&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) '每一個(gè)數(shù)據(jù)與CRC寄存器進(jìn)行異或

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é)右移后前面補(bǔ)1

End If '否則自動(dòng)補(bǔ)0

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

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 '定時(shí)器1無(wú)效

Timer1.Interval = 1000 '定時(shí)器1時(shí)間為1S

Timer2.Enabled = True '定時(shí)器2有效

Timer2.Interval = 1000 '定時(shí)器2時(shí)間為1S

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text4.Text = ""

Text5.Text = ""

Text6.Text = ""

Text8.Text = ""

Text10.Text = ""

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

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

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

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

MSComm1.InputMode = comInputModeBinary '以二進(jìn)制傳輸

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 = "打開(kāi)串口"

Else

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

End If

End Sub

Private Sub Command1_Click()

Timer1.Enabled = True

End Sub

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

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 '打開(kāi)關(guān)閉按鈕顯示文字

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

Else

Command3.Caption = "打開(kāi)串口"

End If

If Err Then '打開(kāi)串口失敗,則顯示出錯(cuò)信息

MsgBox Error$, 48, "錯(cuò)誤信息"

Exit Sub

End If

End Sub

Private Sub Timer1_Timer() '讀V存儲(chǔ)區(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 '定義動(dòng)態(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 '定義動(dòng)態(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 '定義動(dòng)態(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存儲(chǔ)器區(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() '取時(shí)間,做延時(shí)用

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

DoEvents

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

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

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

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秒沒(méi)收完就不收了

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() '取時(shí)間,做延時(shí)用

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

DoEvents

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

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

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

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秒沒(méi)收完就不收了

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() '取時(shí)間,做延時(shí)用

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

DoEvents

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

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

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

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秒沒(méi)收完就不收了

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)系我們

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

掃一掃 更多精彩

微信二維碼

網(wǎng)站二維碼

久热99在线视频免费观看-黄片视频在线免费观看国产-国产精品av国产精华液-av在线男人的免费天堂| 国产午夜亚洲精品福利-日韩精品中文字幕在线免费-亚洲久久精品中文字幕-狠狠亚洲婷婷综合色香五月加勒比| 亚洲中文字幕中出在线-美女口爆吞精在线播放-亚洲欧美清纯唯美另类-国产一区二区三区免费观看不卡| 日韩av二区三区亚洲综合-日韩有码中文字幕国产-国产精品视频一二三四五区-青春草在线视频免费观看| 在线视频国产一区二区三区-亚洲欧美日韩国产经典-性插亚洲香蕉在线视频-亚洲成人国产超级黄色| 正在播放后入极品美少妇-亚洲一区二区三区自拍麻豆-国产亚洲精品成人久久-av老司机亚洲精品久久| 欧洲亚洲高清另类清纯-国产av一区二区三区av-亚洲精品一区二区三区午夜-国产夫妻自拍3p视频在线| 亚洲自拍偷拍另类第一页-麻豆国产午夜在线精品-久久精品一区二区三区综合-日本最近中文字幕免费| 午夜性福福利视频一区二区三区-午夜福利在线看片在线-欧洲内射免费人文艺术-亚洲天堂成人av在线| 人妻少妇av免费久久蜜臀-欧美国产日韩在线一区二区-美女被啪啪到深处好爽无套-日韩av一区在线资源播放| 中文字幕在线乱码日本-亚洲国产成人久久精品99-交缠的肉体中文字幕在线-久热精品视频在线免费| 在线观看91精品国产性-国产中文字幕精品免费-免费日韩毛片在线观看-精品人妻暴躁一区二区三区| 成人午夜伦理在线观看-国产一级做a爰片久久-亚洲精品av一区二区三区-国产色区一区二区三区| 亚洲视频一区二区久久-亚洲欧美日韩精品中文乱码-亚洲尤物在线视频观看-欧美熟妇视频一区二区三区| 激情综合网激情国产av-2021日韩午夜影院-精品一区二区三区少妇蜜臀-人妻交换av一区二区| 女生下面粉嫩在线视频-人妻熟女av国产在线-亚洲精品成人一区二区三区-商场偷拍女厕所撒尿视频| 亚洲国内精品一区二区在线-亚洲国产成人精品青青草原-精品在线视频免费在线观看视频-亚洲美女激情福利在线| 亚洲中文字幕中出在线-美女口爆吞精在线播放-亚洲欧美清纯唯美另类-国产一区二区三区免费观看不卡| 日本黄网站三级三级三级-91网址免费在线观看-肥老熟女性强欲五十路-无套内谢少妇高朝毛片| av福利在线播放网站-午夜福利在线观看精品-久久精品女人av天堂-日本中文字幕在线乱码| 亚洲精品在线观看蜜臀-亚洲日本va中文字幕久久-欧美不雅视频午夜福利-日韩卡一卡二卡三卡四| 少妇高潮叫床免费网站在线观看-亚洲av狠狠的爱一区二区-激情综合成年免费视频-中文字幕人妻系列在线| 在线视频国产一区二区三区-亚洲欧美日韩国产经典-性插亚洲香蕉在线视频-亚洲成人国产超级黄色| 精品国产美女av天堂-狼人av在线免费观看-日韩精品人妻中文字幕有码在线-欧美视频亚洲视频自拍偷拍| 欧美性色婷婷久久久精品-久久这里只有精品国产宅男av-久久男女爱爱视频免费观看-另类福利亚洲丝袜激情在线| 国内精品国产三级国产-91制片厂麻豆果冻剧情观看-日韩中文字幕有码在线视频-精品人妻伦一区二区三区久久| 国产一级片内射在线视频-亚洲少妇无套内射激情-成人午夜性色福利视频-夜夜嗨视频无套实战丰满少妇| 精品人妻一区二区三区免费-亚洲国产精品久久一区二区-国内久久偷拍视频免费-蜜桃视频在线观看网址| 日韩不卡高清在线视频-性色av蜜臀av一区二区-欧美精品一国产成人91-久久99热只有频精品| 国产精品午夜福利免费在线-99热首页这里只有精品-国产一区二区三区精品观看-宅男午夜一区二区三区| 国产自拍成人激情视频-欧美大香蕉在线视频观看-精品人妻一区二区三区麻豆91-经典三级一区二区三区| 超碰国产传媒在线观看-av在线免费观看蜜臀-亚洲欧美国产一区二区综合-人妻久久精品夜夜爽一区二区| 亚洲综合不卡一区二区三区-中文字幕一区二区人妻秘书-国产免费午夜精品理论-中文字幕人妻精品一区二区| 日本一区二区三区黄色网-亚洲国产综合久久天堂-精品国产乱码久久蜜桃-欧美少妇精品在线观看| 久久中文字幕人妻淑女-日韩欧美亚洲一中文字幕-日本免费一区二区三区视频-亚洲精品乱码免费精品乱码| 日韩黄色精品中文视频-久久精品国产亚洲懂色-欧洲美女日韩精品视频-国产一区二区三区精品愉拍| 久久精品国产亚洲av麻豆甜-蜜桃亚洲精品一区二区三区-国产成a人亚洲精品无v码-午夜一区精品国产亚洲av| 粉嫩精品一区二区三区在线观-中文国产精品久久久私一本-熟女少妇日韩亚洲av-精品国产一区二区三广区精东| 亚洲乱码中文字幕综合-欧美日韩亚洲综合久久精品-美女隐私无遮挡免费网站-国产精品激情av在线播放| 偷拍一区二区三区视频播放器-亚洲欧洲日产韩国综合-国产精品久久精品亚洲-国产乱淫av麻豆国产| 精品国产成人一区二区99-午夜爱爱视频最新深夜-午夜福利片中文字幕在线观看-成人性生交大片免费小优|