国产日韩欧美亚洲一区_国产精品va在线_国产成人综合精品_久久久综合香蕉尹人综合网_91久久精品美女高潮_欧美激情一区二区久久久_成人免费视频a_亚洲精品一区二区三区av_5566日本婷婷色中文字幕97_日韩免费高清在线观看

咨詢熱線

18621916738

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

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

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

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

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 '打開關(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ù)取出來(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)站二維碼

国产日韩欧美亚洲一区_国产精品va在线_国产成人综合精品_久久久综合香蕉尹人综合网_91久久精品美女高潮_欧美激情一区二区久久久_成人免费视频a_亚洲精品一区二区三区av_5566日本婷婷色中文字幕97_日韩免费高清在线观看
欧美黄色免费影院| 91日韩视频在线观看| 日韩在线xxx| 国内少妇毛片视频| 一级全黄肉体裸体全过程| 精品综合久久久久| 我要看一级黄色大片| 无遮挡又爽又刺激的视频| 日日碰狠狠添天天爽超碰97| 黄色成人在线免费观看| 欧美高清中文字幕| 日本免费成人网| 中国黄色录像片| 看一级黄色录像| 麻豆md0077饥渴少妇| 免费看国产黄色片| 可以免费观看av毛片| 亚洲色欲综合一区二区三区| 国产女大学生av| 农村妇女精品一二区| 国产性xxxx18免费观看视频| 免费黄色日本网站| 无码日韩人妻精品久久蜜桃| 苍井空浴缸大战猛男120分钟| 精品久久久久久久无码| 国产福利在线免费| 1314成人网| 91网站在线观看免费| 青青青免费在线| 国产精品少妇在线视频| 欧美午夜aaaaaa免费视频| 天天操狠狠操夜夜操| 香蕉精品视频在线| 欧美黄网在线观看| 国产成人精品视频免费看| 五月婷婷深爱五月| 免费成人黄色大片| a级黄色片免费| 无码aⅴ精品一区二区三区浪潮| 中文字幕在线导航| 精品国产乱码久久久久久1区二区| 三日本三级少妇三级99| 久久精品在线免费视频| 国内精品视频一区二区三区| 女性隐私黄www网站视频| 色噜噜狠狠永久免费| 欧美h视频在线观看| 日韩精品视频在线观看视频| 欧美性久久久久| 欧美在线aaa| 轻点好疼好大好爽视频| 亚洲综合在线网站| 欧美日韩一级在线| 哪个网站能看毛片| 国产免费中文字幕| 日本午夜激情视频| 欧美伦理片在线观看| 色哟哟免费网站| 日本在线观看a| 麻豆md0077饥渴少妇| av天堂永久资源网| 欧美 另类 交| 日本三级免费网站| 欧美亚洲视频一区| 久草青青在线观看| 国产免费xxx| 色一情一乱一伦一区二区三区日本| xxx中文字幕| 成人在线观看a| 国产一区二区三区播放| 天天色综合天天色| 妞干网在线视频观看| 手机在线国产视频| 成人三级视频在线播放| wwwwww欧美| 久久久久久久久久一区| 波多野结衣家庭教师在线播放| 九九热精品在线播放| 777久久久精品一区二区三区| 久久精品一二三四| 精品久久久久av| 免费特级黄色片| 久久出品必属精品| 韩国视频一区二区三区| 欧美精品久久久久久久自慰| 搡的我好爽在线观看免费视频| 日韩一级免费在线观看| 国产v片免费观看| 亚洲天堂第一区| 日韩精品aaa| 另类小说第一页| 爱福利视频一区二区| 日韩成人三级视频| 亚洲欧美一区二区三区不卡| 免费裸体美女网站| 自慰无码一区二区三区| 日本大胆人体视频| 热这里只有精品| 免费精品99久久国产综合精品应用| 鲁一鲁一鲁一鲁一澡| 搞av.com| 99er在线视频| 日韩精品一区二区三区电影| 午夜天堂在线视频| 岛国毛片在线播放| 青青青在线视频免费观看| 亚洲熟女乱色一区二区三区| 国产96在线 | 亚洲| 岛国大片在线播放 | 欧美黄色一级片视频| 国产无限制自拍| av在线com| 日韩精品一区二区在线视频| 国产欧美123| 日韩专区第三页| 蜜桃网站在线观看| 路边理发店露脸熟妇泻火| 无套内谢丰满少妇中文字幕| 无套内谢丰满少妇中文字幕| 四虎影院一区二区| 玖玖精品在线视频| 久久久无码中文字幕久...| 日韩精品手机在线观看| 成人免费看片视频在线观看| 日本免费黄色小视频| 国产精品三级一区二区| 亚洲精品无码国产| 丝袜老师办公室里做好紧好爽| 男人揉女人奶房视频60分| 黄页网站大全在线观看| 国产91在线视频观看| 午夜视频在线瓜伦| 蜜臀一区二区三区精品免费视频| www.cao超碰| 日韩精品在线播放视频| 97久久国产亚洲精品超碰热| 成人在线观看你懂的| 日本成人在线免费视频| 538任你躁在线精品免费| 999在线精品视频| 爱爱爱视频网站| 日韩av新片网| 日韩av播放器| 亚洲一二三不卡| 岛国大片在线播放 | www.涩涩涩| 国产一区一区三区| 日本在线xxx| 538任你躁在线精品免费| 四虎免费在线观看视频| 国产 日韩 亚洲 欧美| 成人精品小视频| 做爰高潮hd色即是空| www.射射射| 黄色三级视频在线| 在线观看成人免费| 欧美 丝袜 自拍 制服 另类| 在线看的黄色网址| 精品无码av无码免费专区| 99色精品视频| 国产农村妇女精品久久| 国产一区二区视频播放| 天天爽天天爽夜夜爽| 51xx午夜影福利| 无码精品国产一区二区三区免费| 亚洲天堂伊人网| 青青青在线视频播放| 亚洲精品自拍网| av在线播放天堂| 四季av一区二区三区| 给我免费播放片在线观看| 簧片在线免费看| 国产日韩av网站| 国内av一区二区| 国产h视频在线播放| 天天色天天综合网| 六月丁香激情网| 男女h黄动漫啪啪无遮挡软件| 国产成人亚洲精品无码h在线| 国产精品美女在线播放| 国产精品人人妻人人爽人人牛| 热久久最新网址| 国产精品视频分类| 国产一区二区网| 三级网在线观看| 男女视频在线看| 成人综合视频在线| 中文字幕色呦呦| 中文字幕22页| 欧美污视频网站| 欧美日韩激情四射| 久久久久久久久久一区| 色综合av综合无码综合网站| 亚洲一区 在线播放| 蜜桃福利午夜精品一区| 久久久精品在线视频| 日本一区午夜艳熟免费| 日韩视频在线免费播放| 午夜在线观看av| 国产精品欧美激情在线观看|