如果DOSBOX内部串口与宿主机串口通互通,那DOSBOX中各种语言开发的程序均与外界有了串行通信功能,MODBUS with DOSBOX也就实现了。下面的操作,为DOSBOX打开通往外部的串行通信接口。
1. 在宿主机上创建虚拟串口对。方法是安装 Free 的 com0com 串口对程序,并创建成对的串口,比如图中的 COM1和COM2,接线方式是右侧一个红点可以接通数个绿色点,但一般情况下默认即可,无需自己改动连接线,所须做的工作是在 use Ports class 框打钩,并在上面的文本框中为串口起名字,显然要避开已有串口,否则冲突了会创建失败。
如果有实体串口空闲,可以忽略这一步。这一步的目的是让宿主机有串口可供DOSBOX绑定使用,宿主机串口被DOSBOX绑定后,因被占用就不能在宿主机上操作了。对于串口对,绑定一个可以操作另一个; 对于实体串口,绑定后宿主机的串口只能外连串口设备使用了。两者用法不太相同。
在宿主机的设备管理器上看一下,会在端口下找到创建的串口对。
2. 将COM1绑定给DOSBOX
在DOSBOX的配置菜单中,进入Serial Ports,然后在 serial1处填写 directserial realport:com1,如果还要绑定其它口,则在下面的串口处继续绑定。意思是:DOSBOX的serial1,与宿主机的COM1是直接绑定的。因为COM1和COM2是串口对,所以,在宿主机上操作COM2即相当于操作COM1,而宿主机的COM1就是DOSBOX的serial1,如此内外就连接起来了。
3. 在宿主机上操作COM2
可以下载使用宏晶科技单片机串口烧写和调试用的ISP软件,其它串口助手也都可以使用,它们大多是免费的。可以选用文本方式、自动发送、发送时自动发送结束符,这样在DOSBOX中的程序接收时,方便接收ASCII字符串。
4. 在DOSBOX中测试对宿主机发送数据的接收。在DOS中进入QBasic开发环境,用QB帮助里面的示例稍加改造
COLOR 15, 1
CLS
'Set up error handling in case COM1 doesn't exist.
ON ERROR GOTO ErrHandler
'Open the COM port.
OPEN "COM1:9600,N,8,1,BIN" FOR INPUT AS #1
'Turn on COM event processing.
COM(1) ON
'Set up COM event handling.
ON COM(1) GOSUB Com1Handler
'Wait for a COM event to occur or a key to be pressed.
DO
LOOP WHILE INKEY$ = ""
'Turn off COM event handling.
COM(1) OFF
CLS
END
Com1Handler:
COM(1) OFF
LINE INPUT #1, A$
PRINT A$; TIME$;
'"Something was typed on the terminal attached to COM1."
COM(1) ON
RETURN
ErrHandler:
SELECT CASE ERR
CASE 68: PRINT "COM1 is unavailable on this computer.": END
CASE ELSE: END
END SELECT
启动宿主机ISP程序自动发送数据,运行DOSBOX中上面的QBASIC程序。
如果程序发送程序在宿主机上,用串口对比较方便; 如果程序在其它计算机上,DOSBOX可以绑定到实体串口上进行交互通讯。总之,被DOSBOX绑定的串口是DOSBOX独占的,宿主机不能直接操作(但可以通过串口对交互)。Modbus是协议层的,可在RS232和RS485跑协议,因此,DOSBOX可以通过串口调试Modbus设备,或编程使用Modbus设备。