Juma TX136 3 串行协议与控制软件

日期:2024-11-14

硬件基本折腾完了,现在准备动手写软件。

日期:2025-05-06

Juma TX136 串行命令协议介绍

(该部分是F4GCB的v1.16第三方固件文档对应部分的翻译与解释,适用于最新的v1.16固件,该协议向下兼容官方的v1.04固件,同时有更多新增的功能)

JUMA TX136/TX500串行协议是JUMA TX136/TX500电台与另一个系统通信的方式。

描述:

串行命令报文总是以问号 “?” (0x3F)或等号 “=” (0x3D)开头,并总是以回车符␍ “CR”(0x0D)结束。

“?” 表示查询报文,“=”表示设置报文。响应报文中同时还会添加换行符␊LF(0x0A),这使得使用终端程序测试命令过程变得方便。

起始符 报文 终止符
? 查询报文 CR
= 设置报文 CR
= 响应报文 LF CR

为了提高输入格式的灵活性,下列字符被定义为无动作字符(No action characters)。

0x0A 换行符 ␊ Line feed

0x00 空格 ␀ NUL

注意:在TX期间,除了停止发射命令“=B0”之外的所有串行命令都被禁用。
在REMOTE模式下,处于OPER和TX状态时,所有串行命令都被禁用。

Juma TX136/500 串行协议命令表

(原英文版表附在文末)

询问命令 设置命令 功能与参数
?ACR =AxCR [ 0 ~ 2 ] 前置放大器0 = 关闭,1 = 10 dB,2 = 20 dB。
?BCR =BxCR [ 0 ~ 1 or T ] 发射控制0 = 停止发射,1 = 发射信标(注意:无论是否为OPER模式都会发射),1 至 99 = SCRIPT模式下发射次数,T = 发射信息,被用于JUMA软件。
?CCR =CxCR [ 0 or 1 ] 接收转换器0 = 关闭,1 = 开启(TX136: 10 MHz,TX500: 3.5 MHz)。
?DCR =DxxxCR [ 1 ~ 120 ] QRSS/DFCW点时间:设置:1120 秒。
?ECR =EtextCR CW信标文本:保存至EEPROM(最多255字符)。有效ASCII:20h(空格)至5Fh(Z)。
?FCR =FxxxxxxCR 频率设置:TX136:135700137800 Hz,TX500:472000479000 Hz(步进1 Hz)。双频板安装时自动切换波段。
?GCR =GxCR [ 0 ~ 10 ] 发射模式0 = CW,1 = QRSS,2 = DFCW,3 = JASON,4 = WSQ2,5 = OPERA,6 = WSPR,7 = FST4W,8 = JT9,9 = REMOTE,10 = SCRIPT。
?HCR =HtextCR 信标文本:保存至EEPROM(最多16字符)。有效ASCII:20h(空格)至5Fh(Z)。
?IICR 系统信息:返回固件版本
?IBCR 系统信息:返回电池电压(分辨率10 mV)。
?IDCR 系统信息:返回电流消耗(分辨率0.1 A)。
?IPCR 系统信息:返回发射功率(分辨率0.1 W)。
?ISCR 系统信息:返回驻波比(SWR)。
?JFCR =JFxCR [ 0 ~ 5 ] JASON帧模式0 = 单次,1 = 连续,2 = 发1等1,3 = 发1等2,4 = 发1等3,5 = 发1等4。
?JSCR =JSxCR [ 2 ~ 5 ] JASON速度2 = Normal, 3 = Normal turbo, 4 = Fast, 5 = Fast turbo。
?KCR =KxCR [ 0 ~ 4 ] CW键类型0 = 点优先,1 = Iambic A,2 = Iambic B,3 = 直键,4 = 信标模式。
?LCR =LlocatorCR 网格定位:设置6位梅登黑格网格。
=MtextCR 消息文本:临时存储(最多160字符,不保存)。JUMA软件专用。有效ASCII:20h(空格)至5Fh(Z)。
?NCR =NxxxxCR [ 1 ~ 3559 ] 时钟同步:设置:13559 秒。
?OCR =OxCR [ 0 ~ 2 ] 操作模式0 = STBY待机,1 = OPER运行,2 = TUNE调谐。
?OFCR =OFxCR [ 0 ~ 5 ] OPERA帧模式0 = 单次,1 = 连续,2 = 发1等1,3 = 发1等2,4 = 发1等3,5 = 发1等4。
?OSCR =OSxCR [ 0 ~ 5 ] OPERA速度0 = OPERA 2,1 = OPERA 4,2 = OPERA 8,3 = OPERA 16,4 = OPERA 32,5 = OPERA 65。
?PCR =PxCR [ 0 ~ 3 ] 发射功率0 = 4 W,1 = 15 W,2 = 35 W,3 = 60 W。
?QCR =QxCR [ 0 ~ 5 ] CW/QRSS/DFCW帧模式0 = 单次,1 = 连续,2 = 发1等1,3 = 发1等2,4 = 发1等3,5 = 发1等4。
?QFCR =QFxCR [ 0 ~ 5 ] WSQ帧模式0 = 单次,1 = 连续,2 = 发1等1,3 = 发1等2,4 = 发1等3,5 = 发1等4。
?RCR =RxxCR [ 1 ~ 50 ] DFCW点划频移:设置:1 = 0.1 Hz 至 50 = 5.0 Hz。
?RSCR =RSxCR [ 0 or 3 ] REMOTE模式0 = JASON(normal),1 = JASON(fast),2 = WSQ2,3 = AFP。
?SCR =SxxxCR [ 10 ~ 500 ] CW速度10 = 1 WPM 至 500 = 50 WPM(步进10)。兼容JUMA软件。
?SFCR =SFxCR [ 0 or 1 ] SCRIPT帧模式0 = 单次,1 = 连续。
?TCR =TxCR [ 0 or 2 ] 发射控制0 = 自动(程序控制),1 = MOX(PTT输入高电平触发),2 = RTS(PTT输入低电平触发)。
?TFCR =TFxCR [ 0 ~ 5 ] JT9帧模式0 = 单次,1 = 连续,2 = 发1等1,3 = 发1等2,4 = 发1等3,5 = 发1等4。
?TSCR =TSxCR [ 0 ~ 4 ] JT9速度0 = JT9-1,1 = JT9-2,2 = JT9-5,3 = JT9-10,4 = JT9-30。
?UCR =UtextCR 脚本文本:保存至EEPROM(最多127字符)。有效ASCII:20h(空格)至5Fh(Z)。
?VCR =VxCR [ 0 or 1 ] GPS定位开关0 = 关闭,1 = 开启。
?WCR GPS定位值:返回“NO GPS”或6字符网格。
?WFCR =WFxCR [ 0 ~ 5 ] WSPR帧模式:同JASON帧(05)。
?WGCR =WGxCR [ 0 ~ 5 ] FST4W帧模式:同JASON帧(05)。
?WPCR =WPxxCR [ 0 ~ 60 ] WSPR/FST4W功率:设置MAX档功率校准为 060 dBm。步进遵循WSPR协议。
?WSCR =WSxCR [ 0 or 1 ] WSPR速度0 = WSPR-2,1 = WSPR-15。
?WTCR =WTxCR [ 0 ~ 3 ] FST4W速度0 = FST4W-120,1 = FST4W-300,2 = FST4W-900,3 = FST4W-1800。
?XCR =XxCR [ 0 or 1 ] SPARE I/O:双频板安装时:0 = 136 kHz,1 = 500 kHz;否则:0 = 关闭,1 = 开启。
?YCR =YxCR [ 0 ~ 2 ] CW识别0 = 关闭,1 = 12 WPM,2 = 24 WPM。
?ZCR =ZcallCR 呼号:设置最多10字符的标准或特殊呼号。

