午夜精品久久久久久久久久久久-午夜精品久久久久久久免费福利视频-午夜精品久久久内射近拍高清-午夜精品免费视频观看在线-午夜精品网站亚洲一级在线-午夜精品亚洲一区二区三区嫩草

咨詢熱線

18621916738

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

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

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

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

掃一掃 更多精彩

微信二維碼

網站二維碼

在线播放国产不卡免费视频| 亚洲成AV人片高潮喷水| 黑料吃瓜网998.SU永久有效| 亚洲一区二区无码成人AV | 国产精品国产三级国产AV麻豆 | 草草影院精品一区二区三区| 无码人妻 在线视频| 精品人妻大屁股白浆无码| 中文字幕无码不卡一区二区三区| 日本XXXX18裸体XXXX| 国产精品宾馆在线精品酒店| 亚洲人成绝费网站色WWW吃脚| 内射合集对白在线| 公司办公室的秘书3| 亚洲韩国精品无码一区二区三区| 免费午夜爽爽爽WWW视频十八禁| 岛国无码AV不卡一区二区| 亚洲AV中文无码乱人伦下载 | 亚洲AV电影天堂男人的天堂| 老师黑色双开真丝旗袍| 成人Av在线播放| 亚洲ΑV无码一区二区三区四区| 老色鬼久久亚洲AV综合| 成人区人妻精品一区二区三区| 亚洲AV影院一区二区三区| 蜜桃av中文字幕在线| 丰满人妻熟妇乱又伦精品| 亚洲加勒比少妇无码AV| 欧美精产国品一二三类产品特点| 国产精成人品日日拍夜夜免费 | 无码熟熟妇丰满人妻啪啪软件| 久久久久人妻一区精品色欧美| 被老头一个晚上做了6次| 亚洲AV无码乱码国产精品FC2| 蜜桃久久久久久精品免费观看| 高一数学网课免费-2| 亚洲熟妇少妇任你躁在线观看无码| 强行无套内谢大学生初次| 国产无套粉嫩白浆在线| 18禁无遮挡啪啪摇乳动态图| 偷拍激情视频一区二区三区| 亚洲阿V天堂无码2020| 粗大的内捧猛烈进出| 亚洲AV成人综合网成人| 蜜臀av夜夜嗨一区二区粉嫩| 高雅人妻被迫沦为玩物电影BD| 亚洲内射夜夜嗨av| 精品人伦一区二区三区蜜桃| 亚洲春色AV无码专区在线播放| 免费A级毛片出奶水| 动漫精品中文无码卡通动漫| 亚洲精品卡一卡2卡3卡4卡| 欧美人伦禁忌DVD放荡欲情| 国产男女猛烈无遮挡免费视频| 中国熟妇色XXXXX| 老头发狂的吸住她的乳尖| 当着全班面被C到高潮哭视频 | 欧美黑人成人www在线观看| 国产乱理伦片A级在线观看| 中国极品少妇XXXXX1314| 偷拍激情视频一区二区三区| 美日欧激情AV大片免费观看| 国产精品视频免费播放| 18禁肉肉无遮挡无码网站| 性生生活色欲片性按摩| 欧美性爱第一页色色色| 怀孕挺大肚子疯狂高潮AV毛片| 被黑人猛烈30分钟视频| 亚洲欧美高清一区二区三区| 日日玩日日摸日日上| 久久久久久久精品免费看人女| 国产AV剧情MD精品麻豆| 公交车后车座疯狂的做的细节| 亚洲精品无码久久久久Y| 日本少妇高潮喷水XXXXXXX| 精品一区二区三区无码免费直播| 大又大又粗又硬又爽少妇毛片| 一道本在线视频不卡| 无码专区一VA亚洲V天堂| 欧美成人一区二区三区不卡| 好男人WWW在线影院官网| 成人A毛片免费全部播放| 一二三四免费中文在线| 无套内谢孕妇毛片免费看| 欧美色欧美亚洲另类二区| 精品粉嫩BBWBBZBBW| 丰满多毛的大隂户BEST| 中文字幕AV无码一区二区三区电| 亚洲AV高清在线一区二区三区| 人妻中文乱码在线网站| 久久久亚洲欧洲日产国码农村| 国产精品无码久久久久| ZOOM与动物ZOOM| 夜夜天天噜狠狠爱2019| 小SAO货都湿掉奶头好硬男女| 琪琪777午夜理论片在线观看播 | 囯产精品一区二区三区线| 23部禽女乱小说内| 亚洲精品无码激情AV| 特级西西人体444WWW高清大| 欧美人妻一区二区| 久久久久久人妻精品一区二区三区| 国产精品亚洲综合色区韩国| 波多野结衣在线观看AV| 中文字幕亚洲情99在线| 亚洲高清毛片一区二区| 四虎成人精品一区二区免费网站| 欧美人与性动交Α欧美精品| 久久久久久久久久久精品| 国产凸凹视频一区二区| 东京热人妻丝袜AV无码| 99RIAV国产精品视频| 要灬要灬再深点受不了好舒服| 校长办公室岔开腿呻吟| 色又黄又爽18禁免费网站| 女人呻吟声大了男人越有劲吗| 久久久久99精品成人片牛牛影视| 国产偷久久久精品专区| 高清国产AV一区二区三区| PORNO日本╳╳╳| 中文无码一区二区不卡ΑV| 亚洲欧美日韩一区二区三区在线| 午夜不卡AV免费| 少妇无码一区二区三区免费| 强行挺进美艳老师的后臀| 美女扒开腿让男人桶爽| 久久久久波多野结衣高潮| 黑人大群体交免费视频| 国产麻花豆剧传媒精品MV在线| 东北小伙二十厘米粗大硬 | 亚洲色爱图小说专区| 亚洲A∨国产AV综合AV网站| 熟女性饥渴一区二区三区| 日本H纯肉无遮掩3D动漫在线观| 年轻老师的滋味3在观整有限中字| 久久AV无码精品人妻系列果冻 | 成人综合色在线一区二区| JK制服白丝自慰出水| 18禁美女裸体爆乳无遮挡动图| 亚洲无人区码一码二码三码的特点| 亚洲AV乱码一区二区三区在线观看| 未满小14洗澡无码视频网站| 少妇被粗大的猛烈进出视频| 日本护士HD人XXXX| 青草久久久国产线免观蜜芽| 女人张开腿扒开内裤让男生桶 | 亚洲AV成人一区二区三区天堂| 天堂AV无码大芭蕉伊人AV不卡| 日本不良网站正能量入口大豆行情| 欧美成人精品第一区| 免费观看四虎精品国产地址| 久人人爽人人爽人人片AV| 久久久久国产精品嫩草影院| 精品推荐国产AV剧情| 娇妻被猛男老外玩三PAV| 狠狠色丁香婷婷久久综合不卡| 国产香蕉97碰碰久久人人| 国产免费久久久久久无码| 国产精品毛片A∨一区二区三区| 国产成年无码V片在线| 公与2个熄乱理在线播放| 嗯啊开小嫩苞好深啊H视频| 地师传人电影在线观看| 当着老公的面被别人欺负该怎么办| 苍井空电影在线观看| 办公室跪下拉开拉链吃应用的优点| MD豆传媒一二三区进站口在线看 | 精品人妻一区二区三区蜜桃| 精品久久久久久中文字幕人妻最新| 极品女教师波多野结衣电影衣| 娇妻初尝粗大滋味借种韩国电影| 黄A大片AV永久免费| 精品国产V无码大片在线看| 精品久久久久久亚洲综合网| 久久99国产精品久久99蜜桃| 九九视频在线观看视频6| 久久R热这里只有精品| 久久久久亚洲精品中文字幕| 浪荡人妻共32部黑人大凶器电影 | 国产三级在线观看播放| 国产亚洲成AV人片在线观看导航| 国精产品一区二区三区有限| 近親五十路六十被亲子中出 | 亚洲精品自偷自拍无码| 人妻少妇久久中文字幕一区二区| 欧美性猛交XXXX黑人| 人成AAAAA毛天堂片| 人人澡人人透人人爽| 肉蒲团之极乐宝鉴| 天天看AV片在线观看| 无码国产精品一区二区免费式芒果 | 丝袜灬啊灬快灬高潮了视频| 脱岳裙子从后面挺进去视频| 午夜理论片2019理论琪琪| 亚洲AV日韩AV高潮喷潮无码天| 亚洲国产AⅤ精品一区二区30P| 亚洲色丰满少妇高潮| 在线黄色网站观看汙| 6080YY无码中文字幕| 锕锕锕锕锕~好深啊APP网站|