modbus通讯协议软件包

合集下载

Modbus 通讯协议编程(VB源代码)

Modbus 通讯协议编程(VB源代码)

最近,本人为了实现电脑与Delta V FD-M变频器通讯,特意用VB6.0编了一个Modbus协议通讯软件。

这只是一个测试版,但Modbus的ASCII协议和RTU协议都已经实现。

现在将源程序上传,希望可以帮助到有需要的朋友,谢谢!另外,假如你觉得有更好的想法,欢迎指教。

如果对本程序有任何意见和建议,也可以一起讨论,共同进步。

大家多多支持俺啊。

附:VB6源程序Option ExplicitPrivate Text1text As StringPrivate RTUCRC As String'串口选择Private Sub Combo1_Click()mPort = Combo1.ListIndex + 1End Sub'数据位改变< span style="color: #008000;">Private Sub Combo2_Click()Call settingEnd Sub'波特率改变< span style="color: #008000;">Private Sub Combo3_Click()Call settingEnd Sub'奇偶校验改变< span style="color: #008000;">Private Sub Combo4_Click()Call settingEnd Sub'停止位改变< span style="color: #008000;">Private Sub Combo5_Click()Call settingPrivate Sub setting()MSComm1.Settings = CStr(Combo3.Text) & ","& CStr(Combo4.Text) & ","& CStr(C ombo2.Text) _& ","& CStr(Combo5.Text)End Sub'打开关闭串口< span style="color: #008000;">Private Sub Command1_Click()On Error Resume NextIf MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueElseMSComm1.PortOpen = FalseEnd IfIf MSComm1.PortOpen Then'打开关闭按钮显示文字及combo1使能Command1.Caption = "关闭串口"Combo1.Enabled = FalseElseCommand1.Caption = "打开串口"Combo1.Enabled = TrueEnd IfIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd Sub'10转16进制< span style="color: #008000;">Private Sub Command2_Click(Index As Integer)On Error Resume NextText4.Text = Hex(Text3.Text)If Err Then''则显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd If'16转10进制< span style="color: #008000;">Private Sub Command3_Click()Dim a As Longa = Val("&H"& CStr(Text4.Text))Text3.Text = aEnd Sub'手动串口发送< span style="color: #008000;">Private Sub Command4_Click()If MSComm1.PortOpen = False ThenMsgBox"请先打开串口< span style="color: #800000;">", , "错误信息" Exit SubEnd IfCall sentsubEnd Sub'清除接收窗< span style="color: #008000;">Private Sub Command5_Click()Text2.Text = ""End SubPrivate Sub Command6_Click()Unload MeEnd SubPrivate Sub Command7_Click()On Error Resume NextDim STP As StringSTP = CStr(Chr(2)) & "010001"& CStr(Chr(3)) & "25"MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = STPMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd SubPrivate Sub Command8_Click()On Error Resume NextDim FWD As StringFWD = CStr(Chr(2)) & "010101"& CStr(Chr(3)) & "26" MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = FWDMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd SubPrivate Sub Command9_Click()On Error Resume NextDim REV As StringREV = CStr(Chr(2)) & "010201"& CStr(Chr(3)) & "27" MSComm1.Settings = "9600,N,7,2"MSComm1.PortOpen = TrueMSComm1.Output = REVMSComm1.PortOpen = FalseIf Err Then'打开串口失败,则显示出错信息MsgBox Error$, 48, "错误信息"Exit SubEnd IfEnd Sub'窗口加载Private Sub Form_Load()Dim d%For d = 1To16Combo1.AddItem ("COM"& CStr(d))NextCombo1.ListIndex = 0Combo2.AddItem "6"Combo2.AddItem "7"Combo2.AddItem "8"Combo2.ListIndex = 2Combo3.AddItem "110" Combo3.AddItem "330" Combo3.AddItem "1200" Combo3.AddItem "2400" Combo3.AddItem "4800" Combo3.AddItem "9600" Combo3.AddItem "19200" Combo3.AddItem "38400" Combo3.AddItem "56000" Combo3.AddItem "57600" Combo3.AddItem "115200" Combo3.ListIndex = 5Combo4.AddItem "n" Combo4.AddItem "o" Combo4.AddItem "e" Combo4.ListIndex = 0Combo5.AddItem "1" Combo5.AddItem "2" Combo5.ListIndex = 0For d = 0To254Combo6.AddItem dNextCombo6.ListIndex = 1Text1.Text = "010*********" Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = "1000"Text6.Text = "06"Text7.Text = "0"Text8.Text = "1"Option1.value = TrueOption3.value = TrueOption7.value = TrueOption9.value = TrueIf MSComm1.PortOpen = False ThenCommand1.Caption = "打开串口"ElseCommand1.Caption = "关闭串口"End IfEnd Sub'串口接收程序< span style="color: #008000;">Private Sub MSComm1_OnComm()Dim Hexchr As String, hexstring As String, i As Integer, j As Integer, hexdisp As Str ingIf Option8.value Thenhexstring = MSComm1.Input '十六进制显示< span style="color: #008000;">i = Len(hexstring)For j = 1To iHexchr = Mid(hexstring, j, 1)If Hex(Asc(Hexchr)) < 16ThenText2.Text = Text2.Text & "0"& Hex(Asc(Hexchr)) & " "ElseText2.Text = Text2.Text & Hex(Asc(Hexchr)) & " "End IfNext jText2.Text = Text2.Text & CStr(Chr(13)) & CStr(Chr(10))ElseText2.Text = Text2.Text & MSComm1.Input & CStr(Chr(13)) & CStr(Chr(10)) 'ASCII 码显示< span style="color: #008000;">End IfEnd Sub'手动发送选择< span style="color: #008000;">Private Sub Option1_Click()If Option1.value = True ThenTimer1.Enabled = FalseCommand4.Enabled = TrueElseTimer1.Enabled = TrueCommand4.Enabled = FalseEnd IfEnd Sub'Delta ASCII发送协议Private Sub Option10_Click()Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseOption11.value = TrueCombo2.ListIndex = 1Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = TrueEnd Sub'自动发送选择< span style="color: #008000;"> Private Sub Option2_Click()If Option2.value = True ThenTimer1.Enabled = TrueCommand4.Enabled = FalseElseTimer1.Enabled = FalseCommand4.Enabled = TrueEnd IfEnd SubPrivate Sub Option3_Click() 'Non选项< span style="color: #008000;"> Combo6.Enabled = FalseText6.Enabled = FalseText7.Enabled = FalseText8.Enabled = FalseLabel10.Enabled = FalseLabel11.Enabled = FalseLabel12.Enabled = FalseLabel13.Enabled = FalseOption6.Enabled = TrueOption7.Enabled = TrueCombo2.ListIndex = 2Combo5.ListIndex = 0Text1.Enabled = TrueLabel14.Enabled = TrueFrame7.Visible = FalseEnd SubPrivate Sub Option4_Click() 'ASCII选项< span style="color: #008000;"> Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseCombo2.ListIndex = 1Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = FalseEnd SubPrivate Sub Option5_Click() 'RTU选项< span style="color: #008000;"> Combo6.Enabled = TrueText6.Enabled = TrueText7.Enabled = TrueText8.Enabled = TrueLabel10.Enabled = TrueLabel11.Enabled = TrueLabel12.Enabled = TrueLabel13.Enabled = TrueOption6.Enabled = FalseOption7.Enabled = FalseCombo2.ListIndex = 2Combo5.ListIndex = 1Text1.Enabled = FalseLabel14.Enabled = FalseFrame7.Visible = FalseEnd Sub'发送时间间隔调整输入< span style="color: #008000;">Private Sub Text5_Change()Dim number As StringDim num As IntegerDim numcyc As Integernum = Len(Text5.Text)For numcyc = 1To numnumber = Mid(Text5.Text, numcyc, 1)Select Case InStr("0123456789", number)Case0MsgBox"输入时间间隔错误,请重新输入", , "错误信息"Exit SubEnd SelectNextTimer1.Interval = Text5.TextEnd Sub'自动发送定时器< span style="color: #008000;">Private Sub Timer1_Timer()If MSComm1.PortOpen ThenCall sentsubEnd IfEnd Sub'状态刷新定时器< span style="color: #008000;">Private Sub Timer2_Timer()StatusBar1.Panels(1).Text = "串口选择:< span style="color: #800000;">" & CStr(Comb o1.Text)StatusBar1.Panels(2).Text = "串口设置:< span style="color: #800000;">" & CStr(MSC omm1.Settings)StatusBar1.Panels(3).Text = "串口状态:< span style="color: #800000;">" & CStr(MSC omm1.PortOpen)End Sub'串口发送子程序Private Sub sentsub()Dim optioncase%If Option3.value Then optioncase = 1If Option4.value Then optioncase = 2If Option5.value Then optioncase = 3If Option10.value Then optioncase = 4Select Case optioncaseCase1If Option6.value ThenText1text = Text1.TextCall HexsentElseText1text = Text1.TextCall ASCIIsentEnd IfCase2Call incorporate '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call ASCIIcheckCall ASCIIsentCase3Call incorporate '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call RTUcheckCall HexsentCase4Call incorporate1 '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Call deltaASCIICall ASCIIsentEnd SelectEnd Sub'十六进制发送< span style="color: #008000;">Private Sub Hexsent()Dim hexchrlen%, Hexchr As String, hexcyc%, hexmid As Byte, hexmiddle As String Dim hexchrgroup() As Byte, i As Integerhexchrlen = Len(Text1text)For hexcyc = 1To hexchrlen '检查Text1文本框内数值是否合适Hexchr = Mid(Text1text, hexcyc, 1)If InStr("0123456789ABCDEFabcdef", Hexchr) = 0ThenMsgBox"无效的数值,请重新输入< span style="color: #800000;">", , "错误信息" Exit SubEnd IfNextReDim hexchrgroup(1To hexchrlen \ 2) As ByteFor hexcyc = 1To hexchrlen Step2'将文本框内数值分成两个、两个i = i + 1Hexchr = Mid(Text1text, hexcyc, 2)hexmid = Val("&H"& CStr(Hexchr))hexchrgroup(i) = hexmid'MSComm1.Output = CStr(hexmid)NextMSComm1.Output = hexchrgroupEnd Sub'ASC码发送< span style="color: #008000;">Private Sub ASCIIsent()MSComm1.Output = Text1textEnd Sub'ASC校验,此段程序计算出LRC校验值,并加上字头和字尾Private Sub ASCIIcheck()Dim a%, b%, chrnum%, Lrcbyte As StringDim checksum%, char%, AscLrc%, Lrc%chrnum = Len(Text1text)For a = 1To chrnum Step2char= Val("&H"& CStr(Mid(Text1text, a, 2))) '两个两个的取字符< span style="color: #008000;">checksum = checksum + char'全部加起来< span style="color: #008000;">NextAscLrc = checksum Mod&H100 '取255的余数< span style="color: #008000;">Lrc = (&HFF - AscLrc) + 1'取二次补If Lrc < 16Then'此段程序是判断Hex(lrc)是否是一位数,Lrcbyte = "0"+ CStr(Hex(Lrc)) '如果是的话,前面加0;否则不加零ElseLrcbyte = CStr(Hex(Lrc))End IfText1text = CStr(Chr(58)) & CStr(Text1text) & Lrcbyte & CStr(Chr(13)) & CStr(Chr(1 0))End Sub'DeltaASCII校验,此段程序计算出LRC校验值,并加上字头和字尾Private Sub deltaASCII()Dim a%, b%, chrnum%, Lrcbyte As StringDim checksum%, char%, Lrc%chrnum = Len(Text1text)For a = 1To chrnumchar= Asc(Mid(Text1text, a, 1)) '两个两个的取字符< span style="color: #008000;"> checksum = checksum + char'全部加起来< span style="color: #008000;">NextLrc = (checksum + &H3) Mod&H100 '取255的余数< span style="color: #008000;"> If Lrc < 16Then'此段程序是判断Hex(lrc)是否是一位数,Lrcbyte = "0"+ CStr(Hex(Lrc)) '如果是的话,前面加0;否则不加零ElseLrcbyte = CStr(Hex(Lrc))End IfText1text = CStr(Chr(2)) & CStr(Text1text) & CStr(Chr(3)) & LrcbyteEnd Sub'RTU校验< span style="color: #008000;">Private Sub RTUcheck()Dim CRC() As ByteDim d(5) As ByteDim string1 As StringDim j As Integer, chrlength As Integer, temp As Stringstring1 = Text1textchrlength = Len(string1)For j = 0To chrlength / 2- 1temp = Mid(string1, j * 2+ 1, 2)d(j) = Val("&H"& temp)NextRTUCRC = CRC16(d) '调用CRC16计算函数, CRC(0)为高位, CRC(1)为低位Text1text = Text1text & RTUCRCEnd SubPrivate Sub incorporate() '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Dim wholechar As String, wc%, wcyc%, wchar As StringDim SID As String, Cmd As String, InfoAdd As String, data As StringDim SIDnum%, Cmdnum%, InfoAddNum%, Datanum%On Error Resume Nextwholechar = CStr(Combo6.Text) & CStr(Text6.Text) & CStr(Text7.Text) & CStr(Text8.T ext)wc = Len(wholechar)For wcyc = 1To wcwchar = Mid(wholechar, wcyc, 1)If InStr("0123456789", wchar) = 0ThenMsgBox"输入错误,请重新输入< span style="color: #800000;">", , "错误提示"Exit SubEnd IfNextSIDnum = Len(CStr(Hex(Combo6.Text)))Select Case SIDnumExit SubCase1SID = "0"& CStr(Hex(Combo6.Text)) Case2SID = CStr(Hex(Combo6.Text))End SelectCmdnum = Len(CStr(Hex(Text6.Text))) Select Case CmdnumCase0Exit SubCase1Cmd = "0"& CStr(Hex(Text6.Text)) Case1Cmd = CStr(Hex(Text6.Text))End SelectInfoAddNum = Len(CStr(Hex(Text7.Text))) Select Case InfoAddNumCase0Exit SubCase1InfoAdd = "000"& CStr(Hex(Text7.Text)) Case2InfoAdd = "00"& CStr(Hex(Text7.Text)) Case3InfoAdd = "0"& CStr(Hex(Text7.Text)) Case4InfoAdd = CStr(Hex(Text7.Text))End SelectDatanum = Len(CStr(Hex(Text8.Text))) Select Case DatanumCase0Exit Subdata = "000"& CStr(Hex(Text8.Text))Case2data = "00"& CStr(Hex(Text8.Text))Case3data = "0"& CStr(Hex(Text8.Text))Case4data = CStr(Hex(Text8.Text))End SelectIf Err Then'显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd IfText1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd) & CStr(data)End SubPrivate Sub incorporate1() '将输入的十进制从机地址、命令、资料地址和资料内容合并成字符串Dim wholechar As String, wc%, wcyc%, wchar As StringDim SID As String, Cmd As String, InfoAdd As String, data As StringDim SIDnum%, Cmdnum%, InfoAddNum%, Datanum%On Error Resume Nextwholechar = CStr(Combo6.Text) & CStr(Text7.Text) & CStr(Text8.Text)wc = Len(wholechar)For wcyc = 1To wcwchar = Mid(wholechar, wcyc, 1)If InStr("0123456789", wchar) = 0ThenMsgBox"输入错误,请重新输入< span style="color: #800000;">", , "错误提示"Exit SubEnd IfNextSIDnum = Len(CStr(Hex(Combo6.Text)))Select Case SIDnumCase0Case1SID = "0"& CStr(Hex(Combo6.Text)) Case2SID = CStr(Hex(Combo6.Text))End Select'Cmdnum = Len(CStr(Hex(Text6.Text)))'Select Case Cmdnum'Case 0' Exit Sub'Case 1' Cmd = "0" & CStr(Hex(Text6.Text))'Case 1' Cmd = CStr(Hex(Text6.Text))'End SelectInfoAddNum = Len(CStr(Hex(Text7.Text))) Select Case InfoAddNumCase0Exit SubCase1InfoAdd = "0"& CStr(Hex(Text7.Text)) Case2InfoAdd = CStr(Hex(Text7.Text))End SelectDatanum = Len(CStr(Hex(Text8.Text))) Select Case DatanumCase0Exit SubCase1data = "000"& CStr(Hex(Text8.Text)) Case2data = "00"& CStr(Hex(Text8.Text)) Case3data = "0"& CStr(Hex(Text8.Text))Case4data = CStr(Hex(Text8.Text))End SelectIf Err Then'显示出错信息< span style="color: #008000;">MsgBox Error$, 48, "错误信息"Exit SubEnd IfIf Option11.value ThenCmd = "08"Text1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd)ElseCmd = "07"Text1text = CStr(SID) & CStr(Cmd) & CStr(InfoAdd) & CStr(data)End IfEnd SubPrivate Function CRC16(data() As Byte) As StringDim CRC16Lo As Byte, CRC16Hi As Byte'CRC寄存器< span style="color: #00800 0;">Dim CL As Byte, CH As Byte'多项式码&HA001Dim CRCLo As String, CRCHi As StringDim SaveHi As Byte, SaveLo As ByteDim i As IntegerDim Flag As IntegerCRC16Lo = &HFFCRC16Hi = &HFFCL = &H1CH = &HA0For i = 0To UBound(data)CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或For Flag = 0To7SaveHi = CRC16HiSaveLo = CRC16LoCRC16Hi = CRC16Hi \ 2'高位右移一位< span style="color: #008000;">CRC16Lo = CRC16Lo \ 2'低位右移一位< span style="color: #008000;">If((SaveHi And&H1) = &H1) Then'如果高位字节最后一位为1< span style="color: #008000;">CRC16Lo = CRC16Lo Or&H80 '则低位字节右移后前面补1< span style="color: #008 000;">End If'否则自动补0< span style="color: #008000;">If((SaveLo And&H1) = &H1) Then'如果LSB为1,则与多项式码进行异或CRC16Hi = CRC16Hi Xor CHCRC16Lo = CRC16Lo Xor CLEnd IfNext FlagNext iIf Len(Hex(CRC16Hi)) = 1ThenCRCHi = "0"+ Hex(CRC16Hi)ElseCRCHi = Hex(CRC16Hi)End IfIf Len(Hex(CRC16Lo)) = 1ThenCRCLo = "0"+ Hex(CRC16Lo)ElseCRCLo = Hex(CRC16Lo)End IfCRC16 = CRCLo + CRCHiEnd Function。

