欧美在线观看视频一区二区三区_色综合天天做天天爱_日韩午夜激情av_日韩欧美视频在线 _精品久久久久久_在线亚洲免费视频_欧美巨大另类极品videosbest_日韩一区二区在线观看视频播放_91黄色免费网站_{关键词10

咨詢熱線

18621916738

當前位置:首頁  >  技術文章  >  西門子S7-200 ModBus從站通訊程序

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

更新時間:2016-01-04      點擊次數:2788

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

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

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

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

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

說明:PLC從站,PC作主站,用ModBus協議進行通訊。PC機讀取PLCVW區的數據;PC機還讀取PLC內部I或者O地址的狀態。

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

以下是PLC程序實現,方便貼出,已轉換為STL

TITLE=程序注釋

Network 1 // 網絡標題

// 在*個循環周期內初始化Modbus從站協議

LD SM0.1

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

Network 2 

// 在每個循環周期內執行Modbus 從站協議

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) '每一個數據與CRC寄存器進行異或

For Flag = 0 To 7

SaveHi = CRC16Hi

SaveLo = CRC16Lo

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

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

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

CRC16Lo = CRC16Lo Or &H80 '則低位字節右移后前面補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 '設定端口號

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

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

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

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

MSComm1.RThreshold = 1 '

MSComm1.SThreshold = 0

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

MSComm1.OutBufferCount = 0 '清空發送緩沖區

MSComm1.InBufferCount = 0 '清空接收緩沖區

If MSComm1.PortOpen = False Then

Command3.Caption = "打開串口"

Else

Command3.Caption = "關閉串口"

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 '打開關閉按鈕顯示文字

Command3.Caption = "關閉串口"

Else

Command3.Caption = "打開串口"

End If

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

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

Exit Sub

End If

End Sub

Private Sub Timer1_Timer() '讀V存儲區數據

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 '定義動態數組

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狀態

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 '定義動態數組

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狀態

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 '定義動態數組

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存儲器區數據

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

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

Do '循環等待接收數據

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數據了

ReDataLen = MSComm1.InBufferCount '取數據長度

av = MSComm1.Input '將串口數據取出來

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狀態

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

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

Do '循環等待接收數據

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數據了

ReDataLen = MSComm1.InBufferCount '取數據長度

av = MSComm1.Input '將串口數據取出來

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狀態

Dim FGetData As String

Dim t1 As Long

Dim av As Variant

Dim i As Integer

Dim ReDataLen As Integer

FGetData = ""

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

Do '循環等待接收數據

DoEvents

If MSComm1.InBufferCount > 0 Then '串口有數據了

ReDataLen = MSComm1.InBufferCount '取數據長度

av = MSComm1.Input '將串口數據取出來

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
 

聯系我們

上海翰粵自動化系統有限公司 公司地址:上海市松江區思賢路2399弄137號   技術支持:化工儀器網
  • 聯系人:黃政武
  • QQ:76868608
  • 公司傳真:021-57657276
  • 郵箱:76868608@qq.com

掃一掃 更多精彩

微信二維碼

網站二維碼

