【水】【KC资助】SORT 射电望远镜控制部分的研发

这个帖子主要是更控制,软件相关的内容,每一次重大进展单独一层。

进度更新1:

2019年4月19日10时50分许,远程控制LED灯的测试取得圆满成功,特发帖纪念。——题记

如果在荒郊野岭里建了一个天文台,又不能远程控制,那对于爱好者而言基本就是废物。所以,自SORT项目上马以来,远程控制就确定为一定要突破的技术。但是,我们管着写代码(也是唯一一个懂网络)的程序员小哥哥@FanceStudio被生物地理中考这只可怕的魔鬼抓走了,而我的编程水平撑死也就写一个HelloWorld,所以,我选用了曲线救国的方案——

使用“向日葵远程控制”控制一台计算机,由这台计算机再发出指令控制设备。

所以就有三部分工作需要完成:搞明白远程控制软件咋用,写一个控制设备的上位机,写arduino的程序。

远程控制软件直接从网上下载就可以了,在座的各位都是牛人,我就不介绍了。

这次制作的目标仅仅是控制arduino板载的LED的亮灭,所以程序的思路很简单,收到‘1’点亮,收到0‘熄灭’。其程序代码为:

<code class="hljs cpp"><span style="background-color:rgb(245, 245, 245); color:rgb(51, 51, 51); font-family:monospace, monospace; font-size:1em;"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"> </span></span></span></span></span></span></span></span></span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">setup</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"> </span></span></span></span></span></span></span></span></span></span>{</span></code><code class="hljs cpp"> <span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">// put your setup code here, to run once:</span></span></span></span></span></span></span></span></span></span></span>
  pinMode(<span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number">13</span></span></span></span></span></span></span></span></span></span></span>,OUTPUT);
  Serial.begin(<span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number">9600</span></span></span></span></span></span></span></span></span></span></span>);
}
<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">char</span></span></span></span></span></span></span></span></span></span></span> num;
<span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"> </span></span></span></span></span></span></span></span></span></span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">loop</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">()</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"><span class="hljs-function"> </span></span></span></span></span></span></span></span></span></span></span>{
  <span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">// put your main code here, to run repeatedly:</span></span></span></span></span></span></span></span></span></span></span>
  <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">if</span></span></span></span></span></span></span></span></span></span></span>(Serial.available()><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number">0</span></span></span></span></span></span></span></span></span></span></span>)num=Serial.read();
  <span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">//Serial.print(num);</span></span></span></span></span></span></span></span></span></span></span>
  <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">if</span></span></span></span></span></span></span></span></span></span></span>(num==<span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string">'1'</span></span></span></span></span></span></span></span></span></span></span>) digitalWrite(<span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number">13</span></span></span></span></span></span></span></span></span></span></span>,HIGH);
  <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">if</span></span></span></span></span></span></span></span></span></span></span>(num==<span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string">'0'</span></span></span></span></span></span></span></span></span></span></span>) digitalWrite(<span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number"><span class="hljs-number">13</span></span></span></span></span></span></span></span></span></span></span>,LOW);
}</code>

写完之后传进去就可以了。

然后是用VB写上位机。首先要做一些简单的设置:工程-部件-控件-选择Comm……那一个,把他勾上,就要用这个控件实现串口通信。

拖进两个按钮来,再拖进一个串口控件来。一定要把串口控件的CommPort设置成Arduino所在的端口号,我这个是照着Com7设的,对应我电脑的左上USB口。然后说一下程序的大概思路:启动时开启串口,按左边的按钮发送1,按右边的按钮发送0,大家一看就能看明白。下面是源代码。

<code class="hljs vbnet"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Private</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span> Command1_Click()
MSComm1.Output = <span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string">"1"</span></span></span></span>
<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">End</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span>

<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Private</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span> Command2_Click()
MSComm1.Output = <span class="hljs-string"><span class="hljs-string"><span class="hljs-string"><span class="hljs-string">"0"</span></span></span></span>
<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">End</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span>
<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Private</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span> Form_Load()

    MSComm1.PortOpen = <span class="hljs-literal"><span class="hljs-literal"><span class="hljs-literal"><span class="hljs-literal">True</span></span></span></span> <span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-comment">'打开串口</span></span></span></span>

<span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">End</span></span></span></span> <span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword">Sub</span></span></span></span></code>

连接好arduino,启动远程控制,远程操作上位机软件,就可以控制小灯的亮灭。如此,即使我们在十万八千里外,远隔重洋,也能控制家里(天文台里)的一盏小灯的亮灭了。

attachment icon Video@2019_0419_105059.wmv 716.10KB WMV 43次下载 @2019_0419_105059.wmv

 

attachment icon 程序.exe 20.00KB EXE 45次下载

 

emmmm因吹斯听😂

[修改于 2 年前 - 2019-05-03 21:13:56]

radio
2年0个月前
1楼

1555645487167.jpg

 直接买个这种云台

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前
2楼
引用radio发表于1楼的内容
 直接买个这种云台

能否给一个连接或者搜索关键词?谢谢。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
radio
2年0个月前 修改于 2年0个月前
3楼
引用154454496发表于2楼的内容
能否给一个连接或者搜索关键词?谢谢。

303云台

相对专业的旋转器来说非常便宜,但缺点是没办法知道实际上转了多少度,需要额外加编码器之类的测量装置。。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前
4楼
引用radio发表于3楼的内容
303云台相对专业的旋转器来说非常便宜,但缺点是没办法知道实际上转了多少度,需要额外加编码器之类的测...