modbus通讯协议粘包

modbus通讯协议粘包

modbus通讯协议粘包
Modbus通讯协议粘包是指在Modbus通信过程中,由于数据
包的长度和发送间隔等因素,导致两个或多个数据包粘在一起,无法正确解析和处理的现象。

在Modbus通信中,通常使用串行通信方式,每个数据包包含
一个起始符、地址、功能码、数据、校验等字段。

当数据包的长度较短或发送间隔较短时,由于通信的延迟等原因,接收方可能会把多个数据包当作一个整体接收,从而造成粘包现象。

粘包问题主要有两种情况:
1. 多个数据包粘在一起:在接收方无法正确解析多个数据包的边界,导致将多个数据包当作一个整体进行处理。

2. 数据包部分粘在一起:在接收方只接收了部分数据包的内容,导致无法正确解析和处理数据。

为了解决Modbus通讯协议粘包问题,可以采取以下一些方法:1. 增加帧结束符:可以在每个数据包的末尾增加一个特定的帧结束符,接收方根据该帧结束符来判断数据包的边界。

2. 增加数据包长度字段:可以在每个数据包中增加一个长度字段,接收方根据该长度字段来判断每个数据包的边界。

3. 规定固定长度的数据包:可以通过规定每个数据包的固定长度,接收方根据固定长度来判断数据包的边界。

