通道服务名:channel-serialport
工程名称:fox-edge-server-channel-serialport
说明:channel-serialport通道服务器,用于支持基于RS232、RS232转485或者其他RS232转其他通信类型的现场设备。
在现实项目中,有很多设备提供了RS232串口或者是RS458串口,作为它们的北向接口,跟上位机进行通信。
在这种通信模式下,Fox-Edge是作为上位机,现场RS232或者RS485设备作为现场智能设备
。
两边的通信方式,往往采用主从半双工的交互方式,也就是严格的遵循一问一答的方式。
针对这个业务场景,灵狐开发了channel-serialport这种通道服务,来支持该场景。
进一步考虑RS232串口是应用如此的广泛,大多数销售通信适配器的第三方硬件厂商,它们会提供诸如下面的适配器
例如:RS232转LORA,RS232转以太网,RS232转CAN、RS232转以太网、RS232转无线,
又或者是,USB转转LORA,USB转以太网,USB转CAN、USB转以太网、USB转无线
通过这类适配器,各种通信方式,被转换成RRS232串口通信方式。
此时,Fox-Edge安装channel-serialport服务之后,就能够跟各种各样的设备进行通信了
该服务的操作方法,只有主从半双工的exchange和单工下行的publish两种模式,没有单工上行的report模式。
这样设计的目的,是因为RS232设备基本上只适合一问一答式特别是RS485的传统自动化设备。
#windows的串口,名称为COM开始的名称
{
"parity": "E",
"baudRate": 2440,
"databits": 8,
"stopbits": 1,
"serialName": "COM2",
"fullDuplex": false
}
#Linux的串口,名称为tty开始的名称
{
"parity": "E",
"baudRate": 9600,
"databits": 8,
"stopbits": 1,
"serialName": "ttyUSB0",
"fullDuplex": false
}
#Linux下的串口通常是/dev/tty打头的文件名,根据不同厂家的硬件设备或者是外置模块,具体名称可能有所区别
#常见名称如下:
/dev/tty0
/dev/tty1
/dev/ttyS0
/dev/ttyS1
/dev/ttyUSB0
/dev/ttyUSB1
#可以使用如下命令行查看
ls -al /dev/tty*
#然后,用命令行给具体的串口发送报文,看一看上面哪些tty能够让你连接的设备接收到数据,例如
echo "hello" > /dev/ttyUSB0
用户对串口的使用场景,通常有一问一答的主从半双工方式,以及收、发各自进行的全双工方式。
在给串口配置通道参数的时候,可以通过fullDuplex来指明为半双工或者全双工的工作模式。
在半双工模式下,只能执行exchange操作,也就是发送报文后,然后等待数据返回。
而在全双工模式下,只能发送publish操作,也就是发送报文后,然后不等待数据返回。至于设备的返回,内部会以report方式接受并转发给设备服务进行解码处理
为什么会提供全双工模式呢,主要是考虑到某些用户在对存量系统进行改造的时候,原有的控制功能,依然是上位机系统完成的。而他们对Fox-Edge的诉求是,能够 通过RS232旁路转接器,去监听RS232的通信信号,然后由Fox-Edge做基于对这些存量设备进行数据监听的监控应用。 这样,这些用户就达到了,不动现有物联网存量系统的情况下,对物联网系统增加了Fox-Edge的数据监视能力。
#windows的串口,名称为COM开始的名称
{
"parity": "E",
"baudRate": 2440,
"databits": 8,
"stopbits": 1,
"serialName": "COM2",
"fullDuplex": false
}
#Linux的串口,名称为tty开始的名称
{
"parity": "E",
"baudRate": 9600,
"databits": 8,
"stopbits": 1,
"serialName": "ttyUSB0",
"fullDuplex": false
}
在主从半双工模式下,有些设备因为某些原因,回应的数据断断续续,比如中间接了一个数据转接头。
此时,导致收到的数据,在操作系统层面看,是断裂成了多段,操作系统只返回了第一段数据,也就是收到的数据不完整。
为了适应这种现象,串口服务提供了一个通道配置参数,用于指明断裂之间的时间间隔,不超过多少毫秒。
该参数为packInterval,意思是接收到数据后,再等等看packInterval毫秒,是否还有后续数据。
配置参数如下
#windows的串口,名称为COM开始的名称
{
"parity": "E",
"baudRate": 2440,
"databits": 8,
"stopbits": 1,
"serialName": "COM2",
"fullDuplex": false,
"packInterval": 100
}
#Linux的串口,名称为tty开始的名称
{
"parity": "E",
"baudRate": 9600,
"databits": 8,
"stopbits": 1,
"serialName": "ttyUSB0",
"fullDuplex": false,
"packInterval": 100
}