JUMA TX136-500 软件说明

JUMA TX136-500软件可以使用CW、QRSS、DFCW、JASON、WSQ和JT9模式发射信息。
发送到JUMA TRX的消息文本不保存在EEPROM中,也不替换信标文本。
标签#C(呼号)和#L(定位器)是可用的。在JT9模式下,消息被自动截断为13个字符。

该消息还可以包含控制字符,用于控制TX136/500在传输过程中的参数。这些参数是连续波模式(CW, QRSS, DFCW),CW速度(WPM),CW点时间(s), DFCW dash shift (DDS步数),输出功率(MIN, LOW, HI, MAX),发送频率(Hz)和连续波消息中的播放载波。

因此,可以使用CW信标模式发送以控制字符\g1或\g2开始的长QRSS或DFCW消息,或者创建一个带有20 s载波的NDB信标(例如:«\G1\D020\C\G0 call»)。标签#C(呼号)和#L(定位器)同样是可用的。

日期:2024-11-14

串口控制上位软件

事实上JumaTX136是有电脑控制软件的,原作者写了一份。但是这个软件只和作者亲自编写的v104固件匹配。这个固件问题相比于最新的v115,只支持CW QRSS和Beacon。

寥寥无几的功能。

v115 F4GCB编写的文档,足足三大页的串口指令。

话虽如此,虽然是想写一个GUI的程序。但是我没有接触过GUI,再者说电脑编程已经是很久以前大一的事情,如今差不多也忘光了。好在,还有ChatGPT。

ChatGPT果然神通广大,把需求描述给他,提交原文档的描述,一会功夫就写好了一段代码,再添油加醋催他写,只一个晚上就写好了足足四五百行的串口控制GUI。功能一切正常。