4. 增加时间间隔:可以在每个数据包的发送之间增加适当的时间间隔,以避免数据包粘连在一起。

根据具体情况,可以选择其中一种或多种方法来解决Modbus 通讯协议粘包问题。

Modbus RTU通讯协议

Modbus RTU通讯协议

要实现Modbus RTU通信,一、需要STEP 7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装STEP 7-Micro/WIN32 V3.2 Instruction Library(指令库)。

Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。

Modbus RTU从站指令库只支持CPU上的通信0口(Port0)基本步骤:1. 检查Micro/WIN的软件版本,应当是STEP 7-Micro/WIN V3.2以上版本。

2. 检查Micro/WIN的指令树中是否存在Modbus RTU从站指令库(图1),库中应当包括MBUS_INIT和MBUS_SLAVE两个子程序。

如果没有,须安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包;1. 西门子编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并指定相应参数。

关于参数的详细说明,可在子程序的局部变量表中找到;调用Modbus RTU通信指令库图中参数意义如下:a. 模式选择:启动/停止Modbus,1=启动;0=停止b. 从站地址:Modbus从站地址,取值1~247c. 波特率:可选1200,2400,4800,9600,19200,38400,57600,115200d. 奇偶校验:0=无校验;1=奇校验;2=偶校验e. 延时:附加字符间延时,缺省值为0f. 最大I/Q位:参与通信的最大I/O点数,S7-200的I/O映像区为128/128,缺省值为128g. 最大AI字数:参与通信的最大AI通道数,可为16或32h. 最大保持寄存器区:参与通信的V存储区字(VW)i. 保持寄存器区起始地址:以&VBx指定(间接寻址方式)j. 初始化完成标志:成功初始化后置1k. 初始化错误代码l. Modbus执行:通信中时置1,无Modbus 通信活动时为0。

