国产人妖ts在线视频观看_亚洲国产精品网_免费播放观看视频大片_欧美黄色片免费观看

咨詢熱線

18621916738

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

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

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

西門子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

掃一掃 更多精彩

微信二維碼

網站二維碼

国产人妖ts在线视频观看_亚洲国产精品网_免费播放观看视频大片_欧美黄色片免费观看

                欧美一区不卡| 国产精品激情| 欧美精彩视频一区二区三区| 亚洲欧美网站| 在线视频你懂得一区| 国内成+人亚洲| 国产欧美一区二区精品性色| 国产一区二区久久久| 国产日产高清欧美一区二区三区| 国产一区二区高清| 最新日韩在线视频| 销魂美女一区二区三区视频在线| 国产精品一区久久| 亚洲欧美综合另类中字| 女同性一区二区三区人了人一| 欧美国产先锋| 国产精品少妇自拍| 曰韩精品一区二区| 一本色道久久88综合日韩精品| 亚洲欧美视频一区二区三区| 欧美~级网站不卡| 国产欧美视频在线观看| 亚洲国产成人午夜在线一区| 99人久久精品视频最新地址| 午夜在线一区| 欧美日韩成人在线视频| 国产区在线观看成人精品| 国产曰批免费观看久久久| 国产一区二区精品久久91| 亚洲激情图片小说视频| 亚洲网址在线| 亚洲成人在线网| 91久久精品久久国产性色也91| 欧美屁股在线| 激情久久影院| 欧美在线视频免费播放| 老鸭窝毛片一区二区三区| 欧美日韩精品一区视频| 激情久久久久久久| 亚洲免费网站| 欧美日韩亚洲一区二| 国产亚洲成av人在线观看导航| 亚洲精品美女在线观看| 亚洲精品无人区| 欧美专区一区二区三区| 亚洲乱码国产乱码精品精98午夜| 亚洲精品女人| 另类成人小视频在线| 国产一区二区三区在线观看免费视频| 麻豆成人在线播放| 国产日韩欧美二区| 亚洲精品一区二区三区av| 久久成人综合网| 欧美日韩免费区域视频在线观看| 国产人成一区二区三区影院| 一区二区日韩欧美| 欧美精品乱码久久久久久按摩| 国产亚洲一区二区三区在线观看| 夜夜嗨av一区二区三区免费区| 麻豆国产va免费精品高清在线| 欧美日韩亚洲一区二区三区四区| 黄色精品一区| 国产伪娘ts一区| 一区二区三区视频在线播放| 欧美乱人伦中文字幕在线| 亚洲国产免费| 欧美精品在线播放| 一二三区精品福利视频| 欧美日韩一区二区三区| 在线精品视频一区二区| 国产午夜精品全部视频在线播放| 一本不卡影院| 欧美区一区二| 在线视频精品一| 国产精品久久久久久久午夜片| 亚洲精品欧美一区二区三区| 欧美成人午夜免费视在线看片| 在线观看亚洲一区| 国产伊人精品| 狂野欧美激情性xxxx欧美| 欧美在线视频免费观看| 狠狠噜噜久久| 欧美日韩一区二区国产| 亚洲免费网址| 国产一区二区三区观看| 国产无遮挡一区二区三区毛片日本| 性高湖久久久久久久久| 国产亚洲一级高清| 亚洲欧美在线视频观看| 欧美成人免费va影院高清| 欧美亚洲综合网| 欧美成人精品在线视频| 欧美国产一区二区三区激情无套| 亚洲电影在线| 久久亚洲春色中文字幕| 久久久久.com| 欧美日韩国产影片| 一本一道久久综合狠狠老精东影业| 欧美国产视频在线观看| 国产乱子伦一区二区三区国色天香| 91久久精品美女高潮| 黄色成人小视频| 国产一区二区三区的电影| 欧美在线观看一区二区| 精品1区2区3区4区| 一区二区三区欧美成人| 欧美成人一二三| 国产精品区免费视频| 亚洲精品视频中文字幕| 久久精品国产96久久久香蕉| 国产深夜精品福利| 亚洲精品日韩一| 久久久www成人免费毛片麻豆| 久久av在线看| | 国产精品理论片在线观看| 欧美体内谢she精2性欧美| 国产精品第13页| 亚洲一区二区视频在线观看| 99国产成+人+综合+亚洲欧美| 国产精品va在线播放我和闺蜜| 欧美精品一区二| 国产在线精品二区| 夜夜精品视频一区二区| 免费久久99精品国产自| 久久久久久网站| 欧美亚洲综合在线| 亚洲国产婷婷香蕉久久久久久99| 裸体一区二区| 一区二区三区精品国产| 欧美日韩国产精品| 伊人狠狠色j香婷婷综合| 亚洲欧美成人综合| 久久国产主播| 精久久久久久久久久久| 欧美精品午夜| 久久超碰97人人做人人爱| 亚洲福利视频三区| 久久一日本道色综合久久| 欧美激情在线免费观看| 亚洲香蕉在线观看| 久久精品一区蜜桃臀影院| 99热在这里有精品免费| 国产日韩精品综合网站| 亚洲欧美日韩另类精品一区二区三区| 欧美日韩 国产精品| 国产欧美日韩精品丝袜高跟鞋| 美女啪啪无遮挡免费久久网站| 欧美成年人网| 亚洲中字在线| 国产一区二区黄| 欧美不卡福利| 久久精品亚洲国产奇米99| 欧美+日本+国产+在线a∨观看| 亚洲区在线播放| 久久av老司机精品网站导航| 中国成人亚色综合网站| 国产精品色婷婷久久58| 亚洲片区在线| 欧美日韩国产欧美日美国产精品| 美女日韩在线中文字幕| 国产免费成人| 国产精品久久777777毛茸茸| 欧美jizz19hd性欧美| 尤妮丝一区二区裸体视频| 欧美亚洲免费电影| 99精品国产在热久久婷婷| 久久人人看视频| 亚洲影音先锋| 亚洲国产成人av好男人在线观看| 久久精品国产96久久久香蕉| 欧美一区免费| 亚洲视频精选在线| 日韩亚洲不卡在线| 久久久在线视频| 国产精品激情电影| 欧美日韩一区二区视频在线| 精品1区2区3区4区| 在线成人国产| 久久精品99国产精品| 国产精品久久一区主播| 欧美sm重口味系列视频在线观看| 国产亚洲精久久久久久| 久久人人97超碰国产公开结果| 国产农村妇女毛片精品久久麻豆| 久久婷婷麻豆| 亚洲精品一线二线三线无人区| 国内精品久久久久久| 欧美多人爱爱视频网站| 久久久久久久久蜜桃| 国产嫩草一区二区三区在线观看| 国产精品一区二区欧美| 久久国产精品久久精品国产| 日韩一级精品| 影音先锋亚洲精品| 欧美日本国产| 久久偷窥视频| 欧美v国产在线一区二区三区| 久久综合网络一区二区| 亚洲精品免费一区二区三区|