热久久这里只有精品_一道精品视频一区二区三区男同_日韩精品久久_亚洲四虎影院

咨詢熱線

18621916738

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

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

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

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

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

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

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

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

說明: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無效

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 = "打開串口"

Else

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

End If

End Sub

Private Sub Command1_Click()

Timer1.Enabled = True

End Sub

Private Sub Command2_Click() '退出程序,定時(shí)器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 '打開串口失敗,則顯示出錯(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ù)取出來

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() '取時(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ù)取出來

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() '取時(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ù)取出來

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

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

掃一掃 更多精彩

微信二維碼

網(wǎng)站二維碼

亚洲图片在线综合| 亚洲成在人线av| 97超碰人人模人人爽人人看| 亚洲综合精品在线| 国产福利不卡视频| 99免费观看视频| 日韩www.| 无码日本精品xxxxxxxxx| 久久麻豆视频| 超碰97国产在线| 日本视频在线观看| 欧美激情高清视频| 免费全黄无遮挡裸体毛片| 欧美精品一区二区三区视频| 中文字幕人成高清视频| 亚洲成av人**亚洲成av**| 中文字幕一区二区人妻痴汉电车| 91蝌蚪porny成人天涯| 性猛交娇小69hd| 久久激情久久| 宇都宫紫苑在线播放| 日韩久久电影| 无码粉嫩虎白一线天在线观看| 精品国产亚洲一区二区三区在线| 玖玖玖精品中文字幕| 超级白嫩亚洲国产第一| 国产乱肥老妇国产一区二| 成人在线免费视频| 久久久亚洲福利精品午夜| 欧美激情图区| 精品国产一区二区三区久久狼黑人| 黄色免费视频| 亚洲第一精品电影| 国产精选在线视频拍拍拍| 欧美色视频在线| 亚洲第一成人在线视频| 欧美日韩国产中文字幕| 精品女同一区二区三区| 亚洲国产中文字幕在线视频综合 | 国产又黄又粗又猛又爽| 国产精品伦一区| 日韩中文字幕在线观看视频| www.av精品| 2021亚洲天堂| 国产成a人亚洲精| 亚洲最大成人综合网| 日本成人在线电影网| 99久久久久久久久久| 日韩vs国产vs欧美| 在线免费看黄视频| 久久av老司机精品网站导航| 精品一区二区三孕妇视频| 国产乱人伦偷精品视频不卡| 亚洲av无一区二区三区| 国产jizzjizz一区二区| 久久免费公开视频| 国产一区二区三区不卡在线| 欧美一区中文字幕| 亚洲欧美精选| 欧美日韩不卡一区二区| 四虎成人永久地址| 666欧美在线视频| 欧美国产中文| 精品久久久三级丝袜| 一二三四视频免费观看在线看| 精品91自产拍在线观看一区| xvideos入口| 亚洲欧美国产精品va在线观看| 色爱综合网站| 久久九九全国免费精品观看| 在线黄色.com| 97视频在线播放| 裸体xxxx视频在线| 91精品国产免费久久久久久| 岛国在线大片| 国产精品看片资源| www在线观看播放免费视频日本| 国产精品丝袜久久久久久高清 | 久久人91精品久久久久久不卡| 中文字幕在线观看| 97精品国产aⅴ7777| 韩国三级av在线免费观看| 国产精品成av人在线视午夜片| 高潮毛片在线观看| 亚洲精品日韩av| 亚洲黄色网址| 日本在线免费观看一区| 欧美电影在线观看一区| 日韩 欧美 视频| 日韩片欧美片| 最好看的中文字幕| 好看的亚洲午夜视频在线| 久久久久国产精品无码免费看| 欧美96一区二区免费视频| 国产视频精品免费| 91啪亚洲精品| 中文字字幕在线中文| 亚洲欧美日韩在线不卡| 黄色片一区二区三区| 欧美日韩一级二级三级| 毛片网站免费哦| 久久香蕉国产线看观看网| 日韩精品视频无播放器在线看| 国产精品∨欧美精品v日韩精品| 污视频网站在线免费| 久久精品成人一区二区三区蜜臀 | 亚洲精品国产一区二区| 亚洲电影第1页| 成年美女网站| 欧美激情videos| av资源种子在线观看| 不卡视频一区二区| 国产精品原创视频| 永久免费网站视频在线观看| 成人一区而且| 性活交片大全免费看| 国产精品一区二区视频| 久草视频在线观| 亚洲电影一区二区三区| 欧美xxxxbb| 在线日韩欧美视频| 欧美色视频免费| 91精品久久久久久蜜桃| av在线成人| www黄色av| 久久国产精品毛片| 91精品国产高清一区二区三蜜臀| 136国产福利精品导航| 男女一区二区三区免费| 日韩精品极品视频| 视频在线91| 92看片淫黄大片看国产片| 亚洲一区av| 激情综合在线观看| 国产欧美日本| 国产黄在线免费观看| 成人免费一区二区三区视频| 天堂在线资源网| 精品一区二区三区四区在线| 亚洲大胆精品| 成人午夜影院在线观看| 成人中文字幕视频| 日本黄色www| 不卡一卡二卡三乱码免费网站| 国产精品丝袜黑色高跟鞋| 日韩一区二区在线免费观看| 成人3d漫画免费无遮挡软件| 日韩免费中文字幕| 日本成人片在线| 免费看又黄又无码的网站| 99在线|亚洲一区二区| 欧美爱爱小视频| 亚洲成人你懂的| 黄色高清视频在线观看| 91精品国产亚洲| 国产综合色区在线观看| 男女私大尺度视频| 久久久久网站| 五月婷婷激情视频| 欧美日韩亚洲综合一区二区三区 | 黄色小视频在线免费观看| 精品亚洲欧美日韩| 国产欧美日韩| 成人手机在线免费视频| 久久精品亚洲精品国产欧美| 日批视频免费播放| 亚洲精选中文字幕| 波多野结衣在线影院| 久久亚洲高清| 色综合五月天| 天堂网中文在线观看| 一区二区三区不卡在线观看 | 国产精品极品美女粉嫩高清在线| 99久久99九九99九九九| 两性午夜免费视频| 91原创在线视频| 爱福利一区二区| www.精品av.com| 波多野结衣在线高清| 欧美日韩精品在线一区二区| 美女脱光内衣内裤视频久久网站| 中文字幕自拍偷拍| 亚洲成**性毛茸茸| 北岛玲日韩精品一区二区三区| 亚洲一区在线免费| 中国女人久久久| 日韩欧美在线观看免费| 日韩一区二区麻豆国产| 国产无套粉嫩白浆在线2022年| 亚洲精品国产精品久久| 亚洲精品人人| 国产午夜精品久久久久| 日韩欧美精品在线| av在线免费观看网| 国产日产欧美一区二区| 日本最新不卡在线| a天堂在线视频| 伊人久久精品视频| 忘忧草在线影院两性视频| 一区二区三区免费播放|