串行端口数据收集服务器MOXA Nport等当前是建筑系统领域中通过RS-232,RS-485和RS-422接口发送或接收数据的事实上的标准。
电表,控制阀和闸阀,流量计,振动传感器,机电装置。
可以生成数据或进行远程控制并具有RS-232,RS-485和RS-422接口的所有组件均通过这些转换器工作。
其使用的一般含义通常如下:通过现有的局域网转发RS-232,RS-485和RS-422接口,将具有串行接口之一的设备或设备通过以太网连接到PC(服务器,SCADA),再连接到设备通过互联网具有串行接口以进行远程控制等
这些转换器的价格不是很高,较年轻的型号可以借用$ 100-200。 但是考虑到在这种设备的任何自动化生产中都可以安装成百上千的设备,因此国内“进口替代品”的风头正日益逼近。
今天,我将尽力帮助他们。
我们该怎么办?
首先,我们将了解它如何在内部排列的理论。
其次,我们隔离了最低功能以开始在Real Com模式下工作(也就是说,实际上是通过以太网将虚拟COM端口转发到设备)。
第三,出于兴趣的考虑,我们将分析通过NPort Administration Suite实用程序搜索和配置设备的协议。 我们将全面了解如何创建一块铁钉的引脚到引脚的模拟物,该模拟物可以代替现有的MOXA Nport卡住,同时获得本机软件和驱动程序的全面支持。
最后,让我们尝试计算有多少印度人写了MOXA固件代码。
第1部分。
因此,我们在桌子上有一个测试主题(实际上有多个测试主题,因此,如果您在文章中看到不同的型号标识符和不同的MAC地址,请不要感到惊讶)

它具有一个以太网端口和两个RS-422 / RS-485端口-实际上是这样。
并且在程序计划中-在设备上处于打开状态:
UDP端口4800-它负责捕获设备搜索数据包,并将有关设备本身的数据发送到配置实用程序。
TCP端口4900-接收设备配置命令。 可以通过此端口配置设备的时间,名称,IP地址,操作模式,速度和端口设置以及其他基本参数,可以通过NPort Administration Suite实用程序的主界面进行配置:

TCP端口80-负责WEB接口的操作
TCP端口966、967(以及用于4端口设备的968、969)是传输控制端口。 他们运行命令来打开/关闭相应的COM端口,设置端口速度,推送数据,监视发送/接收缓冲区的充满度等。 端口966分别负责第一个端口的操作。
TCP端口(默认情况下)950、951(和4端口设备的952、953)是直接数据传输端口。 即,应直接出现在设备的RS-232 / 485/422端口上的内容将传输到数据端口。 仅此端口中的数据流控制分别进入966、967、968、969端口。
我希望了解我头脑中的设备操作的大致情况。 让我们继续下一部分:
第2部分。模拟MOXA
当然,对于许多人来说,已经清楚地知道,要假装成为最低配置的MOXA Nport,必须在其自己的硬件上的2个端口上增加一个TCP服务器:用于传输控制的966和用于直接数据传输的950。 自然,您将必须正确地回答和处理端口966上的驱动程序请求,但是如wireshark分析所示,请求没有那么多,而且它们是最简单的。
为了不使本文的文字过多地描述请求和答案,我准备并以pdf文件的形式分别发布了所有已解析请求,答案和传输参数的描述。
下载:解析MOXA.pdf的协议说明也就是说,这套知识使您能够实现可以与本机驱动程序配对并以MOXA形式传输数据的设备。 一半的工作已经完成,但是有一点-如何更改配置? 为此,可以使用本机的NPort Administration Suite实用程序。
第3部分。搜索和查找
前两部分描述了需要做的事情,但是没有一个关于如何获取用于实施协议的数据的词。
在这一部分中,我们将进行更深入的研究,看看如何对交易所本身进行分析。
我们知道设备上已打开UDP端口4800,让我们连接设备,运行NPort Administration Suite,Wireshark,并查看使用本机实用程序搜索设备时会发生什么。

我们看一下发送的数据包:

我们看到NPort管理套件将广播发送到地址255.255.255.255,也就是说,它希望数据包将在网络上飞行。
有效负载包包含数据:
01 00 00 08 00 00 00 00, : 01 00 – 00 08 – Big Endian. 00 00 00 00 –
多次发送此请求,显然希望其中至少一个能够实现目标。
所有MOX都对此请求做出响应。