欧美在线观看视频一区二区三区_色综合天天做天天爱_日韩午夜激情av_日韩欧美视频在线 _精品久久久久久_在线亚洲免费视频_欧美巨大另类极品videosbest_日韩一区二区在线观看视频播放_91黄色免费网站_{关键词10
欧美剧在线免费观看网站| 视频在线观看一区二区三区| 欧美一区二区免费观在线| 精品国产91久久久久久| 不卡一区中文字幕| 99久久精品费精品国产一区二区| 9色porny自拍视频一区二区| 91美女蜜桃在线| 福利视频第一区| 色偷偷一区二区三区| 欧美色视频在线| 欧美一级理论性理论a| 色综合久久88色综合天天免费| 欧美性做爰猛烈叫床潮| 老司机精品视频一区二区三区| 美女免费视频一区二区| 国产曰批免费观看久久久| 成人国产视频在线观看| 色综合天天综合网天天狠天天| 欧美日韩一区二区欧美激情| 日韩免费看网站| 欧美日韩亚洲综合在线| 日韩你懂的在线播放| 久久精品视频免费| 亚洲精品欧美在线| 免费黄网站欧美| 丁香五精品蜜臀久久久久99网站 | 欧美色视频一区| 日韩三级在线免费观看| 欧美午夜视频网站| 精品国产乱码久久久久久闺蜜| 中文字幕一区二区三| 天天av天天翘天天综合网| 国产伦精品一区二区三区免费| 91蝌蚪porny| 日韩视频中午一区| 欧美一区二区三区啪啪| 国产精品久久久久久久第一福利| 日韩制服丝袜av| 91在线精品一区二区| 欧美一区日韩一区| 日韩女优av电影在线观看| 一区二区三区中文在线观看| 国产乱码一区二区三区| 欧美日韩国产一区二区三区地区| 欧美在线播放高清精品| 成人精品免费网站| 日韩欧美视频一区| 久久色视频免费观看| 偷偷要91色婷婷| 欧美日韩中文在线| 欧美美女一区二区三区| 一区二区三区国产豹纹内裤在线| 黄色小说综合网站| 欧美日韩国产三级| 欧美不卡一区二区三区四区| 天使萌一区二区三区免费观看| 精品国产老师黑色丝袜高跟鞋| 亚洲精品一区二区三区蜜桃下载 | 亚洲最大色网站| 成人高清免费在线播放| 欧美日韩高清不卡| 91国偷自产一区二区开放时间| 日本一区二区动态图| 国内精品久久久久影院色| 欧美久久久久久蜜桃| 久久综合精品国产一区二区三区| 男人的j进女人的j一区| 欧美日韩电影在线播放| 精品欧美黑人一区二区三区| 日韩av不卡一区二区| 欧美在线免费播放| 亚洲精品一区二区三区福利| 精品中文字幕一区二区小辣椒| 欧美人牲a欧美精品| 国产欧美日韩精品在线| 成人美女视频在线观看18| 日本韩国欧美三级| 亚洲免费观看高清完整版在线观看| 波多野结衣的一区二区三区| 欧美人动与zoxxxx乱| 日韩和欧美的一区| 欧美一区二区三区精品| 国产精品久久久久久福利一牛影视| 成人av免费在线观看| 欧美本精品男人aⅴ天堂| 中文字幕亚洲不卡| 精品国产91乱高清在线观看| 91精品国产黑色紧身裤美女| 麻豆久久久久久久| 色婷婷一区二区| 亚洲成a人片在线观看中文| 欧美喷潮久久久xxxxx| 国产精品久久久久影院| 一本色道a无线码一区v| 国产片一区二区| 福利视频导航一区| 国产亚洲精品bt天堂精选| 白白色 亚洲乱淫| 日韩欧美国产精品| www.亚洲人| 欧美精品一区二区三区蜜桃视频 | 国产精品久久毛片a| 91美女片黄在线观看| 久久久亚洲精华液精华液精华液| av在线播放成人| 精品第一国产综合精品aⅴ| 本田岬高潮一区二区三区| 久久亚洲精精品中文字幕早川悠里| 99久久国产综合色|国产精品| 精品日本一线二线三线不卡| 91在线观看视频| 国产欧美一区视频| 欧美熟乱第一页| 亚洲综合色在线| 精品国产1区2区3区| 麻豆91在线看| 日韩精品最新网址| 精品久久久久久久久久| 中文字幕精品—区二区四季| 色婷婷国产精品久久包臀| 国产精品成人网| 欧美一区二区三区影视| 美女mm1313爽爽久久久蜜臀| 正在播放亚洲一区| 欧美日韩亚洲视频| 亚洲精品久久嫩草网站秘色| 一本色道久久综合狠狠躁的推荐| 精品伊人久久久久7777人| 日韩欧美一区中文| 一本色道久久综合亚洲精品按摩| 亚洲激情在线播放| 日本伦理一区二区| 成人黄色av电影| 中文字幕一区二区在线观看| 精品少妇一区二区三区视频免付费 | 国产天堂亚洲国产碰碰| 在线观看一区不卡| 日韩av一级电影| 欧美一级理论性理论a| 一本色道久久加勒比精品| 亚洲香肠在线观看| 51久久夜色精品国产麻豆| 欧美日韩国产综合视频在线观看中文| 亚洲人成精品久久久久| 日本黄色一区二区| 精品国产1区2区| 亚洲不卡在线观看| 日韩欧美一区二区在线视频| 一本久道久久综合中文字幕| 亚洲成精国产精品女| 91麻豆精品国产综合久久久久久| 色婷婷综合五月| 奇米精品一区二区三区在线观看 | 777亚洲妇女| 欧美三片在线视频观看| 蜜桃视频在线观看一区| 久久久综合视频| 色哟哟精品一区| 精品日本美女福利在线观看| 日韩和欧美的一区| 中文字幕欧美激情一区| 欧美性色黄大片手机版| 在线视频欧美区| 久久精品av麻豆的观看方式| 国产精品久久久久久亚洲伦 | 成人自拍视频在线观看| 亚洲啪啪综合av一区二区三区| 欧美区一区二区三区| 777色狠狠一区二区三区| 国产成人精品免费网站| 亚洲综合精品自拍| 日韩精品一区二区三区swag| 精品福利一二区| 色哦色哦哦色天天综合| 国产河南妇女毛片精品久久久 | 日本一区二区久久| 欧美日韩高清在线播放| 欧美日韩另类一区| 99久久精品免费看国产免费软件| 丝袜a∨在线一区二区三区不卡| 欧美国产综合色视频| 欧美一区2区视频在线观看| 精品欧美一区二区久久| 色偷偷久久人人79超碰人人澡| 国产成人精品www牛牛影视| 午夜在线电影亚洲一区| 国产精品久久免费看| 欧美大白屁股肥臀xxxxxx| 在线精品视频一区二区三四| 在线成人av影院| 日韩欧美亚洲范冰冰与中字| 成人性生交大合| 国内成人精品2018免费看| 亚洲第一久久影院| 亚洲精选在线视频| 最好看的中文字幕久久| 国产日韩欧美不卡| 久久亚洲二区三区| 日韩精品一区二区三区在线观看 |