DOS机器 和 linux 机器 通讯 之 备忘录 2014,5,7 许多事情完成于20年之前,(dos部分)和linux通讯,完成互控也有10余年了。 最近CCD部分,换了主机,操作系统。遇到了通讯问题。 彻底炒了下冷饭。程序做了修改,写下备忘录。 一。dos机 控制望远镜转动,滤光片转换,圆顶随动。XY导星。。。 提供RA,Dec,时角,恒星时,圆顶方位,XY 导星位置。。。 由于机内插卡问题,需要ISA插槽。所以计算机,须为低档pc机。 程序可运行在 DOS系统和win98下。(XP下也能运行,实时性差) 用了两个串口: com1 (9600,8,1,n) 和 linux 通讯 com2 (2400,8,1,n) 和 王红旗 做的硬件通讯,(查圆顶,XY位置;控制运动) 用了两个并口: 采集望远镜码盘数,控制望远镜手把运动; 控制滤光片。(识别某滤光片并运动,及中心到位信息) 赤经码盘数是要用计算机转换的,所以赤经微调数值可以存于计算机内。 机内还有一块ISA插槽卡,输出不同频率脉冲,可以更改望远镜恒动快慢。 程序主体, c31.c,x991.c,tit.c (a641.asm) c31 在开机时运行,占领一块内存地址。 使其它程序可以在内存交换信息。 x991 装载汇编程序a641的执行码。初始化“口子”。 a641 是“灵魂”,附加在时钟中断后面。55ms一次。采集望远镜参数并显示。 计算天文参数并显示,管理:两个串口收发,报时。。。 tit 是个上层管理程序。具体动作执行者。分析串口信息。响应键盘。 调用具体实体程序。(例: move,filt,。。。) 二、 linux 机 主体当然是CCD控制包(lick 天文台),用到了PGSQL库。 读库,写库的某些变量,达到“外控”目的。 “灵魂”程序unix_n3在后台运行。 1、用串口1,和 DOS 机通讯,交换信息。 2. 监视 CCD 工作流程。 3. 生成更新状态文件,(和远程文件同步,就能达到网上观测) 每3.2秒向DOS请求更新参数。 不定时向DOS发命令:转望远镜,滤光片。。。 回传DOS执行结果。。。 上层外围软件,smtall2,smtall3,smtbat,smtobs?? 均和它交换信息。 三。 更换CCD机器,串口出现问题: 10年前,用redhat7.3 写的串口通信程序,已正常10年。 但:更换CCD控制器,更换计算机(用USB,大屏)。须fedora13, 串口出了问题。 通信不畅: 向DOS发命令,发不出去,唯独3.2秒请求望远镜参数命令能出去。 unix_n3 停在写串口的地方。不知等什么? 0. 在台本部搭模拟环境。 1. 于是,将命令附加在请求望远镜参数命令后。5% 失败率不能容忍。 2. 问题都出现在转RA,DEC过程。压缩传送量。2000.0历元作为默认值,不送。 3. dos机 重启x991能过。 4. 将dos的tit加设别,4秒无请求,自动重启x991。 5. 据说还有不成的时候。 6. 考虑串口 三线(2,3,5),五线工作方式,考虑 RTS,CTS信号。不是。 7. 现版: 改造unix 串口读写方式。 传统的串口接收方式是用中断的。因为对方不知道事件的发生时刻。 在dos和dos之间,以及redhat7.3 全是如此。 现为1秒查询一次,摒弃了接收中断方式后,通讯流畅。接收有缓冲,我们 交换的数据量,微不足道,不会丢数据。 四。 CCD 机程序改造。 lick的软件包中的数据格式有所改动。和PGSQL库打交道的程序相应做了改动。 重点在加速读库上。 外围程序请求曝光,批处理做平场。。。我写了新程序。 其它程序改动部分甚少。 没有将老的SMT机(现地址为102)的所有程序拷到新机器,用什么,调什么。 难免有幺蛾子。即便,应是十分容易的事。 新机器上装了UCAC4,coord8。 ----------