隔两天,我再把其他什么的乱七八糟串口功能也一股脑的灌进Chatgpt,这次比较费劲了,因为代码已经来到了八九百行的规模,chatgpt4o到上限了。我只能一个一个功能的往里填,在人力复制粘贴出来。最终,还是完成了成品。

这个代码已经完美包括了所有的串口功能。唯一的缺点是tk到上限了,开始变卡了。Python终究不是个高效的语言,不仅运行速度慢,编译出来的exe程序足足有30MB的夸张大小。未来有机会还是用VB或者别的语言来写吧。

顺带一提,V115的作者还在代码里留了个Bug,导致External REMOTE不能正常控制。

1
2
3
4
5
6
7
8
9
10
11
12
case 'R': case 'r':
switch(cmd_buf[2])
{
default:
set_cw_shift(get_number(2), 1, 0, 0);
break;

case 'S': case 's':
set_rem_soft(get_number(2), 1, 0, 0);
break;
}
break;

实际上External的指令是“=RSx\r”,get_number(2)只会得到第三个字符也就是“S”,S在ascii码里远远大于数字,最后输出结果落入case只能是最大的“3”

到我写稿时,刚好F4GCB反馈修好了这个bug并发布了v1.16

AFP控制软件

F4GCB另一个卓越的工作是编写了用于AFP-FSK控制的功能,就像VOX那样,发射音频、处理音频、发送串口指令,然后发射。这个功能可以实现用WSJT等程序控制发射,让Juma TX136从简单的CW机进化为全能FSK机!

不过,既然最终是用串口来发射的,那么直接用python程序效果应该也是一样的。

音频处理我同样也不了解,这次同样使用ChatGPT。我向chatgpt说明我的需求,它飞快的写出来一个程序。程序的功能很让我满意,但是它的频率精度却不尽如人意。

FFT size是个什么东西?凭着经验,我感觉这个东西调大可以让运算精度变得更细致。但是调大之后,这个程序就会变得非常非常的卡。原本我的设想是每20毫秒输出一次频率串口命令,调大之后100毫秒输出一次都难。

研究一下,最后终于搞明白了,事实上我可以在fft计算出的峰值附近采用抛物线三点插值法,用FFT计算出的幅度最大值点和它附近的两个点来计算抛物线的极大值。这样可以把原本的5Hz精度提升到0.01Hz级。

关于触发的幅度,我再对阈值计算平均值,这样可以过滤突然的幅值抖动。

至于FFT size,是每次执行计算的样本数量,这个数量与采样时间和采样率配合。FFT size当然不是越大越好。我设置的48000波特率,每20毫秒采样进行一次FFT计算,计算同时带上前100毫秒的数据,这样可以平衡精度和时域响应。

至于其他的窗函数、短时FFT计算和小波变换,由于现在的程序已经很满意了,就没有再深入。

日期:2024-11-14

Juma TX136项目设计于2009年,当时的计算机上RS232串口是标配,但是现在的电脑上很少见这种接口。因此决定画一个USB转RS232的转接板,并专门设计用于该机器。

Juma TX136支持1200至115200的常见波特率。选用CH340E和MAX3232EST。这两种芯片都兼容5V和3.3V电平。同时MAX3232EST只需要4个100nF的电容构成电荷泵在低压下实现RS232电平,100nF的电容一抓一大把如是。

实测115200波特率可以跑通。

附录:

英文版的串行协议命令表格:

