欧美日韩欧美日韩一区-国产又粗又硬的视频网站-五月婷婷激情综合激情-1024人妻第一页-日韩伦理片美人-久久v一级毛多内射-欧美激情精品久久久久久蜜臀-高清欧美一区二区在线观看-日韩精品在线www,国产人妻欧美人妻超碰,亚洲欧美日韩动漫在线,国产精品综合久久五月天

咨詢熱線

18621916738

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

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

更新時間:2016-01-04      點擊次數(shù):2869

西門子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ò)標題

// 在*個循環(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)站二維碼

亚洲日本成人一区二区-老熟女性爰网-天天想你天天干你-爆插熟女 小林真梨香人妻熟妇中出-日无嘛vvv区-天天操BBw-在线国产喝尿 | jizz中国免费-chinese熟女老女人hd-五月天婷婷丁香中文字幕-婷婷久久一区二区三区 | 高清在线播放 99久久久国产精品免费蜜臀 剧情片免费观看 国产精品久久久-久久国产精品99国产免费72-精品亚洲成a人片在线观看-女生不穿内裤和男生在线网站 | 三级网站在线观看视频-人善交videoS欧美3D-国产一区二区视屏-老熟妇重口另类XXX | 国产无码3344-GOGOGO免费手机国语-新婚偷拍精品-BD英语在线观看高清 | 中文字幕在线第三页-嗯~用力啊~嗯~c我~白洁-一级a毛片免费观看久久精品-中文官网资源新版中文第二页在线观看 | 美女扒开自慰-本庄优花母乳-www.久青-亚洲Aⅴ黄色无码网站 | 成年午夜性影院免费观看-日韩一区二区三区在线视频观看-久久精品最新获取地址10-1080P免费观看 久久99亚洲网美利坚合众国 | 熟女露脸-91Porn-国产香蕉97碰碰视频碰碰看-少妇av激情-中国女人特黄大片 | 中国老女人自慰-国产咪咪-国产偷拍精品视频-欧美日韩激情Aⅴ在线日韩高清二区 | 欧美天堂网第一页-非洲毛片大香蕉-懂色 av-久久久久伦理精品 | 午夜女人-五十路熟女SM-BD韩语高清完整版播放 精品久久人人爽天天玩人人妻-宇都宫紫苑野外中文字幕 | 东北在线色情视频-嫩草影院 一二三四-www一本激情国产-超碰最新进入 | 国产强 暴 疼 哭 无套女处-日韩欧美一道本-偷拍白拍韦小宝在线观看-熟女操逼真实裸体视频 | 艳妇视频一区二区三区-中文字幕一区在线观看-在线观看黄片www-偷看隔壁老师洗澡自慰 | 国产成人一区二区三区久久精品-gogogo高清完整-91熟女人妻-26uuu性屋公告 | 在线观看北条麻妃中文-国内足疗按摩店88AV-欧美亚洲一区二区精东传媒-丰满岳乱妇在线观看中字无码 嗯啊灬啊灬灬欧美视频 | 欧美a级毛欧美1级a大片免费播放-日本肉体xxxx裸交 日韩av电影不卡顿无码-伊人干综合网-综合伊人V女 | 国产chinese摸醉酒直男-粗暴强奷娇小-一级欧美熟妇24P-1080P高清完整版 国产午夜精品久久久久免费视 | 国产黑人一区二区三区在-一区二区三区在线 最热电视剧-一本大道黑丝视频-五十路女优 | 高清在线播放 99久久久国产精品免费蜜臀 剧情片免费观看 国产精品久久久-久久国产精品99国产免费72-精品亚洲成a人片在线观看-女生不穿内裤和男生在线网站 | 国产屁屁影院-大桥未久中出电影-40厘米黑人凶猛A片-99精品国产一区二区青青牛奶 | 国产精品一区二区不卡的视频-夏晴子一区二区-簧片大全在线免费观看-男同同性gv一区二区 | 国产精品久久久久久吹潮-日韩人妻无码版-青青青青青青操-粉嫩Av绯色AV蜜乳AV | 123网址色伊人-伊人干干干-国产 老头 视频-国产美女裸体无遮挡免费视频 | 国产后入式-DVD电影免费在线 国产精品乱码在线观看-野外猛男的大粗鳮1巴-BD在线视频观看 | 久久亚洲国产精品午夜AV色欲-黑人无码专区-国产熟妇搡BBBB搡BBBB搡-性爱动态图日本 | 国产三级日产三级国-四虎三级片-4444亚洲人成无码网在线观看-真实国产精品视频国产网 | 孕妇被各种姿势C哭-久久精品视频777 -国产精品人成a片一区二区-337p大尺度啪啪人体午夜 | 中国女人做爱A片-欧美久久亚洲精品 亚洲黄色一级-国模粉嫩小泬视频在线观看-玩弄大荫蒂视频 | 婚前夜NTR岬奈奈美在线播放-国产精品亚洲日韩另类蜜臀涩爱-色鬼艳魔大战2之黑人-91free prom Chinese | 自慰毛片69-乱欲好紧视频97-赵丽颖av激情无码-黑人av成人av绯色av | 黑人毛片看看-国产男女AV-苍井空和黑人最猛一次-国产av好看兔兔 中文字幕色情日本亚洲A-99re热免费精品视频观看-久久久久久久97-另类BwBWBwBWBW视频 | 亚洲日韩另类制服无码专区-四川BBB又粗又大又硬-无码后入-亚洲最大一级无码高清 | 欧美天堂在线视频-美女教师岬奈奈美-色婷婷精品国产黑人一区二区三区-重口老太一区二区三区免费 国产一区无码激情 1080P电影在线看-一本一道综合-日韩一区在线视频-羽月希奶水一区二区三区 | 东京热一级片子-性――交――性――乱睡觉下载-BD英语高清视频播放 久久久无码精品亚洲日韩京东传媒-日逼网站大全 | 毛片电影一区二区三区-淫语对白刺激的交换-欧美see少妇裸体pⅰcs大全-巨骚综合懂色AV和驴 | 偷偷要男人的天堂-自拍偷拍网站-亚洲高清有码中文字-一本道性生活 | 艳妇骚穴-秋霞欧美黑人-少妇人妻好深太紧了A片91天美-91丨熟女丨对白 | 人妻理论精品一区二区三区-天堂av在线免费观看8-欧美综合第六页-twitter冯珊珊公园任务视频 | 国产性生交XXXXX免费-国产伦精品一区二区爱妃视频-中文字幕一区二区-女同一区Tv |