亚洲精品第一国产综合野_亚洲国产精品国自产拍电影_亚洲自偷自偷在线制服_亚洲码一区二区三区

咨詢熱線

18621916738

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

西門(mén)子S7-200 ModBus從站通訊程序

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

西門(mén)子S7-200 ModBus從站通訊程序

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

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

另外,上位機(jī)是用VB編寫(xiě),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 = "打開(kāi)串口"

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 '打開(kāi)關(guān)閉按鈕顯示文字

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

Else

Command3.Caption = "打開(kāi)串口"

End If

If Err Then '打開(kāi)串口失敗,則顯示出錯(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)站二維碼

亚洲精品第一国产综合野_亚洲国产精品国自产拍电影_亚洲自偷自偷在线制服_亚洲码一区二区三区

      亚洲精品你懂的| 久久免费的精品国产v∧| 国产亚洲成aⅴ人片在线观看| 一区二区三区四区在线| 极品美女销魂一区二区三区| 久久这里只精品最新地址| 亚洲精品大片www| 欧美一区2区视频在线观看| 1区2区3区欧美| 国产美女娇喘av呻吟久久| 国产精品女人毛片| 欧美吻胸吃奶大尺度电影| 中文av字幕一区| 蜜桃视频一区二区| 日本一区二区免费在线观看视频| 91九色02白丝porn| 欧美国产综合色视频| 奇米精品一区二区三区四区 | 久久婷婷综合激情| 亚洲一区二区黄色| 97久久超碰国产精品电影| 午夜亚洲福利老司机| 欧美精品一区二区久久婷婷| 五月天婷婷综合| 久久品道一品道久久精品| 色婷婷亚洲精品| 国产精品人人做人人爽人人添| 美腿丝袜在线亚洲一区| 国产精品麻豆欧美日韩ww| 4438亚洲最大| 午夜日韩在线观看| 久久精品一区蜜桃臀影院| 欧美午夜不卡视频| 亚洲精品欧美二区三区中文字幕| jizzjizzjizz欧美| 色哟哟在线观看一区二区三区| 国产精品丝袜久久久久久app| 国产一本一道久久香蕉| 亚洲一区免费观看| 欧美韩国日本不卡| 国产成人免费视频| 舔着乳尖日韩一区| 中文字幕在线不卡| 成人黄色777网| 91国模大尺度私拍在线视频| 亚洲男人的天堂在线观看| eeuss鲁片一区二区三区| 欧美午夜电影网| 亚洲成av人**亚洲成av**| 久久精子c满五个校花| 欧美一区二区三区思思人| 日韩福利电影在线观看| 国产精品高潮久久久久无| 久久午夜羞羞影院免费观看| 国产在线国偷精品免费看| 亚洲一区二区欧美日韩| 综合av第一页| 久久久高清一区二区三区| 欧美一级二级在线观看| 另类专区欧美蜜桃臀第一页| 一区二区在线免费| 日韩毛片一二三区| 久久久精品2019中文字幕之3| 日韩女优av电影在线观看| 精品一区二区三区日韩| 偷拍与自拍一区| 亚洲自拍偷拍欧美| 国产精品三级在线观看| 久久精品免费在线观看| 成人18精品视频| 日韩一区和二区| 国内精品嫩模私拍在线| 91成人在线观看喷潮| 天天影视涩香欲综合网| 亚洲欧美另类图片小说| 最新国产成人在线观看| 欧美国产成人精品| 久久色在线视频| 波多野结衣91| 日韩欧美激情在线| 国产精品综合一区二区| 欧美日韩免费高清一区色橹橹| 免费在线观看视频一区| 亚洲国产精品久久人人爱| 亚洲香肠在线观看| 樱桃国产成人精品视频| 一区二区三区不卡视频在线观看| 国产精品电影院| 亚洲欧美日韩电影| 国产精品成人免费| 一区二区中文字幕在线| 国产精品久久一级| 中文天堂在线一区| 亚洲国产精品t66y| 国产精品美女久久久久久久| 国产午夜亚洲精品羞羞网站| 国产日本一区二区| 国产亚洲精品久| 国产精品视频一二| 国产精品免费网站在线观看| 亚洲欧美影音先锋| 亚洲视频你懂的| 一区二区三区四区不卡在线| 亚洲黄色片在线观看| 亚洲一区成人在线| 亚洲一区二区在线播放相泽 | 国产日韩欧美精品综合| 久久精品水蜜桃av综合天堂| 中文字幕不卡在线| 中文字幕乱码日本亚洲一区二区| 中文字幕亚洲综合久久菠萝蜜| 中文字幕五月欧美| 一二三区精品视频| 污片在线观看一区二区| 久久国产尿小便嘘嘘| 欧美精品日韩一本| 成人国产精品免费| 国产欧美一区二区三区网站| 日本一区二区三区在线观看| 亚洲免费在线观看视频| 亚洲国产精品久久久久秋霞影院| 免费观看在线综合| 欧美妇女性影城| 97精品超碰一区二区三区| 中文成人av在线| 一区二区三区成人| 青青草97国产精品免费观看无弹窗版| 在线观看亚洲a| 粉嫩一区二区三区在线看| 欧美电影免费提供在线观看| 国产欧美精品区一区二区三区| 亚洲免费观看高清完整版在线| 亚洲不卡av一区二区三区| 久久er精品视频| 欧美成人一区二区三区片免费 | 国产精品一区二区三区网站| 久久综合九色综合97婷婷| 欧美激情中文字幕一区二区| 一区二区成人在线视频 | 视频一区二区三区入口| 欧美精品18+| 久久先锋影音av鲁色资源| 综合在线观看色| 一本一道久久a久久精品| 国产精品77777| 中文字幕巨乱亚洲| 一区二区三区小说| 国产一区二区在线观看免费| 国产无遮挡一区二区三区毛片日本| 亚洲丝袜另类动漫二区| 琪琪久久久久日韩精品| 精品精品国产高清a毛片牛牛| 国产精品久久一级| 秋霞影院一区二区| 精品国产乱码久久久久久牛牛| 国产精品久久久久精k8| 奇米精品一区二区三区在线观看| 欧美tickle裸体挠脚心vk| 成人欧美一区二区三区小说| 精品在线一区二区| 久久亚洲精精品中文字幕早川悠里 | 国产精品丝袜黑色高跟| 亚洲成人高清在线| 国产成+人+日韩+欧美+亚洲 | 日本一区二区三区四区| 日韩精品免费专区| www欧美成人18+| 一区二区三区免费观看| 国产精品一区一区| ...xxx性欧美| 欧美日本国产视频| 国产精品视频看| 黄色资源网久久资源365| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品久久午夜夜伦鲁鲁| 精品一区二区三区日韩| 国产免费观看久久| 日本乱人伦aⅴ精品| 久久亚洲私人国产精品va媚药| 午夜精品久久久久久久99樱桃 | 日本久久一区二区| 久久久av毛片精品| 久久精品国产精品亚洲精品| 国产精品久久三| 欧美私人免费视频| 中文字幕在线不卡| 国产精品1区2区3区| 一区二区三区在线观看国产| 日韩你懂的在线播放| 亚洲久本草在线中文字幕| 不卡一区在线观看| 日韩国产高清在线| 国产午夜精品一区二区三区嫩草| 91黄色免费网站| 国产欧美日韩综合精品一区二区| 久久精品国产精品亚洲精品| 中文字幕一区二| 日韩欧美卡一卡二| 色综合久久天天| 欧美高清在线精品一区|