宇电AIBUS及MODBUS通讯协议说明V80-补充版

宇电AIBUS及MODBUS通讯协议说明V80-补充版

宇电AIBUS及MODBUS通讯协议说明(V8.0)AIBUS是厦门宇电自动化科技有限公司为AI系列显示控制仪表开发的通讯协议,能用简单的指令实现全面的功能,其特点是写参数的同时亦可完成读功能,因此写参数时不破坏读的循环周期时间,加上指令长度较少,因此具有比MODBUS更快的速率(尤其是有写入指令时,MODBUS的写入指令不能同时完成读下位机数据的功能,会破坏读指令的周期,延长了读的循环周期),AIBUS协议具有组建大规模过程控制系统能力。

AIBUS采用了16位的求和校正码,下位机运算快速且通讯可靠,支持9600和19200等不同波特率,在19200波特率下,上位机访问一台AI-7/8系列高性能仪表的平均时间仅20mS,访问AI-5系列仪表的平均时间为40mS。

仪表允许在一个RS485通讯接口上连接多达80台仪表(为保证通讯可靠,仪表数量大于60台时需要加一个RS485中继器)。

AI系列仪表可以用PC、触摸屏及PLC作为上位机,其软件资源丰富,发展速度极快。

基与PC的上位机软件广泛采用WINDOWS作为操作环境,不仅操作直观方便,而且功能强大。

最新的工业平板触摸屏式PC的应用,更为工业自动化带来新的界面。

这使得采用仪表+上位机结构的测控系统价格大大低于传统DCS系统,而性能及可靠性也具备比传统DCS系统更优越的潜力。

宇电AI-5系列仪表写入寿命可达100万次,而AI-7/8系列仪表则允许连续写参数,如写给定值或输出值,写入寿命高达10亿次,可利用上位机将仪表组成复杂调节系统。

一、接口规格AI系列仪表使用异步串行通讯接口,接口电平符合RS232C或RS485标准中的规定。

数据格式为1个起始位,8位数据,无校验位,1个或2个停止位。

通讯传输数据的波特率可调为4800~19200 bit/S,通常用9600 bit/S,单一通讯口所连接仪表数量大于40台或需要更快刷新率时,推荐用19200bit/S,当通讯距离很长或通讯不可靠常中断时,可选4800bit/S。

Modbus协议调试软件工具MThings仿真演示教程

Modbus协议调试软件工具MThings仿真演示教程

Modbus协议调试软件工具MThings仿真演示教程市面上有不少的Modbus协议调试工具,今天介绍一款MThings 高度集成的Modbus协议调试工具,该工具可以仿真从机也可以仿真主机,与市面上常见的主机和从机分离软件不同,支持免安装运行,同时也支持安装运行,支持多种Modbus协议(Modbus RTU、Modbus ASCII、Modbus TCP等),支持配置文件导入导出,内置多种数据转换功能,支持丢包率、收发延迟等数据统计,支持多台仿真设备同时配置运行。

前文我们介绍了modbus协议调试工具软件功能,本文接着将利用该调试软件Modbus RTU、Modbus ASCII、Modbus TCP协议的仿真演示教程。

具体教程如下:1、Modbus TCP协议没有连接的可以“新增网络链接”(1),也可以通过“配置”(2)修改现有的链接,新创建的链接也要通过配置修改网络参数,这里主机配置为服务器模式(3),选择Modbus TCP协议(4),配置服务器端口(5),配置客户端IP(6,必须配置,非此IP连接服务器会拒绝连接),配置模拟设备属性为“Modbus主机”;预配置主机方法类似,主机使用了服务器模式从机就必须采用客户端模式,配置目标IP和目标端口为主机所开的服务器IP与端口,置模拟设备属性为“Modbus从机”,一般情况都是从机作为服务器,方便接入多个HMI和SCADA软件控制采集PLC,这里没有采用这种模式,但软件支持对应调整模式即可;从机添加控制点位,主机只能读取已仿真的寄存器点位否则会报错,之前已经说明了寄存器添加这里不再重复,通讯效果如下图:2、Modbus RTU协议演示Modbus RTU设备属性配置如下:演示如下:3、Modbus ASCII协议演示Modbus ASCII设备属性配置如下:演示如下:。

M系列RS485采集模块与组态王V6.55软件进行Modbus RTU通讯

M系列RS485采集模块与组态王V6.55软件进行Modbus RTU通讯

M系列RS485采集模块与组态王V6.55软件通讯
M系列RS485采集模块是基于RS485网络的数字量和模拟量采集模块,支持工业标准的Modbus RTU 协议,包括:M-IB16 (16路数字量输入模块)、M-OB16(16路数字量输出模块)、M-IF16C(16路模拟量输入模块)、M-OF8C(8路模拟量输出),可以与组态王、力控以及支持Modbus RTU协议的PLC等系统联合使用,下面以M系列RS485采集模块与组态王进行通讯为例。

1、启动组态王工程管理器,输入工程名称、路径、描述等。

2、设置组态王串口参数:波特率、数据位、停止位、奇偶校验、通讯超时、通讯方式。

3、在组态王中新建设备驱动,选择设备驱动\PLC\莫迪康\ModbusRTU\COM,设置设备名称、串口号、设备地址、通讯参数。

4、在数据词典中定义变量,输入变量名、变量类型、连接设备、寄存器、数据类型、读写属性、采样频率。

M-IB16的16路数字量输入I0~I15分别对应到寄存器100001~100016,通过02号功能码进行读取:
M-OB16的16路数字量输出Q0~Q15分别对应寄存器000001~000016,通过05号功能码进行写入操作:
5、在组态王中进行画面设计
6、运行画面,可以看到M-IB16的I0~I14为1,I15为0,通过上部的开关按钮控制M-OB16的输出,Q0~Q5为1,Q6~Q15为0。

Growatt PV Inverter Modbus RS485 RTU Protocol V3.11--中文客户版

Growatt PV Inverter Modbus RS485 RTU Protocol V3.11--中文客户版

