C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯

C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯,是要建立局域网吗,要怎么建立,连接?求大虾帮帮忙! C#上位机的。。

2个回答

将上位机与下位机全都连上局域网,并获取ModbusTCP的端口号(默认502),在上位机上用Socket打开下位机的TCP连接,按照ModbusTCP规范轮询下位机。
如果下位机直接接入局域网,那一个下位机就需要一个TCP连接。如果通过网关接入,就需要查看网关的使用文档。

wuheng_1
wuheng_1 回复ryong1267:建立TCP连接需要一个IP地址和端口号;Modbus协议需要设置站址,也就是你说的Unitidentifier.站址一般可以在下位机那里设定,软件设定、硬件设定的方式都是可能的,可以咨询厂家。
3 年多之前 回复
ryong1267
ryong1267 非常感谢! 是不是上位机只要连接一个IP地址就可以,然后根据Unitidentifier(单元标识符) 判断是哪个下位机,是这样的吗?还是说每个下位机都有一个IP地址,上位机要与个个下位机的IP地址都要连接?? Unitidentifier(单元标识符) 这个是由哪个产生的???
3 年多之前 回复

非常感谢!
是不是上位机只要连接一个IP地址就可以,然后根据Unitidentifier(单元标识符) 判断是哪个下位机,是这样的吗?还是说每个下位机都有一个IP地址,上位机要与个个下位机的IP地址都要连接?? Unitidentifier(单元标识符) 这个是由哪个产生的???

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ModBus/TCP协议通讯?
我没看明白ModBus/TCP协议;有一个问题请教,在我发送数据这一块是没问题了,但是怎么将接收到的数据放到指定的Edit控件中实时显示出来?rn[code=C]/C++RecvBuf[0]=0;rnRecvBuf[1]=0;rnRecvBuf[2]=0;rnRecvBuf[3]=0;rnRecvBuf[4]=0;rnRecvBuf[5]=11;rnRecvBuf[6]=0;rnRecvBuf[7]=3;rnRecvBuf[8]=0;rnRecvBuf[9]=0;rnRecvBuf[10]=0;rnRecvBuf[11]=2;rnRecvBuf[12]=4;[/code]接下来怎么写?rn
ModBus Tcp 通讯C# +Demo
C# ModBus Tcp读写数据 与服务器进行通讯,内包含客户端和服务端源码。
modbus TCP协议 VB通讯程序源码
结合《开放型 MODBUS-TCP规范(中文版)》手册,开发环境:Visual Basic V6.0 sp6 ,使用Winsocket控件开发的modbus客户端,然后结合modbus服务器仿真软件(modbus poll 和 modscan32),进行离线仿真应答Modbus服务器的请求,可同时响应多个modbus服务器的请求。 需要的童鞋们,自行下载喽,下载资源分会有些高,毕竟花了不少心血嘛,\(^o^)/~ 附件中包括VB modbus TCP 源码,以及可执行文件。 有什么疑问或建议,请下载后在评价中写出,或给我发信息,谢谢。
C# WPF上位机实现和下位机TCP通讯
下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。 界面如下: 服务端 服务端实在上篇基础上实现的。需要做如下更改: while (true) { ...
MODBUS TCP 通讯
MODBUSTCP通讯.pdf,是tcp的
Modbus TCP通讯程序
Modbus tcp客户端程序,利用VC开发
Modbus TCP 通讯规约
详细介绍了Modbus-TCP通讯规约的通讯方式,通讯报文格式等
西门子Modbus TCP通讯
学习与掌握西门子S7-1200系列PLC的Modbus TCP通讯,实用性高。
MODBUS TCP 以太网通讯
主要介绍了通过S7-300/400以太网通讯模块CP343/443-1进行MODBUS TCP 的通信原理,并以MODSCA32和MODBUS SLAVE软件为例模拟第三方设备详细介绍如何配置与CP443-1进行MODBUS TCP通讯。
LabVIEW上下位机通讯
上位机和下位机通讯,将下位信号在上位机上显示,并通过上位机控制下位机
mscomm上下位机通讯
友好的进行上下们画栋雕梁通讯,mscomm上下位机通讯
RS485通讯modbus协议
通讯计数器上的一个 标准MODBUS通讯协议。MODBUS RTU 标准协议 举例: 控制器地址为:01 寄存器地址为:01 存放数值需要1个字节 则:电脑发给控制器的命令代码如下: 01 03 00 01 00 01 d5 ca 假如此时数值为1000 则控制器发给电脑的命令代码如下: 01 03 02 03 e8 b8 fa 控制器地址为:01 寄存器地址为:01 存放数值需要2个字节 则:电脑发给控制器的命令代码如下: 01 03 00 01 00 02 95 CB 假如此时数值为1000 则控制器发给电脑的命令代码如下: 01 03 04 03 E8 00 00 7A 43
modbus协议通讯的应用
这是学习modbus通讯的很好资料。请大家放心下载
Modbus协议通讯编程问题
我想通过com1口用VB实现与热点偶信号变换器(R1M-GH2T-R/MSR)的通讯,程序写完后我无法获得数据!!望各位大侠救急!!!!现告诉各位这个设备协议说明的网址:www.m-system.co.jp 进入网站后选择services & support 然后再选择第一项modbus reference guide即可.再将我写的程序附于此:rnrnOption ExplicitrnPrivate Sub Command1_Click()rnDim value() As ByternDim i As Integerrn'Me.MSComm1.CommPort = 1rn'Me.MSComm1.Settings = "38400,o,8,1"rnDim CRC As StringrnDim d() As Byte '待传输数据rnReDim d(5) As ByternDim data As Stringrnd(0) = 2 'slave addressrnd(1) = 4 'functionrnd(2) = 0 'starting address highrnd(3) = 17 'starting address lowrnd(4) = 0 'no.of registers highrnd(5) = 1 'no.of registers lowrnCRC = CRC16(d) '调用CRC16计算函数rn 'CRC(0)为高位rn 'CRC(1)为低位rnrnIf Me.MSComm1.PortOpen = False ThenrnMe.MSComm1.PortOpen = TruernEnd IfrnMe.MSComm1.Output = Chr(2) + Chr(4) + Chr(0) + Chr(17) + Chr(0) + Chr(1) + Chr(CRC16Lo) + Chr(CRC16Hi)rnrnDo While i < 9rn i = i + 1rnLooprnrn value = Me.MSComm1.Inputrnrn MsgBox (value)rn Me.MSComm1.PortOpen = Falsern End Subrn rnGlobal CRC16Lo As Byte, CRC16Hi As Bytern Public Function CRC16(data() As Byte) As Stringrn 'CRC寄存器rn Dim CL As Byte, CH As Byte '多项式码&HA001rn Dim SaveHi As Byte, SaveLo As Bytern Dim i As Integerrn Dim Flag As Integerrn CRC16Lo = &HFFrn CRC16Hi = &HFFrn CL = &H1rn CH = &HA0rn For i = 0 To UBound(data)rn CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或rn For Flag = 0 To 7rn SaveHi = CRC16Hirn SaveLo = CRC16Lorn CRC16Hi = CRC16Hi \ 2 '高位右移一位rn CRC16Lo = CRC16Lo \ 2 '低位右移一位rn If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1rn CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1rn End If '否则自动补0rn If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或rn CRC16Hi = CRC16Hi Xor CHrn CRC16Lo = CRC16Lo Xor CLrn End Ifrn Next Flagrn Next irn Dim ReturnData(1) As Bytern ' ReturnData(0) = CRC16Hi 'CRC高位rn 'ReturnData(1) = CRC16Lo 'CRC低位rn CRC16 = ReturnDatarn End Functionrn
上下位机通讯
上位机每隔几分钟就要去读取下位机的文件(2k左右),请问这个该怎么做,我一点都不懂,请各位大侠多多指教,高分相送!!
s7与上下位机通讯
SIMATIC S7-400 与 常用上下位软件通讯
Modbus TCP协议
Modbus TCP协议 Modbus TCP协议 Modbus TCP协议
Modbus TCP 协议资料
Modbus TCP 原始协议资料,用于开发Modbus TCP 协议用的到。
modbus tcp 中文协议
很好的modbus tcp中文协议,了解modbus tcp从看协议开始
Modbus—TCP协议
modbus—TCP报文协议,解决工业控制信息传输,解决工业控制信息传输,解决工业控制信息传输,解决工业控制信息传输,
modbus TCP协议 论文
基于modbus TCP协议相关论文,都是从各大高校服务器上下载下来的
ModBus TCP协议总结
本篇文章是我看了以下博客之后的总结,以便于自己日后的复习和巩固,这里贴出源文章的出处,以表示尊重知识产权。 https://www.cnblogs.com/dathlin/p/8007297.html https://blog.csdn.net/thebestleo/article/details/52269999 对于modbus来说,涉及的功能码也就是0x01,0x02,0x03,0x05,0...
模拟上位机与多个下位机的通讯
1、系统由一个上位机(PC)与多个下位机组成(单片机),通过串行接口将它们连接到一起; 2、分别为上、下位机编写程序实现通讯功能,能显示出传送的数据(验证通讯正确); 3、可自定义通讯协议; 4、由于有多个单片机存在,可用汇编和C语言为不同的下位机编写程序。
用c# 实现 modbus协议
最近要用c# 实现 modbus协议,不知道有哪位达人做过这方面的研究呢,能否指点一二,不胜感激!
Modbus协议在TCP/IP上 的实现指南
Modbus协议在TCP/IP上 的实现指南
VB实现与下位机MODBUS通讯教程
VB实现与下位机MODBUS通讯教程,与PLC等串口通讯
C#51单片机通讯用modbus协议
我想让上位机与下位机通讯rn上位机用C# winform程序rn使用SerialPort类rn怎么用modbus协议呢rn来个能把上位机与下位机的代码都写出来的大虾rn下底初学rn什么都不懂rn直观写仔细rn能实现功能的万分感激
用modbus rtu协议与仪表通讯的问题
用VB写的,协议是modbus rturn手上有一块仪表,现在就是对其中一个参数的读和写有点疑惑一直搞不明白rn请大家帮忙分析到底是我代码的问题还是仪表的限制rnrn假设这个参数是SR,从我的软件上去修改它的数值,最大不能修改超过3276.7这个数rn如果仪表上显示超过6553.5,那么我的软件上通讯过来的显示一直都是3276.8rnrn一、我要修改SR参数为一个大于3276.7的数,比如4000.0。仪表的通讯手册说明小数点不做传送rn我要把SR修改成4000实际我就要发送成40000,转成十六进制就是9C40rnrn发送帧命令rn地址 功能码 第一个字地址 字的值 CRCrn02 06 00 A1 9C 40 B0EB rnrn正常情况接收帧命令应该是这样的rn02 06 00 A1 9C 40 B0EB rnrn可是为什么在我的软件上返回的却是[color=#FF0000] 028603F261[/color] ???rn我自己分析估计是CRC计算错误造成的仪表返回错误数据,rn我用前面数值在其他CRC计算工具上有的计算结果是B0D8rn在我的软件上测试只要把SR这个参数改成大于3276.7的数据即要发送的数据大于32767rn就无法修改,小于这个数就可以正常修改rnrn二、现在再说下从仪表读取SR参数的问题rn只要仪表的SR这个参数大于6553.5,那么软件上就一直显示3276.8rnrn发送帧命令rn02 03 00 A1 00 01 D5DBrnrn只要SR>6553.5那么返回的数据都是下面这个rn02 03 02 FF FF FDF4rnrn还有查看了这写和读的极限值好像写正好卡在Ingter 整形数范围-32768~32767rn而读好像是String 字符串最大值65535,和这两个有关吧,我是个新手到底是什么原因麻烦帮忙看下rnrn三、下面附上我的代码rnrnSR读:rnrntxtSegRate.Text = Euro3504(.txtDevAdd.Text, 3, 0, "A1", 0, 1, True) / 10rnrnSR写:rnrnPrivate Sub cmdSegRate_Click() rnrn strData = Replace(Format(DEC_to_HEX(txtSegRate.Text * 10), "@@@@"), " ", "0")rnrn Call Euro3504(txtDevAdd.Text, 6, 0, "A1", Left(strData, 2), Right(strData, 2), True)rn rnEnd Subrnrnrn模块代码:rnPublic Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)rnrnPublic Function Euro3504(A1 As String, A2 As String, A3 As String, A4 As String, A5 As String, A6 As String, Flag As Boolean) As StringrnrnDim CRC_JS() As ByternDim CRCC() As ByternrnDim Reply As StringrnDim R_S As VariantrnDim RR() As ByternDim i As Integerrnrn'MESSAGE FRAME FORMAT 消息帧格式rnrn ReDim CRCC(5)rn CRCC(0) = "&H" + A1rn CRCC(1) = "&H" + A2rn CRCC(2) = "&H" + A3rn CRCC(3) = "&H" + A4rn CRCC(4) = "&H" + A5rn CRCC(5) = "&H" + A6rn rn CRC_JS = CRC16(CRCC) '调用CRC效验计算函数rn rn If Flag = True Thenrnrn Eurotherm.MSComm1.Output = CRCC '发送帧命令rn Eurotherm.MSComm1.Output = CRC_JSrn Eurotherm.MSComm1.OutBufferCount = 0 '清除传输缓冲区rn rn Delay 300 '超过35ms就可以rn rn R_S = Eurotherm.MSComm1.Inputrn Eurotherm.MSComm1.InBufferCount = 0 '清除传输缓冲区rn rn RR = R_Srn rn Reply = ""rn rn For i = 0 To UBound(RR)rn rn Reply = Reply + Right("0" + Hex(Int(Str(RR(i)))), 2) + ""rn rn Nextrnrn End Ifrnrn If Reply <> "" Thenrn rn Euro3504 = HEX_to_DEC(Mid(Reply, 7, 4)) ' 转十进制rn rn '显示负数,排除Segment Rate地址A1,这个参数只要显示超过3278.6就显示负数了rn '因为小数点不传送读取出来就是>32786rn If Euro3504 > 32786 And A4 <> "A1" Thenrn Euro3504 = Euro3504 - 65536rn End Ifrn rn End Ifrnrn rnEnd FunctionrnrnrnPublic Function HEX_to_DEC(ByVal Hex As String) As Long '十六进制转成十进制rn Dim i As Longrn Dim b As Longrnrn Hex = UCase(Hex)rn For i = 1 To Len(Hex)rn Select Case Mid(Hex, Len(Hex) - i + 1, 1)rn Case "0": b = b + 16 ^ (i - 1) * 0rn Case "1": b = b + 16 ^ (i - 1) * 1rn Case "2": b = b + 16 ^ (i - 1) * 2rn Case "3": b = b + 16 ^ (i - 1) * 3rn Case "4": b = b + 16 ^ (i - 1) * 4rn Case "5": b = b + 16 ^ (i - 1) * 5rn Case "6": b = b + 16 ^ (i - 1) * 6rn Case "7": b = b + 16 ^ (i - 1) * 7rn Case "8": b = b + 16 ^ (i - 1) * 8rn Case "9": b = b + 16 ^ (i - 1) * 9rn Case "A": b = b + 16 ^ (i - 1) * 10rn Case "B": b = b + 16 ^ (i - 1) * 11rn Case "C": b = b + 16 ^ (i - 1) * 12rn Case "D": b = b + 16 ^ (i - 1) * 13rn Case "E": b = b + 16 ^ (i - 1) * 14rn Case "F": b = b + 16 ^ (i - 1) * 15rn End Selectrn Next irn HEX_to_DEC = brnEnd FunctionrnrnrnPublic Function DEC_to_HEX(Dec As Long) As String '十进制转化为十六进制rn Dim a As Stringrn DEC_to_HEX = ""rn Do While Dec > 0rn a = CStr(Dec Mod 16)rn Select Case arn Case "10": a = "A"rn Case "11": a = "B"rn Case "12": a = "C"rn Case "13": a = "D"rn Case "14": a = "E"rn Case "15": a = "F"rn End Selectrn DEC_to_HEX = a & DEC_to_HEXrn Dec = Dec \ 16rn LooprnEnd FunctionrnrnrnPublic Sub Delay(mmSec As Long) ' 延时ms 级过程rnrn Dim start As Singlern DoEventsrn Sleep mmSecrn 'DoEventsrnrnEnd SubrnrnrnPublic Function CRC16(data() As Byte) As String 'CRC16校验位函数rnrn Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC寄存器rnrn Dim CL As Byte, CH As Byte '多项式码&HA001rnrn Dim SaveHi As Byte, SaveLo As Byternrn Dim i As Integerrnrn Dim Flag As Integerrnrn CRC16Lo = &HFFrnrn CRC16Hi = &HFFrnrn CL = &H1rnrn CH = &HA0rnrn For i = 0 To UBound(data)rnrn CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或rnrn For Flag = 0 To 7rnrn SaveHi = CRC16Hirnrn SaveLo = CRC16Lornrn CRC16Hi = CRC16Hi \ 2 '高位右移一位rnrn CRC16Lo = CRC16Lo \ 2 '低位右移一位rnrn If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1rnrn CRC16Lo = CRC16Lo Or &H80 '则低位字节右移后前面补1rnrn End If '否则自动补0rnrn If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或rnrn CRC16Hi = CRC16Hi Xor CHrnrn CRC16Lo = CRC16Lo Xor CLrnrn End Ifrnrn Next Flagrnrn Next irnrn Dim ReturnData(1) As Byternrn ReturnData(0) = CRC16Lo 'CRC低位rnrn ReturnData(1) = CRC16Hi 'CRC高位rnrn CRC16 = ReturnDatarnrnrn End Functionrnrnrnrnrnrn
有关MODBUS协议的读下位机数据
我现在正在试着编一个在MODBUS—RTU协议下上位机读取下位机数据的程序(VC6.0),哪位大侠能够给小弟介绍一下,如何编写上位机向下位机发送的请求(功能码为03)和上位机接收数据的代码(有20个设备,每个设备8个通道),最好能够提供代码,并注释,我刚学好多东西都不知道,谢谢!
modbus 协议 vb上位机 slave模拟下位机
modbus 协议 vb 编写 程序 实例,crc验证 ,下位机采用 modbus slave 实现 模拟 。 初学者 比较好 的 教程实例
MODBUS TCP通讯调试软件
TCP服务器通讯测试工具服务端和客户端。可选择本机IP地址和远程IP地址及端口,支持自动连接,自动发送数据。本工具可以运行在WINXP/7/CE系统下,如果无法运行,是因为你的电脑没有安装.NET2.0及以上环境。 支持多网卡,在网卡X中可自动更换IP地址,最多支持读写120个寄存器数。
Modbus TCP/IP通讯编程
本人最近在用施耐德的Premium PLC,需要VC编写的ModbusTCP/IP程序,实现PLC和上位机的通讯。上位机是客户端,PLC是服务器,哪位大侠传段代码,谢谢!邮箱interhanyun@163.com
qt下的modbus Tcp通讯程序
qt下实现了modbus tcp通讯协议,能够通过modbus协议控制底层硬件工作,该代码可以用于PLC等硬件的控制,运行环境vs2017+QT5.1.12
WinCC V7.2 Modbus TCP 通讯
WinCC V7.2 Modbus TCP 通讯 Email_wbq@163.com
modbus TCP 通讯类库和例子
modbustcpplc通讯上位机
modbus协议及自由口通讯
modbus协议及自由口通讯
上下位机通讯串口设置
上下位机通讯串口设置 这也是自己写的一个A/D数据转换器的上位机与单片机之间的串口设置,也包括了其他方面,比如包等。东西太多,有点混乱了,自己写的MFC
上位机与多个下位机通信MODBUS总线
我一共有四个电压采集模块,模块地址从1——4,我用MSCOMM实现了上位机与下位机的一对一通信,请问:rn如何实现与多个下位机的通信?一秒钟内采集采集四组下位机
COMTEST上下位机通讯测试软件
很好用的上位机下位机通讯测试软件,只需发送协议即可,适用于工业自动化设备
TCP协议的通讯流程
本文主要讲的是TCP连接机制及其过程,TIME_WAIT状态详解,为什么要进行三次握手和四次挥手。 服务器的初始化 调用socket,创建文件描述符。 调用bind,将当前的文件描述符和ip/port绑定在一起;如果这个端口已经被其他进程占用了,就会bind失败。 调用listen,声明当前这个文件描述符作为一个服务器的文件描述符,为后面的accept做好准备。 调用accept,并阻塞,等待...
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制