在线免费观看成年人视频-在线免费观看国产-在线免费观看国产精品-在线免费观看黄网站-在线免费观看精品

產品分類

當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器

類型分類:
科普知識
數據分類:
線路板連接器

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

發布日期:2022-04-17 點擊率:70 品牌:西門子_Siemens

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

 

事先申明,我是調用的主從站庫,庫本身并不是我編寫的,我沒有那么大的能耐。

 

另外,上位機是用VB編寫,VB本身不是很熟,如果有什么錯誤,請大家海諒。

 

最后,這僅僅只是一個測試程序,如果各位想用到商業方面,還需要各位自己去完善。

 

說明: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 '如果高位字節最后一位為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 + he(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 + he(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 + he(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" & he(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" & he(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" & he(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

 

下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產品

更多
老妇擦她毛荫荫的玥户| 国产福利在线 | 传媒| 国产成人AⅤ片在线观看免费| 国产女人精品视频国产灰线| 久99久热爱视频精品免费37| 欧美成人精品视频一区二区三区| 日韩人妻无码一区二区三区99| 无码人妻精品一区二区三区9厂 | 女人毛毛扒开自慰| 熟睡入侵JEALOUSVUE| 亚洲色一色噜一噜噜噜| WWW一区二区三区在线 || 国产美女被遭强高潮网站免费| 久久精品伊人一区二区三区| 人妻丰满熟妇av无码区免费蜜臀| 吸咬奶头狂揉60分钟视频| 在厨房被C到高潮A毛片奶水| 厨房征服丰满熟妇在线观看| 精产国品一二三区别9977| 女同学浮乱系列合集| 无码人妻精品一区二区蜜桃不卡| 亚洲最大AV无码网址| 成人欧美一区二区三区性视频| 黑人大荫蒂老太大| 人C交Z〇○Z〇○ⅩⅩ| 亚洲AV老熟妇在线观看| 亚洲AⅤ天堂无码专区-百度| 无码人妻丰满熟妇啪啪网不卡| 人妻熟妇乱又伦精品HD| 饥渴人妻欲求不满在线| 国产FREEXXXX性播放麻豆| 久久久久女教师免费一区| 入禽太深视频免费视频| 亚洲一区二区三区高清AV| 粗大的内捧猛烈进出无码| 久久精品99国产精品蜜桃| 日本精品久久久久中文字幕| 亚洲熟妇成人精品一区| 东北老熟女疯狂作爱视频| 久久男人AV资源网站无码| 熟女高潮精品一区二区绯乐| 中文乱码人妻一区二区三区视频 | 一本大道香蕉在线精品| 国产成年无码V片在线| 毛片TV网站无套内射TV网站 | 国产熟妇人妻ⅩXXXX麻豆网址 | 久久久久亚洲AV无码专区首页网| 日日碰狠狠添天天爽无码| 一个添下面两个吃奶| 国产精品白丝久久AV网站| 欧美国产成人精品一区二区三区| 亚洲AV永久无码区成人网站| 菠萝菠萝蜜在线观看| 久久精品无码一区二区日韩AV | 国产精品多P对白交换绿帽| 男生把手放进我内裤揉摸好爽| 亚洲AV日韩AV无码A一区| 成午夜福利人试看120秒 | 日韩一区在线视频| 中文无码AV一区二区三区| 国精品无码一区二区三区在线| 日本十八禁免费看污网站| 在线麻豆精东9制片厂AV影现网 | 欧洲美熟女乱又伦AV曰曰| 亚洲熟妇人av一区二区三区| 国产精品国产免费无码专区蜜桃| 欧美日韩精品一区二区在线播放 | 无码aⅴ精品一区二区三区浪潮| AV国内精品久久久久影院| 久久久精品国产SM最大网站| 小妖精太湿太紧了拔不出| 被男狂揉吃奶胸60分钟视频| 麻豆精品一区二正一三区| 亚洲狠狠婷婷综合久久蜜芽| 国产精品高潮呻吟爱久久AV无码 | 乱码视频午夜在线观看| 亚洲AV无码成人网站WWW| 公天天吃我奶躁我| 人人妻人人爽人人人少妇| 50熟妇的长奶头满足了我| 精品性高朝久久久久久久| 午夜亚洲国产理论片中文飘花| 成人无号精品一区二区三区| 欧美精产国品一二三区别| 曰韩免费无码AV一区二区| 精品免费看国产一区二区| 无码人妻侵犯一区侵犯| 国产 麻豆 日韩 欧美 久久| 日本XX爽21护士| AV永久天堂一区二区三区| 麻花传媒免费网站在线观看 | 宝贝乖女你的奶真大水真多小说 | 成片人卡1卡2卡3手机免费看| 妺妺窝人体色444444大粗| 伊人久久大香线蕉精品| 精品国产成人亚洲午夜福利| 亚洲AV无码卡通动漫AV| 国产欧洲野花A级| 无码午夜人妻一区二区不卡视频| 丰满人妻中文字幕| 日韩精品一区二区亚洲蜜桃| 宝贝对着镜子CAO好不好| 欧亚精品一区三区免费| AV无码国产在线看免费APP| 男女后进式猛烈XX00动态图片| 伊人久久大香线蕉AV仙人| 久久婷婷大香萑太香蕉AV人| 亚洲欭美日韩颜射在线| 久久精品国产亚洲AV大全| 亚洲色精品三区二区一区| 精人妻无码一区二区三区蜜桃| 亚洲国产精品成人精品无码区| 国产最变态调教视频| 亚洲AV无码国产精品色午夜| 国产无人区码一码二码三MBA| 无人区码卡二卡乱码字幕| 国产蜜桃AV秘 区一区二区三区| 无码熟妇人妻AV在线影院| 国产美女裸体无遮挡免费视频高潮| 无码秘 蜜桃一区二区三区| 国产麻豆精品一区| 亚洲AV午夜福利精品一区二区| 黑森林精选AV导航| 亚洲色无码中文字幕手机在线 | 久久久一本精品99久久精品88 | 欧美人与动性XXXXBBBB| MD豆传媒APP网址入口免费| 人人妻人人藻人人爽欧美一区| 差差差软件大全APP推荐免费| 日日摸夜夜添夜夜添无码国产| 乖我们换个姿态再来一遍吧的小说 | 精品亚洲国产成人AV在线时间短 | 久久青青草原精品国产| 中文字幕乱码人妻一区二区三区| 牛和人交VIDEOS欧美3D| 被公疯狂玩弄的漂亮人妻| 熟妇人妻不卡无码一区| 国产精品无码无卡无需播放器| 亚洲AV无码久久久久久精品| 久久国产中文娱乐网| 中文无码VR最新无码AV专区| 欧美日韩一区二区在线视频精品| 产成人亚洲精品无码青青草原| 少妇白浆高潮无码免费区| 国产日韩精品SUV| 亚洲日韩国产精品第一页一区| 老女人婬乱d一级毛片| 99热门精品一区二区三区无码| 日韩欧美一区二区三区免费观看| 国产成人久久777777| 亚洲国产精品久久一线不卡| 久久久久久久久久久综合日本| 97夜夜澡人人双人人人喊| 日韩视频中文字幕精品偷拍| 国产精品无码AV天天爽播放器| 亚洲女人被黑人巨大进入| 女被啪到高潮的GIF动态图无遮| 成人毛片无码一区二区三区| 污污内射久久一区二区欧美日韩| 禁止18点击进入在线观看尤物| 中文有无人妻VS无码人妻激烈 | 俄罗斯PONONDLX| 亚洲AV成人无码一二三| 乱老熟女成熟50ⅩXXX小| 成人午夜福利无码不卡视频| 亚洲AV蜜桃少妇秘 大胸| 两个奶被揉的又硬又翘是怎么回事| А√天堂中文在线| 西西里大但人文艺术~任汾| 久久丫精品国产亚洲AV| 成年免费A级毛片免费看丶| 亚洲AV无码天堂一区二区三区| 乱码一卡二卡新区永久入口| 成人亚洲A片Ⅴ一区二区小说| 亚洲AⅤ无码一级毛片孕交 | 撞击成熟美妇老师后臀| 色噜噜国产精品视频一区二区| 极品粉嫩小泬白浆20P| CHINA中国人CHINESE| 无码精品A∨在线观看| 老师黑色双开真丝旗袍| 高潮久久久久久久久不卡 | 久久精品人人爽人人爽| 被青梅竹马的学弟给锁定了林擎霄 | ATLANTICOCEAN巨大| 五月丁香六月狠狠爱综合| 乱肉怀孕又粗又大| 国产JJIZZ女人多水| 夜夜爽8888免费视频| 肉感妇BBWBBWBBWBBW| 久久精品影视免费观看| 成人午夜福利视频后入| 亚洲一线二线三线品牌精华液| 日产无人区一线二线三线新版| 精品国精品国产自在久国产应用| YY111111少妇影院| 亚洲日产中文字幕无码| 日韩欧美群交P片內射中文| 久久精品无码一区二区三区| 父母儿女一家换着玩的文案|