有意思,考虑一下选这玩意。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前 修改于 2年0个月前
5楼

进度更新2:在原程序的基础上加了一个文本框,一个按钮,可以在程序运行阶段改端口了。并且实现了对小灯状态的检测

代码:

<code class="hljs vbscript"><p>Private Sub Command1_Click()
<br>MSComm1.Output = "1"
<br>End Sub
<br>
<br>Private Sub Command2_Click()
<br>MSComm1.Output = "0"
<br>End Sub
<br>
<br>Private Sub Command3_Click()
<br>MSComm1.CommPort = Text1.Text
<br>If MSComm1.PortOpen = False Then
<br>MSComm1.PortOpen = True '打开串口
<br>End If
<br>End Sub
<br>
<br>Private Sub MSComm1_OnComm()
<br>Dim num As Integer
<br>num = 0
<br>num = CInt(MSComm1.Input)
<br>Form1.Caption = num
<br>If num = 1 Then
<br>Command1.BackColor = RGB(0, 255, 0)
<br>Command2.BackColor = RGB(255, 255, 255)
<br>Else
<br>Command1.BackColor = RGB(255, 255, 255)
<br>Command2.BackColor = RGB(255, 0, 0)
<br>End If
<br>End Sub
<br></p></code>


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
墨镜哈哈日记
2年0个月前
6楼

我感觉花生壳的东西稳定性欠佳,路由器绑了花生壳普通专业版的穿透,还没免费的ngrok来的稳定,up能力可以的话,可以买个便宜服务器开ngrok

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前
7楼
引用墨镜哈哈日记发表于6楼的内容
我感觉花生壳的东西稳定性欠佳,路由器绑了花生壳普通专业版的穿透,还没免费的ngrok来的稳定,up能...

先这么搞着吧,其实在调试中已经出现过死机了,如果出现在正式的观测任务甚至发射跟踪中那么不可设想。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
信仰は儚き人間の為に
2年0个月前
8楼

荒郊野岭里的网络连接问题怎么解决

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前
9楼

@信仰は儚き人間の為に 其实不是荒郊野岭,在一个小村子里,架设点附近500米左右有一家全羊店,有WiFi,我单独架一口反射面接受WiFi信号。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
2年0个月前
10楼

直接买个上海合宙的4G dtu,用中国移动或者阿里云的mqtt服务器进行转发,成本200元,稳定性超高,工业级物联网监控就是用这种方案的.

不用拉通信线,有手机信号的地方就可以.

手机卡用中国移动的物联网流量卡一个月100m一年30元

+5
科创币
虎哥
2019-04-25
这就是有帮助的发言。
+0.5
科创币
154454496
2019-04-26
请上受我一拜!
回复
评论
6
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
2年0个月前
11楼

动态域名稳定性极低,正规项目没有用的,阿里云mqtt服务器有免费额度一个月100w条,应该够你用的了

回复
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
2年0个月前
12楼

如果为了省钱就自己买GPRS的模块画板,成本全套最多70块,.....

现在GPRS模块中国移动/合宙的也就16块

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
2年0个月前 修改于 2年0个月前
13楼

@牛逼大仙 谢谢,我个人办不到,@FanceStudio 中考完再考虑这套方案(或其它类似的)。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
2年0个月前
14楼

对望远镜的话可以用串口摄像头.....真正拍照可以用单反改制的专用拍照设备......

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
FanceStudio
1年11个月前
15楼
引用大仙发表于11楼的内容
动态域名稳定性极低,正规项目没有用的,阿里云mqtt服务器有免费额度一个月100w条,应该够你用的了

我想问一下,哪里能找到免费额度呢?我貌似没找到呀QaQ

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
1年11个月前
16楼

经过今天下午与@怪咖0121@FanceStudio的探讨,还是老老实实找个高可靠性的远程联机吧……我们的程序员小哥哥也办不了啊

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
3212005600
1年11个月前
17楼

加油我看好你

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
1年11个月前
18楼

@FanceStudiohttps://help.aliyun.com/document_detail/91978.html?spm=a2c4g.11174283.6.548.3a8b1668jZg9kX

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Resbi
1年11个月前
19楼

加油!这个项目非常的吸引人!

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
1年11个月前
20楼

https://www.docin.com/p-1799989857.html

https://www.docin.com/p-1663370092.html

放两个高频头的技术标准

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
vcijj
1年10个月前
21楼

这个想法很不错,不过中学生时间确实比较紧张啊,如果要远程控制的话比较推荐贝壳物联,一些控制方面的做的挺不错的,话说需要控制什么呢,只是主动打开开始测量的话比较简易,想要有数据反馈就很麻烦了

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
1年10个月前
22楼

重大进展,首次实现家中-邢家东庄村观测站的远程控制,明后天有时间具体汇报到这一层楼中

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496作者
1年8个月前
23楼

https://www.kechuang.org/t/84429

通信协议

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

154454496
进士 机友
文章
100
回复
1180
学术分
-1
2017/02/06注册,2 小时前活动

起来!不愿做奴隶的人们!把我们的血肉筑成我们新的长城! 中华民族到了最危险的时候, 每个人被迫着发出最后的吼声。 起来!起来!起来! 我们万众一心, 冒着敌人的炮火,前进! 冒着敌人的炮火,前进! 前进!前进、进!

%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}