格瑞特光伏逆变器Modbus RS485 协议V3.112015-04-01格瑞特新能源有限公司V2.01 2011-11-2:1、修正了寄存器Map表2、增加了最大数据长度定义3、改变了RS232的相等模式V2.02 2011-11-4:1、增加了烧录命令V2.03 2012-03-011、融合了读和写的寄存器表2、修改了4.1和4.2的寄存器表V2.04 2012-03-051、增加了读写命令系统时间V2.05 2012-03-061、增加了电网V/F保护时间的读写命令V2.06 2012-03-211、增加了自动测试命令2、移动厂商信息从13到60V2.07 2012-04-191、增加了holding寄存器:13~15, 40~45, 68~71, 73, 74;V2.08 2012-04-281、替换了所有寄存器地址,开始地址为0x0000V2.09 2012-05-091、增加4-45PF寄存器,为了读和校正PF2、增加了3-90~99寄存器,为了设置PF曲线(此功能为内部预留)V2.10 2012-05-101、为了记录50组错误信息,增加了4-180~429寄存器V2.11 2012-05-291、为了频率-负载斜率和PF检测校正值,增加了3-1,100~107寄存器2、改变了输出寄存器单位,从W变为VAV2.12 2012-06-141、改变了3-3寄存器的定义2、改变了3-90~99寄存器器,改变PF曲线定义;3、增加了3-155~158电网调度命令密码寄存器V2.13 2012-06-271、增加了3-99寄存器,增加了3-108~112V2.14 2012-07-171、增加了3-74逆变器选择命令,和3-98的CEI频率测试命令2、增加了3-80~89,4-80~89预留寄存器V2.15 V2.16 2012-07-311、增加了4-48~63 PV电量,无功功率和电量寄存器V3.00 2012-08-151、增加了3-113~115寄存器,为了CEI021模式设置2、增加4-48~63寄存器,PV电量和无功电量3、增加了4-450~575寄存器,为了历史电量的记录V3.01 2012-11-22:1、增加了3-75 232转485使能2、增加3-116~1193、增加了4-47降载模式4、增加其他寄存器V3.02 2013-01-26:1、在holding寄存器表中,增加而来功率控制寄存器;2、在input表中,增加了预留寄存器3、改变了24小时发电量涵义4、注意最小的CMD周期V3.03 2013-01-30:1、改变了485指令周期V3.06 2015-03-09:1, 增加Holding192寄存器取使/失能N到地检测2, 增加Holding193寄存器使能设置V3.07 2015-05-22:1, 增加Holding165寄存器作为Q(V)激活延时时间2, 增加Holding寄存器166作为过频延时时间V3.10 2015-12-17:1, 增加组串监控寄存器Input70~89,包括电流电压故障等信息。

TCU(Modbus通讯协议)

TCU(Modbus通讯协议)

第一章总论1.1 概述Modbus总线用于将TCU系列控制器连接到具备Modbus总线通道的远程监控系统或其它终端设备上。

这时,TCU列控制器总是作为从机。

Modbus总线还用于将其它具备Modbus总线通道的终端设备连接到TCU系列控制器中,此时,TCU系列总是作为主机。

TCU系列提供了2个独立的通讯接口,COM1和COM2口,但是只提供了一个RS-232接口,其它的作为RS485接口。

★ RS485二线网络接口。

★ RS232 三线网络接口。

(RXD、TXD、GND)具体连接方式参见第三章物理连接。

1.2 有效数据访问⑴上行数据遥测信息遥信信息⑵下行数据遥控信息设定参数1.3 访问模式RS232接口允许双向操作。

如果采用RS485接口仅支持单向操作。

采用该协议时建议用户使用RS232接口,否则会出现数据接收错误。

循环时间:下行循环指令最短时间必须大于10S。

1第二章 Modbus总线协议功能概述2.1 协议操作Modbus总线用于在一个主机与一个或多个从机之间进行数据交换,执行请求,应答对话,请求总是由主机发起的。

从机由地址编码进行识别。

Modbus以RTU模式存在。

数据以16Bit字或1Bit格式进行交换。

每个信息都有一个16位地址(字或位)。

2.2 协议功能TCU系列控制器使用的是RTU Modbus总线协议。

以下TCU系列的可执行功能:2.2.1 基本功能表一:基本功能注:功能码0x55和0x66不支持基本型的TCU产品,它仅仅是预留的扩展功能。

2.2.2 异常功能从机在接收到命令且校验正确时,会返回表二的错误功能。

2.2.3 以下情况从机不响应发生通讯故障时,从机无法接收到命令,从机不响应,由主机以超时来判断错误。

从机收到命令,但检测到错误(奇偶校验错误、CRC校验错误)时,从设备不响应,也由主机以超时来判断错误。

表二:错误代码22.2.4 TCU系列不支持多主机操作。

2.2.5 安全功能功能码:66H不支持基本型的TCU产品,它仅仅是预留的扩展功能。

Modbus测试工具ModbusPoll与ModbusSlave使用方法

Modbus测试工具ModbusPoll与ModbusSlave使用方法

Modbus测试⼯具ModbusPoll与ModbusSlave使⽤⽅法感谢原创,由于CSDN经常调整,故再编辑收藏,并修改了部分BUG。

⼀、介绍Modbus Poll :Modbus主机仿真器,⽤于测试和调试Modbus从设备。

该软件⽀持ModbusRTU、ASCII、TCP/IP。

⽤来帮助开发⼈员测试Modbus从设备,或者其它Modbus协议的测试和仿真。

它⽀持多⽂档接⼝,即,可以同时监视多个从设备/数据域。

每个窗⼝简单地设定从设备ID,功能,地址,⼤⼩和轮询间隔。

你可以从任意⼀个窗⼝读写寄存器和线圈。

如果你想改变⼀个单独的寄存器,简单地双击这个值即可。

或者你可以改变多个寄存器/线圈值。

提供数据的多种格式⽅式,⽐如浮点、双精度、长整型(可以字节序列交换)。

Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。

每个接⼝都提供了对EXCEL报表的OLE⾃动化⽀持。

主要⽤来模拟Modbus从站设备,接收主站的命令包,回送数据包。

帮助Modbus通讯设备开发⼈员进⾏Modbus通讯协议的模拟和测试,⽤于模拟、测试、调试Modbus通讯设备。

可以32个窗⼝中模拟多达32个Modbus⼦设备。

与Modbus Poll的⽤户界⾯相同,⽀持功能01, 02, 03, 04, 05, 06, 15, 16, 22和23,监视串⼝数据。

⼆、Modbus Poll使⽤1)、安装注册:安装完毕,在桌⾯能够看到ModbusPoll的快捷⽅式,双击该快捷⽅式,打开软件,打开后界⾯如下图所⽰。

单击Connection->Connect,弹出注册窗⼝;打开压缩包解压后的readme⽂件,复制ModbusPoll的序列号5A5742575C5D10,粘贴到注册窗⼝的注册栏,如下图所⽰,点击OK,注册完毕。

modbus poll 4.3.4程序主窗⼝介绍其中:Tx = 4表⽰向主站发送数据帧次数,图中为4次; Error = 0表⽰通讯错误次数,图中为0次; ID = 1表⽰模拟的Modbus⼦设备的设备地址,图中地址为1;F = 03表⽰所使⽤的Modbus功能码,图中为03功能码; SR = 1000ms表⽰扫描周期。

总线变送器modbus通讯协议V1.3

总线变送器modbus通讯协议V1.3

