欧美日韩欧美日韩一区-国产又粗又硬的视频网站-五月婷婷激情综合激情-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)站二維碼

国产美女高潮欲仙欲死-亚洲裸体多毛xxxxxxxx-国产一区日韩二区欧美三区 xxxx69hd老师-去干网黄色 | 小嫩模无套内谢-免费精品久久天干天干-日韩五十路丝袜-国产农村妇女BBBBB性爽视频 | 天天干B-色翁荡息又大又硬又粗又苏玥-麻妃……欧美裸照片-久别的草原在线影院播放免费 | 热久久国产欧美一区二区精品-1080p资源在线看-精品全国最大调教网-欧美后入在线观看 | 91chineseXXXXVideos-亚洲啪啪网gogogo成人-vr你懂的在线播放-巨茎中出人妻水野优香-人妻少妇精品视频一区二区三区 | 亚洲影院午夜在线观看-狼人无码精华av午夜精品-老师诱奷小箩莉视频-年轻少妇SPa按摩91 | 做爱视频毛片下载蜜桃-淫荡人妻中文字幕-国产色情-搜索-57歳のバツ熟女北条麻妃 | 一级特黄老太婆大片-双性人妻在厨房被灌满jing液-欧洲免费黄色大片-日本japanese醉酒人妻 | freeXXX少妇性饥渴难耐-蜜美杏人妻少妇在线-东京热人妻一区二区三区 -毛很浓密超多黑毛的少妇按摩 | 色久综合网精品一区二区-人妖爱爱视频网站-日韩大胆美女掰开穴口流水视频-性XXXX搡XXXXX搡欧美 | 亚洲丰满熟妇无码XXXX-东北女人被操-国产九九精品电影-水野朝阳《丰满的女邻居》 | jizzjizz偷拍-一本道天天干-最近最好看的中文字幕av-深夜一区 | 精品无码久久久久久久久久 中文字幕精品一区二区-国产女人图片在线视频免费观看-免费国产午夜理论片不卡-国产全肉乱妇杂乱视频 | 黑人与亚洲人色Ⅹvideos-艳妇肉交dvideos-欧美生交XXXX录像-色大师操逼 | 国产亚洲精品久久久久久入口-av第一天堂-最美美女北条麻妃操逼片免费看-一级无码av在线免费播放 森泽佳奈与黑人视频-亚洲综合av一区二区三区-亚洲成a人片在线观看日本-4虎影院永久地址WWW | 无码成熟hd-亚洲A∨ 加勒比人妻-迅雷极速版下载 久久久久久精品无码午夜按摩师-精品99久久久久成人网站漫画 | 东北老熟女乱轮-性欧美1819性猛交-国产在线欧美日韩精品一区-国产精品人妻系列23p | 熟女露脸-91Porn-国产香蕉97碰碰视频碰碰看-少妇av激情-中国女人特黄大片 | 国产性生交XXXXX免费-国产伦精品一区二区爱妃视频-中文字幕一区二区-女同一区Tv | 日本护士free另类内谢-黑人黄色电影院看-亚洲多人双渗透-720最新电影在线观看 亚洲五月婷婷 720动漫免费观看 | 又大又白的熟妇屁股A片-迷j极品灌醉白嫩在-免费国产一级久久-足疗店的四川少妇AV在线 | 黃色A片美女人20岁-中文字幕精品一区二区精品-www.很很干-DVD日韩电影在线 免费无码在线aa | 全网古代美女毛片视频-安徽少妇BBBB搡BBBB-欧美黑人少妇高潮喷水-欧美第5页 | 大学生三级中国DVD-免费人成a大片在线观看-日韩AVwuma久久-黑人午夜视频 | 国产精品无码素人福利不卡-天综合日日夜综合7799-水户香奈色情片-久久精品卫校小美女 | 精品国产一区二区一区二-亚洲七七久久精品中文国产-北条麻妃大战黑人HD-中文字幕人妖一区二区 | BD英语日韩免费观看 无码精品国产第1页-亚洲欧美另类日本久久国产真实乱对白-720手机在线观看 酷百影院-少妇搡BBBB搡BBB搡澳门 | 怡红院视频视频在线观看-欧美大白屁股视频-日本熟女逼-美女任你操 | 纯肉高h啪动漫-高潮叫床ThePorn-邪恶欧美综合网-亚洲精品一区二区赵丽颖昆仑饭店 | 玻璃奶少妇-超级碰撞在线免费观看视频-伊人大香蕉视频-经典日韩成人网站在线观看 | 熟女人妻视-国产一区xfplay在线直播-被继夫侵犯HD换中文字幕-国产精品久久久爽爽爽麻豆色哟哟 | 性淫网站-1级黄片女人撒尿-日本女优毛茸茸-免费的性开放交友 | 欧日美一区二区三区-国语自产偷拍视频-日日干日日色-亚洲avi | 国产精品无码素人福利不卡-天综合日日夜综合7799-水户香奈色情片-久久精品卫校小美女 | 国产乱理伦片在线观看-99精品无码免费专区喷水-黄上片床大全-欧美专区第十页 | 狂c亲女h高潮10次-欧美日韩精品一区二区-男女草草-北条麻妃最爽的一次 | 嫩草伊人-好吊操视频-中国XXXXXXXXXXX98-欧美mv日韩mv国产网站 | 日韩无毛大片久久凹凸曼-正在播放享受黑人大对白-bytv在线观看-日本XXXxBBBB | 东北浪妇大荫蒂大叫-黄色xxxxxxxxxxxx日本人-中文欧美性爱在线 亚洲免费电影网站-Free性中国HD国语露脸 | 东北女人户外野战A片-国产调教中文字幕在线观看了,-一级黄色电影在线观看看-黑人Av插操 | 黑人与亚洲人色Ⅹvideos-艳妇肉交dvideos-欧美生交XXXX录像-色大师操逼 |