串行询问 串行设置 功能和参数
?ACR =AxCR [ 0 to 2 ] Pre Amplifier: 0 = OFF, 1 = 10 dB, 2 = 20 dB.
?BCR =BxCR [ 0 to 1 or T ] TX ON: 0 = stop the TX, 1 = run the beacon (caution: force beacon on), 1 to 99 = run the TX n times via the script, T = run the message transmission, used by JUMA software.
?CCR =CxCR [ 0 or 1 ] RX Converter: 0 = OFF, 1 = ON 10 MHz (TX136), 3.5 MHz (TX500).
?DCR =DxxxCR [ 1 to 120 ] QRSS & DFCW dot time: Set: 1 to 120 s.
?ECR =EtextCR CW beacon text: Set and save in EEPROM (up to 255 characters). Valid ASCII: 20h (space) to 5Fh (Z).
?FCR =FxxxxxxCR Frequency: Set TX136: 135700 to 137800, TX500: 472000 to 479000, step 1 Hz. Band auto-switches if bi-band board installed.
?GCR =GxCR [ 0 to 10 ] TX Mode: 0 = CW, 1 = QRSS, 2 = DFCW, 3 = JASON, 4 = WSQ2, 5 = OPERA, 6 = WSPR, 7 = FST4W, 8 = JT9, 9 = REMOTE, 10 = SCRIPT.
?HCR =HtextCR Beacon text: Set and save in EEPROM (up to 16 characters). Valid ASCII: 20h (space) to 5Fh (Z).
?IICR System info: Returns Firmware Version.
?IBCR System info: Returns Battery Voltage (10 mV resolution).
?IDCR System info: Returns Current Drain (0.1 A resolution).
?IPCR System info: Returns TX Power reading (0.1 W resolution).
?ISCR System info: Returns SWR Meter reading.
?JFCR =JFxCR [ 0 to 5 ] JASON frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?JSCR =JSxCR [ 2 to 5 ] JASON speed: 2 = Normal, 3 = Normal turbo, 4 = Fast, 5 = Fast turbo.
?KCR =KxCR [ 0 to 4 ] CW Keyer Type: 0 = Dot priority, 1 = Iambic A, 2 = Iambic B, 3 = Straight, 4 = Beacon.
?LCR =LlocatorCR Locator: Set 6-character Maidenhead grid.
=MtextCR Message text: until 160 characters. No save in EEPROM. Used by JUMA software. Valid ASCII characters : 20h (space) to 5Fh (Z).
?NCR =NxxxxCR [ 1 to 3559 ] Synchronization Timer: Set: 1 to 3559 s.
?OCR =OxCR [ 0 to 2 ] Operating mode: 0 = Stand By, 1 = Operation, 2 = Tune.
?OFCR =OFxCR [ 0 to 5 ] OPERA frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?OSCR =OSxCR [ 0 to 5 ] OPERA speed: 0 = OPERA 2, 1 = OPERA 4, 2 = OPERA 8, 3 = OPERA 16, 4 = OPERA 32, 5 = OPERA 65.
?PCR =PxCR [ 0 to 3 ] TX power: 0 = 4 W, 1 = 15 W, 2 = 35 W, 3 = 60 W.
?QCR =QxCR [ 0 to 5 ] CW/QRSS/DFCW frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?QFCR =QFxCR [ 0 to 5 ] WSQ frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?RCR =RxxCR [ 1 to 50 ] DFCW dash shift: Set: 1 = 0.1 Hz to 50 = 5.0 Hz.
?RSCR =RSxCR [ 0 or 3 ] External REMOTE: 0 = JASON (normal), 1 = JASON (fast), 2 = WSQ2, 3 = AFP.
?SCR =SxxxCR [ 10 to 500 ] CW speed: Set: 10 = 1 WPM to 500 = 50 WPM (step 10). Compatible with JUMA software.
?SFCR =SFxCR [ 0 to 1 ] SCRIPT frame: 0 = one play, 1 = continuously.
?TCR =TxCR [ 0 or 2 ] TX Control: 0 = Auto (program), 1 = MOX (high level on PTT IN), 2 = RTS (low level on PTT IN).
?TFCR =TFxCR [ 0 to 5 ] JT9 frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?TSCR =TSxCR [ 0 to 4 ] JT9 speed: 0 = JT9-1, 1 = JT9-2, 2 = JT9-5, 3 = JT9-10, 4 = JT9-30.
?UCR =UtextCR SCRIPT text: until 127 characters. Set and save in EEPROM. Valid ASCII characters : 20h (space) to 5Fh (Z).
?VCR =VxCR [ 0 or 1 ] GPS locator selection: 0 = OFF, 1 = ON.
?WCR GPS locator value: Returns ‘NO GPS’ or 6-character grid.
?WFCR =WFxCR [ 0 to 5 ] WSPR frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?WGCR =WGxCR [ 0 to 5 ] FST4W frame: 0 = one play, 1 = continuously, 2 = 1 timeslot out of 2, 3 = 1 timeslot out of 3, 4 = 1 timeslot out of 4, 5 = 1 timeslot out of 5.
?WPCR =WPxxCR [ 0 to 60 ] WSPR/FST4W power: Set: 0 to 60 dBm for PWR MAX. Value set with a step according to WSPR protocol.
?WSCR =WSxCR [ 0 or 1 ] WSPR speed: 0 = WSPR-2, 1 = WSPR-15.
?WTCR =WTxCR [ 0 to 3 ] FST4W speed: 0 = FST4W-120, 1 = FST4W-300, 2 = FST4W-900, 3 = FST4W-1800.
?XCR =XxCR [ 0 or 1 ] SPARE I/O: If TX136-500 bi-band board installed: 0 = 136 kHz, 1 = 500 kHz. Else: 0 = OFF, 1 = ON.
?YCR =YxCR [ 0 to 2 ] CW Identity: 0 = OFF, 1 = 12 WPM, 2 = 24 WPM.
?ZCR =ZcallCR Callsign: Set a standard or a compound callsign with 10 characters max.

Juma TX136 3 串行协议与控制软件
http://naturewind846.github.io/2024/tx136-4/
作者
naturewind846
发布于
2024年11月14日
更新于
2025年5月12日
许可协议