3
Modbus 总线变送器—通讯协议 V1.3
图 1 无报警状态
从机返回示例 2:(37 个字节) 01 03 20 41 C8 00 00 42 48 00 00 42 C8 00 00 3F 80 00 00 40 00 00 00 41 30 00
00 42 34 00 00 3F 80 00 00 CA 56 解析如图 2 所示:
分辨率 1 分辨率 0.1
1
Modbus 总线变送器—通讯协议 V1.3
0.010000 分辨率 0.01
单位:
0.000000 %vol
1.000000 ppm
2.000000 %LEL
3.000000 °C
气体类型:
0.000000 氧气
1.000000 一氧化碳
2.000000 硫化氢

3.000000 氨气
图 4 设置值
5. IEEE754 数据格式
Float Inverse 常见组态软件:【组态王】设置说明 例如要读取实时浓度值,寄存器 7012。 按下面的操作定义变量。寄存器选 4 开头,后面输入 7013。 注意后面是 7013,需要将表格中寄存器地址+1(7012+1)。
图 5 组态王 7
Modbus 总线变送器—通讯协议 V1.3
功能
表格 1
一级报警设定值(低报)
二级报警设定值(高报)
量程
精度
单位
气体类型
当前浓度值
报警状态
实时 AD 值
零点 AD 值
满量程 AD 值
设备地址
属性 R/W R/W R R R R R R R R/W R/W R/W
注:有些组态软件(例如组态王)需要将表格中的寄存器地址进行+1

基于S7-300 400 CPU PN口的ModbusTCP通讯

基于S7-300 400 CPU PN口的ModbusTCP通讯

主题:应用探讨——基于S7-300/400 CPU PN口的Modbus/TCP通讯Modbus/TCP 是运行在TCP/IP上的Modbus 报文传输协议,通过此协议,控制器相互之间通过网络(例如以太网)和其它设备之间可以通信,Modbus/TCP 协议已经成为一通用工业网络应用层的标准,在2004 年成为国家标准,因此得到了非常广泛的应用,对于西门子而言,同样有基于Modbus/TCP的通讯解决方案,包括PLC,HMI等,开设本话题主要召集大家讨论针对S7-300/400 CPU集成PN口的Modbus/TCP 通讯解决方案进行探讨,主要在以下几个方面进行交流:1 软件包中的安装和使用2 如何充分利用功能块库中的例子程序3 CPU的集成PN口如何建立TCP连接,与CP又有何不同4 不同的块库版本的区别5 PLC与多个设备进行通讯时如何优化程序,PLC能够与多少个设备进行通讯6 地址映射,通讯诊断7 如何利用Open Modbus/TCP Wizard来创建参数DB与此相关,在下载中心中推荐一篇入门文档,作为S7-300/400 CPU集成PN口的Modbus/TCP入门文档,希望能够给大家帮助A0401基于S7-300,400 CPU集成PN 接口Modbus TCP通讯快速入门(更新版本V2.4)另外西门子I&S集团也提供了基于S7-300/400 CPU集成PN口的Modbus/TCP软件包的Demo版下载,在Demo版本下通讯只能维持2小时,供大家测试之用,连接如下:/industrysolutions/global/en/IT4Industry/products/simatic_add_ons/s7_ open_modbus_tcp/Pages/default_tab.aspx主题:回复:应用探讨——基于S7-300/400 CPU PN口的Modbus/TCP通讯S7控制器通过CPU集成PN口和第三方设备间建立MODBUS/TCP通讯需要软件包MODBUS TCP PN“2XV9450”-1MB02(V2.4),单授权(仅对一个CPU有效),支持功能码1、2、3、4、5、6、15、16,对300和400集成口CPU都适用。

MODBUS通讯测试软件设置说明

MODBUS通讯测试软件设置说明

MODBUS通讯组态说明仪表采用标准modbus通讯协议(读写部分数据)格式为: 8位数据位,无奇偶校验,1位停止位。

在使用组态软件时,须选用的设备为modicon(莫迪康)的PLC,Modbus-RTU地址型。

数据为整型16位。

16路数据从寄存器00开始到16。

7使用组态王寄存器从4001开始到4016。

(对于有些组态软件,可能从3001开始) 参数代号含义4x0001 第1路测量值4x0002 第2路测量值4x0003 第3路测量值。

4x0016 第16路测量值例:读地址为1的仪表的第1路测量值(PV1=1000值)发送数据为 01 03 00 00 00 01 84 0A(其中01 是仪表地址,03是功能号,00 00是寄存器起始地址,00 01 表示读一个数,84 0A是校验码。

如果要读第1、2路测量值两个数据,则可以发送,01 03 00 00 00 02 C4 0B返回数据为 01 03 02 03 E8 B8 FA (其中03 E8—1000)。

以下为通讯测试软件设置说明:对于测试软件中的参数设置,见上图,串口:以电脑串口号为准波特率:和仪表波特率一致数据位:8位奇偶校验位:无停止位:1读数据指令:0X030000000Y其中:0X指仪表的地址,以仪表的地址为准,如为1,则X=10Y指读取仪表数据的路数,如8路数据则Y=8。

Registet Size:2 Byte Sign/Unsign:e有无符号 Decimal:小数点,一般为1,即1位有效位。

如数值123,如Decimal值为0,测显示123.000如Decimal值为1,测显示12.300。

MODBUS-TCP通讯协议V1.03

MODBUS-TCP通讯协议V1.03

PMF633E多功能电量测控仪MODBUS TCP通信协议(Ver1.03)许继智能控制技术有限公司XJ INTELLIGENT CONTROL TECHNOLOGY CO.,LTD.一、以太网基本知识 (2)1.mac地址 (2)2.PING命令 (2)3.TCP/IP协议 (3)二、MODBUS-TCP简介 (3)1.通讯协议简介 (3)2.功能码说明 (6)3.数据类型说明 (7)4.计算因子 (7)三、寄存器列表 (8)1.通用数据寄存器列表 (8)5.继电器状态寄存器 (9)6.开入寄存器 (10)7.实时测量数据寄存器列表 (10)8.谐波数据寄存器 (11)9.电能数据寄存器表 (16)7.需量数据寄存器表 (24)8.SOE寄存器表 (25)9.配置寄存器表 (28)10.05H指令控制继电器 (31)一、以太网基本知识1.mac地址MAC(Medium/MediaAccess Control, 介质访问控制)MAC地址是烧录在NetworkInterfaceCard(网卡,NIC)里的.MAC地址,也叫硬件地址,是由48比特/bit 长(6字节/byte,1byte=8bits),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique,是识别LAN(局域网)节点的标识。

24-47位是由厂家自己分配.其中第40位是组播地址标志位。

网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。

形象的说,MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。

PMF633E MAC地址采用型号+IP地址来确定63-3E-XX-XX-XX-XX如装置地址设置为100.100.1.10则mac地址为:63-3E-64-64-01-0A这样设置保证我公司的产品在接入系统中不发生mac冲突,如遇和其它厂家的设备冲突,请按上述修改IP地址方式修改mac地址。

Modbus 通讯协议编程

Modbus 通讯协议编程

Modbus 通讯协议编程协议名称:Modbus通讯协议编程一、引言Modbus通讯协议是一种用于工业自动化系统的通信协议,它允许不同设备之间的数据交换和通信。

本协议旨在规范Modbus通讯协议的编程实现方式,确保设备之间的数据交换和通信的准确性和可靠性。

二、定义1. Modbus通讯协议:一种用于工业自动化系统的通信协议,用于设备之间的数据交换和通信。

三、通信协议规范1. 通信方式:Modbus通讯协议使用串行通信和以太网通信两种方式。

a) 串行通信:使用RS-232、RS-485等串行通信接口进行数据传输。