具体来说,我们的答复是:
81 00 00 18 00 00 00 00 12 03 00 80 32 03 00 90 e8 26 4a ab c0 a8 7f fe 81 00 – 00 18 – (24) 00 00 00 00 – 12 03 00 80 32 03 – MOXA Nport device, NPort 5232. MOXA Nport device. NPort Administrator. 00 90 e8 26 4a ab – MAC MOXA Nport device c0 a8 7f fe – IP MOXA Nport device ( 192.168.127.254 )
似乎一切基本简单,仅混淆值12 03 00 80 32 03,该值负责解释特定的设备模型。
但是,由于已根据某个参考引用检查了该值,因此,它必须存储在某个位置。
在对软件目录进行了一些研究之后,我们发现在NPort Administrator Suite v1.22中,这些值存储在文件C中:\ Program Files \ NPortAdminSuite \ bin \ dsci.dll

在Wireshark和设备上坐了几天后,我们获得了完整的交换日志并了解了响应的功能代码。 为了方便起见,在同一pdf文件中描述了找到的所有内容,该链接的链接已在前面的文章中指出。
为了更好地了解图片-我只想提醒您,UDP 4800正在接收有关设备的主要信息,所有需要配置和安装的参数都是通过对TCP端口4900的请求进行配置的。
正确处理了4800和4900端口的所有传入请求后,我们可以完全假装为设备,因此即使本机软件也不会注意到问题。
第4部分。计数印第安人*
在分析协议的过程中,我感觉到交换协议的不同部分是由不同的人编写的,功能的含义及其解释太不相同了。
因此,例如:
UDP端口4800功能代码开头为:
01 00 .. .. 81 00 .. .. 10 00 .. .. 90 00 .. .. 16 00 .. .. 96 00 .. .. 29 00 .. .. a9 00 .. ..
TCP端口4900功能代码开头为:
00 01 .. .. 00 01 .. .. 02 01 .. .. 02 01 .. ..
依此类推
TCP端口966、967、968、969功能代码以以下开头:
10 .. .. 10 4f 4b 11 .. .. 11 4f 4b
依此类推
即,使用该函数的单字节标识符,而不像以前那样使用双字节。
然后,顺便说一句有趣的时刻。 在端口966、967、968、969上,对设置参数的响应始终包含3个字节。
第一个是函数号,其余的2是4f 4b或在ASCII表中有一个外观-“ O”“ K”
好吧,他,继续。
看到的第二个功能是在同一响应中散列Big End和Little Endian。
答案示例:
9a 00 00 24 00 00 00 00 01 52 00 80 9a 52 00 90 e8 3b 89 9c 75 00 04 00 01 00 0f 00 09 00 17 00 36 00 00 00 9a 00 – 00 24 – (36) 00 00 00 00 – 01 52 00 80 9a 52 – MOXA Nport device 00 90 e8 3b 89 9c - MAC MOXA Nport device 75 00 - : 1900 + (1900 + 117 = 2017) 04 00 - : 1 - 01 00 – 0f 00 – (15) 09 00 – (9) 17 00 – (23) 36 00 – (36) 00 00 –
数据包大小以一种方式编码,所有数值(年,月,日...)以另一种方式编码。 由此可以得出结论,从75 00 04 00 ...开始的用户部分的处理是由另一个程序员编写的。
总结一下:至少3个人编写了交换协议,1写了数据的用户部分的处理,至少1写了WEB接口处理程序。 根据我的计算,该项目大约有5位程序员。
你算多少钱?
*在这种情况下,“印度”一词是指履行其在食品和抵押方面的职责的雇员,他能够在此处和午餐之前进行编码,而无需真正研究雇主公司的全球计划。
PS:本文是根据2017年开发的材料撰写的,因此许多数据恰好包含今年的日期。 在工作草案的框架内对协议进行了检查,但是由于思想胜过了营销,因此此事并没有超出单个工作原型的阶段。 我将这个项目的所有进展发布到公共领域,因为我相信这些信息将对开发人员社区有用。
PPS原创文章一如既往地出现在我的
个人博客上