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

      国内精品久久久久影院一蜜桃| 亚洲天堂福利av| 中文字幕中文字幕在线中心一区| 亚洲v国产v| 亚洲国产一区二区三区| 亚洲www啪成人一区二区麻豆| 成人黄色大片在线观看| 91精品国产免费| 2021国产精品久久精品| 国产精品你懂的| 裸体丰满少妇做受久久99精品| 免费人成网站在线观看欧美高清| 另类调教123区 | 欧美精品v日韩精品v韩国精品v| 欧美伦理电影网| 欧美电影免费提供在线观看| 国产精品午夜春色av| 91福利在线免费观看| 欧美浪妇xxxx高跟鞋交| 久久蜜桃一区二区| 亚洲猫色日本管| 美女网站在线免费欧美精品| 国产精品一级在线| 国产伦精品一区二区三区| 久久先锋影音av鲁色资源网| 日韩天堂在线观看| 欧美激情中文字幕一区二区| 亚洲综合成人在线| 国产精品自拍三区| 国产亚洲情侣一区二区无| 亚洲欧洲精品在线观看| 日韩欧美久久一区| 一区二区三区四区在线免费观看| 久久国内精品自在自线400部| 91国产在线播放| 中文字幕中文字幕在线中心一区| 欧美精品一区二区三区一线天视频 | 亚洲18女电影在线观看| 国产不卡在线一区| 欧美一级一级性生活免费录像| av在线播放成人| 翔田千里亚洲一二三区| 日韩午夜精品电影| 91黄色激情网站| 久久女同精品一区二区| 亚洲国产毛片aaaaa无费看 | 国产成人激情av| 看欧美日韩国产| 日韩午夜在线影院| 久久精品国产一区二区三区免费看| 97精品国产97久久久久久久久久久久| 日本一区二区精品| wwww国产精品欧美| 日韩高清在线观看| 国产伦精品一区二区三区高清版| 欧美日韩亚洲综合一区二区三区| 亚洲色图欧美偷拍| 不卡欧美aaaaa| 国产高清在线精品| 视频一区视频二区视频三区高| 欧美成人bangbros| 蜜桃av噜噜一区| 欧美一区观看| 国产精品免费av| 成人免费毛片嘿嘿连载视频| 日本韩国欧美一区| 3d动漫啪啪精品一区二区免费| 色8久久精品久久久久久蜜| 国产精品久久久久久亚洲毛片| 国产成人精品1024| 欧美亚洲高清一区二区三区不卡| 亚洲卡通动漫在线| 国产美女精品久久久| 精品日产卡一卡二卡麻豆| 琪琪久久久久日韩精品| 日本aⅴ精品一区二区三区| 激情伦成人综合小说| 久久综合九色综合97婷婷女人| 精品一区二区三区在线播放| 亚洲精品乱码视频| 一级中文字幕一区二区| 国产麻豆日韩| 国产精品视频免费| 欧美一区二区三区精品| 久久综合久久鬼色| eeuss鲁片一区二区三区在线观看| 欧美日韩一级视频| 久久99精品一区二区三区三区| 亚洲欧美国产不卡| 亚洲国产日韩a在线播放性色| 久久久久久久久四区三区| 国产精品国产三级国产普通话99| 999国产在线| 亚洲精品一区二区三区四区高清| 成人永久看片免费视频天堂| 日韩丝袜情趣美女图片| 成人中文字幕合集| 精品国产91久久久久久久妲己| 国产成人免费在线观看不卡| 制服丝袜中文字幕亚洲| 成人性视频网站| 精品国产免费久久| 2022国产精品| 亚洲国产精品v| 久久久久久久久久久久久久一区 | 欧美一区二区在线| 欧美日韩免费不卡视频一区二区三区| 成人免费黄色大片| 精品久久中出| 亚洲欧美日本韩国| 天天综合色天天综合色hd| 亚洲国产日韩精品| 欧美最猛黑人xxxxx猛交| 精品一二三四区| 国产九九视频一区二区三区| 国产精品一区二区a| 中文字幕人成不卡一区| 青青草国产精品| 另类调教123区| 欧美大胆一级视频| 国产精品免费在线播放| 有码一区二区三区| 欧美在线色视频| 成人激情免费视频| 成人欧美一区二区三区在线播放| 国产毛片一区二区| 精品成人佐山爱一区二区| 国产在线一区二区三区四区| 亚洲一区在线观看视频| 欧美男同性恋视频网站| 91麻豆免费看片| 亚洲成人激情社区| 91麻豆精品国产| 国产免费一区二区| 不卡的av网站| 欧美国产日韩亚洲一区| 亚洲激情一区二区| 国产精品亚洲第一| 欧美激情中文不卡| 色噜噜夜夜夜综合网| 国产成人av一区二区三区在线观看| 国产亚洲欧洲997久久综合 | 欧美色精品在线视频| 成人网页在线观看| 亚洲另类色综合网站| 欧美日韩午夜精品| 99久久精品免费看国产一区二区三区| 亚洲一区在线免费观看| 国产综合 伊人色| 日韩电影在线观看网站| 欧美va日韩va| 视频一区免费观看| 99久久精品国产毛片| 亚洲综合丝袜美腿| 日韩精品一区国产麻豆| 欧美日韩国产免费一区二区三区 | 亚洲特黄一级片| 一本一本大道香蕉久在线精品| 99久久久精品免费观看国产蜜| 一二三区精品视频| 精品少妇一区二区三区在线播放| 欧美日韩最好看的视频| 国产成人久久精品77777最新版本| 亚洲精品第一国产综合野| 精品久久久久一区| 中国成人亚色综合网站| 国产女人水真多18毛片18精品| 激情深爱一区二区| 亚洲午夜视频在线观看| 国产亚洲欧美一区在线观看| 在线观看一区日韩| 欧美一进一出视频| 成人高清在线观看| 国产精品自拍av| 日韩1区2区日韩1区2区| 亚洲视频一区二区在线| 久久超碰亚洲| 从欧美一区二区三区| 日本va欧美va欧美va精品| 国产精品亲子乱子伦xxxx裸| 欧美一级二级三级蜜桃| 色狠狠综合天天综合综合| 成人免费精品视频| 精品一区二区三区的国产在线播放| 亚洲人一区二区| 午夜欧美电影在线观看| 自拍偷拍亚洲欧美日韩| 久久久亚洲精华液精华液精华液| 欧美理论电影在线| 色综合一个色综合| 欧美综合77777色婷婷| 国产伦精品一区二区三毛| www.欧美日韩| 国产成人免费视频网站| 国产在线看一区| 韩国精品免费视频| 久久精品久久久精品美女| 日韩一区和二区| 欧美久久免费观看| 欧美日韩高清不卡|