b) 以太网通信:使用TCP/IP协议进行数据传输。

2. 数据传输格式:Modbus通讯协议采用二进制格式进行数据传输。

a) 串行通信:数据传输使用8位无校验位、1位起始位和1位停止位的格式。

b) 以太网通信:数据传输使用TCP/IP协议进行封装和传输。

3. 数据帧结构:Modbus通讯协议使用数据帧来传输数据。

a) 串行通信:数据帧由起始字符、地址字段、功能码字段、数据字段和错误检验字段组成。

b) 以太网通信:数据帧由TCP/IP协议的头部和数据部分组成。

4. 功能码:Modbus通讯协议定义了一系列功能码,用于设备之间的数据交换和通信。

a) 读取操作:功能码1和2用于读取线圈状态和离散输入状态;功能码3和4用于读取保持寄存器和输入寄存器的值。

b) 写入操作:功能码5和6用于写入单个线圈和保持寄存器的值;功能码15和16用于写入多个线圈和保持寄存器的值。

5. 数据类型:Modbus通讯协议支持多种数据类型的传输,包括线圈、离散输入、保持寄存器和输入寄存器等。

四、编程实现1. 硬件要求:Modbus通讯协议的编程实现需要满足以下硬件要求。

a) 串行通信:使用支持RS-232或RS-485通信接口的硬件设备。

b) 以太网通信:使用支持TCP/IP协议的以太网硬件设备。

2. 软件要求:Modbus通讯协议的编程实现需要满足以下软件要求。

测试modbus协议的第三方软件简单使用

测试modbus协议的第三方软件简单使用

测试modbus协议的第三方软件简单使用Modbus协议的产品若知道下发的查询指令,可以使用简单的调试软件查询,若不知道或者希望更简单的操作,可以使用第三方软件modpoll(主站)、modslave(从站)、modscan32去采集带modbus协议的设备数据。

一 Modscan32软件的使用1.界面如下第一步单击菜单栏connection-connect第二步单击Rotocol Selection进入下一步第三步通讯参数设定:进行下面的设置操作.单击后出现的界面填写如下图所示的数据2.Modbus的类型选择,在Modbus Point Type就是要读取的寄存器区:“01 : COIL STATUS ”指1号命令DO寄存器(继电器状态) DO“02 : INPUT STATUS ”指2号命令DI寄存器(输入状态) DI“03 : HOLDING REGUSTER ”指3号命令保存寄存器(锁存器)“04 : INPUT REGISTER ”指4号命令输入寄存器(输入寄存器)按照硬件产品说明书指导选择哪一种类型3.PC显示数据设置,从左到右对应看:二进制、八进制、十六进制4.其它功能菜单项,从左到右对应看:新建、打开、保存、连接、断开、数据定义等。

所有参数设置完成后单击OK,如果对应串口有数据输入,就能获取数据。

备注:采用Modbus/485信号接入要求如下:1.Server通讯的参数为9600,8,1,无效验(可调整,但是目前企业通讯模式参数一致)2.Server的485地址是13.采集点对应Modbus RTU地址为4001开始,数据类型为RINT。

4.提供的MOdbus RTU Server必须是国际标准版协议,使用Modscan调试软件能够测试通过。

5.若出现timeout 需要检查一下从站设置的参数,比如从站地址功能码寄存器地址及长度二 modbus poll的使用第一步和设备建立连接第二步从站设置 setup第三步数据读取区域三 modbus slave 的使用第一步连接选择第二步参数设置第三步数据区域。

解读Mod bus通讯协议

解读Mod bus通讯协议

作为工控人,Mod bus通讯协议想必都不陌生,Mod bus通讯协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性、可扩充性和标准化使他成为通用工业标准。

1979年施耐德电气制定了一个用于工业现场的总线协议Mod bus协议,现在工业中使用RS 485通信场合很多都采用Mod bus协议,所以今天我们来了解下Mod bus通信协议。

Mod bus是Mod icon公司为其PIC通讯而开发的一种通讯协议。

也是全球第一个真正用于工业现场的总线协议。

Mod bus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。

其系统结构既包括硬件、亦包括软件。

它可应用于各种数据采集和过程监控。

Mod bus特点:(1)标准、开放,用户可以免费、放心地使用Mod bus协议,不需要交纳许可证费,也不会侵犯知识产权。

(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。

(3)Modbus的帧格式简单、紧凑,通俗易懂。

用户使用容易,厂商开发简单。

从1979年问世至今,已经成为工业通讯领域的业界标准,最初的Mod bus仅支持串口,分为Rtu和ACSII两种信号传输模式(一般基于RS 485串口通信媒介)。

而随着时代的变迁,Mod bus新增了TCP版本,可以通过以太网进行通讯,此外Mod bus还有一个Mod icon专用的Mod bus Plus版本。

Mod bus是一种单主站的主/从通讯模式,由1个子站和多个从站组成,允许多个设备连接在同一个网络上进行通讯。

Mod bus三种通信协议介绍:Mod bus TCP,以太网,RJ 45。

Mod bus RTU/ASCII,异步串行通讯,RS 232/485/422、光纤、无线Modbus Plus,高速令牌传递网络,同轴电缆或光缆。

其中Modbus RTU、ModbusTCP最为常用。

MODBUS通讯协议

MODBUS通讯协议
ቤተ መጻሕፍቲ ባይዱ
modbus_Master 和 modbus_Slave)中的 API 函数可以同时支持基于串口和 TCP 的 Modbus 协议,应用程序只需要 在调用初始化函数时,用不同参数区分即可,有关参数的说明请参见相应的头文件:modbus_Master.h 和 modbus_Slave.h
1、modbus_Master 的应用 作为 Modbus 客户端模式的应用,主要是准备请求并向服务器设备发送请求,并等待服务器的响应。在做此 类应用开发时,用户可参考 Modbus 标准文献以及被控设备的通讯接口数据手册,直接调用英创提供的 modbus_Master 软件包提供了相应的操作 API 函数,来完成对服务器设备的访问和控制。在进行此类应用开发时, 用户只需要包含 modbus_master.h/ modbus_master.lib 即可。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根1保据过护生管高产线中工敷资艺设料高技试中术卷0资配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中2体2资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况1卷下中安与,全过要,度加并工强且作看尽下护可1都能关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编.工写保况复护进杂层行设防自备腐动与跨处装接理置地,高线尤中弯其资曲要料半避试径免卷标错调高误试等高方,中案要资,求料编技试5写术卷、重交保电要底护气设。装设备管置备4高线动调、中敷作试电资设,高气料技并中课3试术且资件、卷中拒料中管试包绝试调路验含动卷试敷方线作技设案槽,术技以、来术及管避系架免统等不启多必动项要方高案式中;,资对为料整解试套决卷启高突动中然过语停程文机中电。高气因中课此资件,料中电试管力卷壁高电薄中气、资设接料备口试进不卷行严保调等护试问装工题置作,调并合试且理技进利术行用,过管要关线求运敷电行设力高技保中术护资。装料线置试缆做卷敷到技设准术原确指则灵导:活。在。对分对于线于调盒差试处动过,保程当护中不装高同置中电高资压中料回资试路料卷交试技叉卷术时调问,试题应技,采术作用是为金指调属发试隔电人板机员进一,行变需隔压要开器在处组事理在前;发掌同生握一内图线部纸槽故资内障料,时、强,设电需备回要制路进造须行厂同外家时部出切电具断源高习高中题中资电资料源料试,试卷线卷试缆切验敷除报设从告完而与毕采相,用关要高技进中术行资资检料料查试,和卷并检主且测要了处保解理护现。装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

