串行通信的概念很简单。串行端口一次发送和接收一位字节的信息。这比并行通信慢,并行通信允许一次传输整个字节;但是,它更简单,可以在更长的距离上使用。
重要的串行特性是波特率、数据位、停止位和奇偶校验。对于要通信的两个端口,这些参数必须匹配:
波特率是用于通信的速度测量。它表示每秒的位传输数。
数据位是对传输中实际数据位的测量。
当计算机发送信息包时,实际数据量可能不是完整的8位。
数据包的标准值为5、7和8位。
例如,标准ASCII的值从0到127(7位)。扩展ASCII使用0到255(8位)。
如果传输的数据是简单文本(标准ASCII),则每个数据包发送7位数据就足以进行通信。
数据包指单字节传输,包括开始/停止位、数据位和奇偶校验。
停止位用于表示单个数据包的通信结束。
典型值为1、1.5和2位。由于数据是跨线路计时的,并且每个设备都有自己的时钟,因此两个设备可能会稍微不同步。
因此,停止位不仅表示传输结束,而且给计算机一些时钟速度错误的空间。
停止位的位越多,同步不同时钟的灵活性越大,但数据传输速率越慢。
奇偶校验是串行通信中使用的一种简单的错误检查形式。
奇偶校验有四种类型:偶数、奇数、标记和间隔。也可以选择不使用奇偶校验。
对于奇偶校验,串行端口将奇偶校验位(数据位之后的最后一位)设置为一个值,以确保传输具有偶数或奇数个逻辑高位。
例如,如果数据为011,则对于偶数奇偶校验,奇偶校验位将为0,以保持逻辑高位的数量为偶数。如果奇偶校验为奇数,则奇偶校验位将为1,从而产生3个逻辑高位。
RS-232(ANSI/EIA-232标准)是IBM兼容PC上历史上发现的串行连接。它用于多种用途,如连接鼠标、打印机或调制解调器,以及工业仪器。
RS-232仅限于PC串行端口和设备之间的点对点连接。RS-232硬件可用于长达50英尺的串行通信。
RS-422(EIA RS-422-A标准)是苹果Macintosh计算机上历史上使用的串行连接。RS-422使用差分电信号,而不是使用RS-232参考接地的不平衡信号。差分传输使用两条线路分别传输和接收信号,与RS-232相比,具有更高的抗噪性和更长的距离。这些优点使RS-422更适合于工业应用。
RS-485(EIA-485标准)是对RS-422的改进,因为它将设备数量从10个增加到32个,并定义了在最大负载下确保足够信号电压所需的电气特性。抗噪性和多点功能使RS-485成为工业应用中的首选串行连接,需要许多分布式设备与PC或其他控制器联网,以进行数据采集、HMI或其他操作。RS-485是RS-422的超集;因此,所有RS-422设备可由RS-485控制。RS-485硬件可用于多达4000英尺电缆的串行通信。
Modbus 是由 Modicon 开发的串行通信协议,由 Modicon® 于 1979 年发布,用于其可编程逻辑控制器 (PLC)。
简单来说,它是一种用于在电子设备之间通过串行线路传输信息的方法。
请求信息的设备称为 Modbus 主设备,提供信息的设备称为 Modbus 从设备。
在标准的 Modbus 网络中,有一个 Master 和最多 247 个 Slave,每个 Slave Address 有一个从 1 到 247 的唯一 Slave Address。Master 也可以向 Slaves 写入信息。
Modbus 是工业制造中常用的开放式通信协议,允许设备之间进行通信。
使用 Modbus,可以将来自不同制造商的设备集成到同一个设备管理系统中。
Modbus 用于从许多不同设备收集数据,以便同时观察、配置或数据存档。
Modbus 是一种开放协议,这意味着制造商可以免费将其内置到他们的设备中,而无需支付版税。 它已成为工业中的标准通信协议,现在是连接工业电子设备最常用的方式。 它被许多行业的许多制造商广泛使用。
Modbus 通常用于将来自仪表和控制设备的信号传输回主控制器或数据收集系统,例如测量温度和湿度并将结果传送到计算机的系统。
Modbus 通常用于将监控计算机与监控和数据采集 (SCADA) 系统中的远程终端单元 (RTU) 连接起来。 存在用于串行线路(Modbus RTU 和 Modbus ASCII)和以太网(Modbus TCP)的 Modbus 协议版本。
在对问题进行故障排除时,查看正在传输的实际原始数据会很有帮助。
长串的 1 和 0 难以阅读,因此这些位被组合起来并以十六进制显示。 每个 4 位块由 0 到 F 的 16 个字符之一表示。
每个 8 位块(称为一个字节)由从 00 到 FF 的 256 个字符对之一表示。
ASCII 代表美国信息交换标准代码。
与每 4 位可以用 0 到 F 的 16 个十六进制字符之一组合表示一样,每 8 位(每个字节)可以用 256 个 ASCII 字符之一组合表示,包括常见的键盘字符。
例如,一些 ASCII 字符的值是
信息以四个不同的表存储在从设备中。
两个表存储开/关离散值(线圈)和两个存储数值(寄存器)。
线圈和寄存器各有一个只读表和读写表。
每个表有 9999 个值。
每个线圈或触点为 1 位,并分配了一个介于 0000 和 270E 之间的数据地址。
每个寄存器为 1 个字 = 16 位 = 2 个字节,并且数据地址在 0000 到 270E 之间。
网络中的每个从站都分配有一个从 1 到 247 的唯一单元地址。
当主机请求数据时,它发送的第一个字节是从机地址。 这样每个从机在第一个字节之后就知道是否忽略该消息。
主机发送的第二个字节是功能码。
这个数字告诉从站访问哪个表以及是读取还是写入该表。
CRC 代表循环冗余校验。 它是添加到每个 modbusRTU 消息末尾的两个字节,用于错误检测。 消息中的每个字节都用于计算 CRC。
接收设备还会计算 CRC 并将其与来自发送设备的 CRC 进行比较。 即使消息中的一位被错误接收,CRC 也会不同并导致错误。
Modbus 规范并未准确定义数据在寄存器中的存储方式。
因此,一些制造商在他们的设备中实现了 modbus,先存储和传输高字节,然后是低字节。或者,其他人先存储和传输低字节
同样,当寄存器组合表示 32 位数据类型时,一些设备将高 16 位(高位字)存储在第一个寄存器中,将剩余的低位字存储在第二个(5652 之前的 AE41),而其他设备则相反
字节或字的发送顺序无关紧要,只要接收设备知道期望它的方式。
例如,如果将数字 2,923,517,522 作为 32 位无符号整数发送,则可以按这四种方式中的任何一种进行排列。 例子
AE41 5652 高字节先 高字先 “大端”
5652 AE41 高字节在前 低字在前
41AE 5256 低字节在前 高字在前
5256 41AE 低字节先 低字先 “小端
modbus 映射只是定义了从设备的列表
由于通常使用单个字节来定义从站地址,并且网络上的每个从站都需要唯一的地址,因此网络上的从站数量限制为 256。 modbus 规范中定义的限制甚至更低,为 247。 为了超越这个限制,可以对协议进行修改以使用两个字节作为地址。 主站和从站都需要支持这种修改。 两字节寻址将网络中从站数量的限制扩展到 65535。 默认情况下,Simply Modbus 软件使用 1 字节寻址。 当输入大于 255 的地址时,软件会自动切换到 2 字节寻址,并对所有地址保持此模式,直到手动关闭 2 字节寻址。
TCP/IP 是 Internet 的通用传输协议,实际上是一组分层协议,提供机器之间可靠的数据传输机制。
Ethernet 已成为企业系统的事实标准,因此它也成为工厂网络的事实标准也就不足为奇了。 以太网并不是一项新技术。 它已经成熟到实施该网络解决方案的成本已经下降到其成本与当今现场总线的成本相当的程度。
在工厂中使用以太网 TCP/IP 可以与支持工厂的企业内部网和 MES 系统真正集成。1999 年制定了开放的 Modbus TCP/IP 规范。协议规范和实施指南可供下载 (www.modbus.org/specs).
Modbus 将多功能、可扩展且无处不在的物理网络 (以太网) 与通用网络标准 (TCP/IP) 和供应商中立的数据表示相结合,为过程数据交换提供了一个真正开放、可访问的网络。 对于任何支持 TCP/IP 套接字的设备来说,实现起来都很简单。
Modbus TCP/IP 因其开放性、简单性、低成本开发以及支持它所需的最少硬件而变得无处不在。
市场上有数百种 Modbus TCP/IP 设备——每年都在开发更多。 它用于在设备之间交换信息、监视和编程它们。 它还用于管理分布式 I/O,是此类设备制造商的首选协议
Modbus TCP/IP 是一种互联网协议。 TCP/IP 自动成为 Internet 的传输协议这一事实意味着 Modbus TCP/IP 可以在 Internet 上使用。
实际上,这意味着安装在网络中的 Modbus TCP/IP 设备可以从世界任何地方通过 Internet 进行寻址。 对设备供应商或最终用户的影响是无穷无尽的。
使用 PC 和浏览器对远程设备进行维护和维修可降低支持成本并改善客户服务。
在家中登录工厂的控制系统可以让维护工程师最大限度地延长工厂的正常运行时间并减少现场时间。使用商用互联网/内联网技术管理地理分布的系统变得容易。
由于 Modbus TCP/IP 只是带有 TCP 包装器的 Modbus 协议,因此现有 Modbus 设备通过 Modbus TCP/IP 进行通信非常简单。 需要网关设备将当前物理层(RS232、RS485 或其他)转换为以太网,并将 Modbus 协议转换为 Modbus TCP/IP。 这种网关设备可以使用 PC 来实现。 可以从几个不同的制造商处获得用于执行此操作的商业产品。 Modbus 设备数据库可以帮助您识别网关和其他 Modbus 设备。
Modbus 协议是 Modicon 于 1979 年开发的一种消息结构,用于在智能设备之间建立主-从/客户端-服务器通信。 它是工业制造环境中一个事实标准、真正开放且使用最广泛的网络协议。 它已被数百家供应商在数千种不同的设备上实施,以在控制设备之间传输离散/模拟 I/O 和寄存器数据。 这是不同制造商之间的通用语言或共同点。 一份报告称其为“多供应商集成的事实上的标准”。 行业分析师报告仅在北美和欧洲就有超过 700 万个 Modbus 节点。
主从技术是一种只有一个设备(主设备)可以发起事务(查询)的技术。 其他设备(从设备)通过向主设备提供请求的数据或采取查询中请求的操作来响应。 典型的主设备包括触摸屏或运行 Wonderware、Intellution 或 LabVIEW 的 PC,而从设备包括 PLC 和智能设备,如 PID 控制器或仪表。
这是指示 ON (1) 或 OFF (0) 状态的单个信息位。 线圈的类型包括阀门状态、警报/警告和状态。
这是一个 16 位的数据字段。 数据可以是二进制(十进制)、十六进制或 BCD 格式。 寄存器数据的类型包括温度、压力、时间和 PID 变量。
某些 Modbus 主设备以不同方式计算寄存器位置,因此实际地址可能会移位 1。 这通常称为“添加偏移量”。
Modbus RTU 协议本身是基于具有 16 位寄存器长度的设备设计的。 因此,在实现 32 位数据元素时需要特别考虑。此实现决定使用两个连续的 16 位寄存器来表示 32 位数据或基本上 4 个字节的数据。
一次通信结束与另一次通信开始之间的延迟时间。在此期间,与通信相关的进程被挂起,无法继续。延迟必须是最小的。
以下是协议的三个最重要的要素:
协议是一套规则,如果两个或两个以上的设备要相互通信,必须遵循这些规则。网络协议定义了如何安排和编码数据以用于网络上的传输。
半双工系统提供双向通信,但一次只能提供一个方向。用于主从通信。
全双工通信传输允许同时向两个方向传输数据,可用于点对点通信
Profibus DP 是一个开放的国际现场通信标准,支持模拟和离散信号。物理介质通过 RS-485 或光纤传输技术进行定义。
OPC 是世界上最流行的基于标准的数据连接方法。 它用于解决自动化行业中,如何在设备、控制器和/或应用程序之间进行通信,而不会陷入通常的基于自定义驱动程序的连接问题。
OPC 是工业自动化和企业中安全可靠信息交换的互操作性标准。 最初的 OPC 规范是在 1990 年代中期由一群自动化行业供应商开发的,用于标准化软件应用程序和工业自动化硬件设备之间的数据交换。
OPC 规范定义了客户端和服务器之间以及服务器到服务器之间的接口,因此 PLC、HMI 和任何 OPC 感知设备等系统组件可以共享数据,而无需开发自定义软件设备接口应用程序。
作为新一代 OPC 技术,OPC UA(统一架构)是安全、可靠和平台独立互操作性的重大飞跃。 OPC UA 旨在将数据和信息从一级工厂和过程控制设备传输到企业信息系统。
OPC UA 规范于 2008 年首次发布,将现有 OPC Classic 规范的所有功能集成到一个面向服务的架构中。 它增加了基本的新功能,例如平台独立性、诊断、发现、复杂信息模型的呈现、安全性和可靠性。 此外,OPC UA 于 2011 年 10 月作为 IEC 标准 IEC 62541 发布。
OPC Classic 规范基于 Microsoft Windows 技术,使用 COM/DCOM(分布式组件对象模型)在分布式客户端-服务器网络中的软件组件之间进行通信。 OPC Classic 规范为交换过程数据、报警和历史数据提供了单独的规范。
最初的 OPC Classic 规范是 OPC DA(数据访问),它定义了客户端和服务器应用程序之间的接口,用于交换过程和制造数据。 其他重要的 OPC Classic 规范包括 OPC 警报和事件 (OPC AE) 和 OPC 历史数据访问 (OPC HDA)。
OPC Classic 仍然是 OPC 技术组合的一个组成部分。 2010 年,OPC Classic 使用 OPC .NET 4.0 规范进行了增强,以适应 Microsoft 平台的新技术创新,提供更好的连接性、可靠性、安全性和互操作性。
OPC 客户端是为与 OPC 连接器通信而编写的软件。 它使用由特定 OPC Foundation 规范定义的消息传递。
OPC 服务器是一种软件应用程序,一种“标准化”驱动程序,专门为符合一个或多个 OPC 规范而编写。
“OPC 服务器”不是指正在使用的计算机类型,而是反映其与 OPC 对应物 OPC 客户端的关系。
简短的回答是——尽可能多。 在 OPC 框架内,对于 OPC 客户端可以连接的 OPC 服务器数量没有理论上的限制。
否。OPC 客户端到 OPC 客户端的通信未在 OPC 中定义。 仅支持 OPC 客户端/OPC 服务器架构。
但是,如果希望应用程序向其他客户端提供 OPC 数据,则它需要拥有自己的 OPC 服务器。 此 OPC 服务器随后将允许来自其他应用程序的 OPC 客户端将此应用程序用作 OPC 数据源。
对 OPC UA 二进制数据传输的初步测试表明,Classic OPC(基于 DCOM)对于小消息更快,而 OPC UA 对于大消息更快。
然而,传输内容是最重要的。 Classic OPC 和 OPC UA 都可以每秒传输数万个值,而这个传输速率完全可以满足大多数控制系统。
服务端:
客户端:
最准确的方式,是可以给定一个时间段,在这个时间段内,如果没有任何通信相关的活动,保活机制开始作用,即发送一个心跳请求报文,一般心跳报文包含的数据非常少,对方在接收到心跳报文后,及时做出响应,如果连续几个心跳报文都没有得到响应,则认为当前的通信已经断线,启动断线重连动作或者报出异常。
TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
所以,Socket跟TCP/IP并没有必然的联系,Socket编程接口在设计的时候,就希望能适应其他的网络协议。Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了一些最基本的函数接口,比如Send,Listen等。
我们都知道 TCP 连接建立是需要三次握手,假设攻击者短时间伪造不同 IP 地址的 SYN 报文,服务端每接收到一个SVN 报文,就进入SYN_RCVD 状态,但服务端发送出去的 ACK + SYN 报文,无法得到未知IP 主机的 ACK 应答,久而久之就会占满服务端的 SYN 接收队列(未连接队列),使得服务器不能为正常用户服务。
两个方案:
程序中的数据最终需要保存在内存中,或在通信过程中以字节进行传输,当数据大于1个字节的表示范围时,出现了多个字节的排列顺序问题,即数据存储大小端
大端:数据的低位存放内存地址(或报文字节序)的高地址
小端:数据的低位存放内存地址(或报文字节序)的低地址
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议由德国的 Robert Bosch公司开发,用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。
CAN总线是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电子干扰性,并且能够检测出产生的任何错误。CAN总线可以应用于汽车电控制系统、电梯控制系统、安全监测系统、医疗仪器、纺织机械、船舶运输等领域。
(1)具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;
(2)采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;
(3)具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网络;
(4)可根据报文的ID决定接收或屏蔽该报文;
(5)可靠的错误处理和检错机制;
(6)发送的信息遭到破坏后,可自动重发;
(7)节点在错误严重的情况下具有自动退出总线的功能;
(8)报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。
。
CAN总线是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电子干扰性,并且能够检测出产生的任何错误。CAN总线可以应用于汽车电控制系统、电梯控制系统、安全监测系统、医疗仪器、纺织机械、船舶运输等领域。