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点时间:设置:1 至 120 秒。 |
?ECR | =EtextCR | CW信标文本:保存至EEPROM(最多255字符)。有效ASCII:20h(空格)至5Fh(Z)。 |
?FCR | =FxxxxxxCR | 频率设置:TX136:135700 至 137800 Hz,TX500:472000 至 479000 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 ] | 时钟同步:设置:1 至 3559 秒。 |
?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帧(0 至 5)。 |
?WGCR | =WGxCR [ 0 ~ 5 ] | FST4W帧模式:同JASON帧(0 至 5)。 |
?WPCR | =WPxxCR [ 0 ~ 60 ] | WSPR/FST4W功率:设置MAX档功率校准为 0 至 60 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 |
|
实际上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. |