基于S7-300,400 CPU集成PN 接口 Modbus TCP通讯快速入门(更新版本V2.4)

基于S7-300,400 CPU集成PN 接口 Modbus TCP通讯快速入门(更新版本V2.4)
2.2.1 ” ModbusTCP PN-CPU V2.4”块库使用说明.................................................................. 7 2.2.2 ” ModbusTCP PN-CPU V2.4”选项包硬件和软件需求 ................................................... 8 2.3 “ModbusTCP PN-CPU V2.4”软件选项包与step7 集成概况 ................................................. 9
1.2 Modbus TCP 数据帧
Modbus 数据在 TCP/IP 以太网上传输,支持 Ethernet II 和 802.3 两种帧格式,Modbus TCP
数据帧包含报文头、功能代码和数据 3 部分,MBAP 报文头(MBAP、Modbus Application Protocol、Modbus 应用协议)分 4 个域,共 7 个字节,如图 1 所示:
图 1: MODBUS TCP 报文 由于使用以太网 TCP/IP 数据链路层的校验机制而保证了数据的完整性,MODBUS TCP 报文中不再带有数据校验”CHECKSUM”,原有报文中的“ADDRESS”也被“UNIT ID”替代而加 在 MODBUS 应用协议报文头中
IA&DT Service & Support
3 配置S7-400 单站系统通过CPU集成PN口作为Server进行Modbus TCP通讯
10
3.1 例子中使用的硬件设备及软件 ............................................................................................ 11 3.2 S7-400 系统及Modscan32 软件组态.................................................................................. 12 3.3 通讯测试............................................................................................................................. 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ModBus通讯协议软件包
ModBus 通讯协议简介
是一种已广泛应用于当今工业控制领域的通用通讯协议。

通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。

使用的是主从通讯技术,即由主设备主动查询和操作从设备。

一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。

典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。

Modbus通讯物理接口可以选用串口(包括RS232和RS485 ),也可以选择以太网口。

其通信遵循以下的过程:
主设备向从设备发送请求;
从设备分析并处理主设备的请求,然后向主设备发送结果;
如果岀现任何差错,从设备将返回一个异常功能码。

英创ModBus 通讯协议软件产品简介
英创公司推出的ModBus通讯协议软件产品主要应用于英创ARM9嵌入式主板环境,英创工控
主板均带有丰富的串口、网络资源、通用GPIO接口等,同时具有强大的处理能力。

结合ModBus通
讯协议软件,就可非常方便地构成符合ModBus通讯规范的主控(Master )及设备(Slave )的应用
平台。

针对ModBus通讯的主从方式这一特点,英创公司的ModBus通讯协议软件包分为两个可独
立使用的部分,即“ModBus主控协议软件”(简称modbus_Master )以及“ModBus设备方协议软件”(简称modbus_Slave )。

目前英创ModBus通讯协议软件运行于WinCE环境下,均以C函数加静态LIB库的形式提供给客户。

其主要特征如下:
非常适用于实时的工业应用
可以支持基于串口的ModBus通讯协议应用或TCP的ModBus通讯协议应用
RTU传输模式。

支持大多数的Modbus功能码操作,包括对线圈、离散开关输入的位操作,以及对寄存器的字节操作。

支持广播地址。

可以灵活设置ModBus通讯的超时时间。

可以获取通讯中传输协议的错误代码的详细信息。

英创ModBus 协议软件通讯关系图
ModBus 应闻 &
英创ModBus 协议软件支持的功能码
软件基本使用方法
为了方便应用程序的使用,对不同的通讯介质保持一致的代码形式,英创所提供的ModBus协议
软件(包括modbus_Master 和modbus_Slave )中的API函数可以同时支持基于串口和TCP的M odbus协议,应用程序只需要在调用初始化函数时,用不同参数区分即可,有关参数的说明请参见相应的头文件:modbus_Master.h 和modbus_Slave.h
1、modbus_Master 的应用
作为Modbus客户端模式的应用,主要是准备请求并向服务器设备发送请求,并等待服务器的响应。

在做此类应用开发时,用户可参考Modbus标准文献以及被控设备的通讯接口数据手册,直接调
用英创提供的modbus_Master 软件包提供了相应的操作API函数,来完成对服务器设备的访问和控制。

在进行此类应用开发时,用户只需要包含modbus_master.h/ modbus_master.lib 即可。

2、modbus_Slave 的应用
作为ModBus服务器模式的应用,主要需要实现了对于ModBus应用报文的分析与响应,但这
还只是ModBus整个通讯的一部分,另一部分是还需要有对应用数据的访问,这部分的内容则需要用户自己来进行定义。

为了方便客户的使用,在modbus_Slave 软件包中通过函数指针的形式,实现
了这些用户接口函数的自动加载,将用户应用数据处理和ModBus应用报文响应关联起来。

用户只需
根据需求定义这些接口函数来实现相应的功能,各个函数具体的定义是通过专门的一个CPP文件:D ataProvider.cpp 来实现。

由此可见在这类的开发应用时,需包含两个部分的内容,一部分是modbus_slave.h/ modbu
s_slave.lib 定义的API 函数;另一部分是DataProvider.h /DataProvider.cpp 定义的用户数据接口函数,其中接口函数需要用户在DataProvider.cpp 中具体实现。

为了及时地响应ModBus 应用报文,需要注意的是在程序设计时应设计一个线程反复调用bus_Slave 执行函数,该函数为阻塞模式。

举例如下:
(2)线程中调用执行函数Serverloop 响应请求
while ( 1 )
{
// 调用执行函数,用于对ModBus 报文的分析和响应。

result = mbusSlave_ServerLoop( hPort );
if( result!=0 ) // 检查是否返回错误
{
// 出错处理:本例为获取并打印错误代码的文本信息
wcscpy( szText, mbusSlave_GetErrorText( result ) );
i1 = wcslen( szText ); mod
(1)启动modbus 设备方协议hPort =
mbusSlave_StartupServer( 或者
hPort=mbusSlave_StartupServer(
_T('*'), 1, 10000, mbusSlave_Interface );
_T('COM3:9600-8-1-0'),1,10000,
mbusSlave_Interface );
if( i1>0 ) {
wcstombs( strText, szText, printf( ' error code: %s!\n', }i1 ); strText );。

相关文档
最新文档