楼主最近还看过
回复内容:
对: 刘岩利 galil本身的通讯协议完全开放,无论您在任何平台上开... 内容的回复!
刘工:
你好,我这边环境是这样的galil连接马达,马达带动病床水平和垂直移动。目前
按照你说的指令以ascii文本的形式(最后加上回车)通过网络tcp/IP(ip:192.168.1.111端口23)发给galil 已经可以使床水平动了。
上位机发送的:COMMAND="HOME"(回车换行)
galil响应: : //一个分号,没有返回更多的信息,
见截图
但是用galilTool工具可以返回更多的信息,见截图
我急切需要根据这些具体的信息来判断本次请求是否操作成功(上图红色箭头所指的内容),请问刘工,这些信息通过什么途径可以获取(arm平台无法调用库文件的),还是这些信息是通过其他网络端口获取呢?感谢
看不清楚你程序的完整内容,所以不能准确的分析,只能大致的猜测原因,可能是通讯HANDLE的问题。
对于以太网通讯来说,硬件上的一根网线,软件上可以对应很多不同的HANDLE,控制器支持6个HANDLE,内部用字母A-F来标示。同时,串口也被分配了一个标示字母 S。
控制器街道外部的指令时,从那个HANDLE接收的指令,就自动从哪个HANDLE反馈。
在控制器上的程序中,用MG指令输出信息,需要指定通过哪个HANDLE发出,如果在MG指令中没有明确指定,则使用CF指令指定的HANDLE。如果您的软件不是用这个HANDLE和控制器建立的连接,那么就收不到通过这个HANDLE发出的信息。
一般来说,每个软件通过网口和控制器建立连接,会占用一个空闲的HANDLE,依次使用A、B、C、D、E、F。galiltools软件会占用两个handle。
从您的图片上可以以看出,galiltools使用的是D、E两个HANDLE。这说明,在GALILTOOLS连接到控制器时,A、B、C都应该被其它软件占用了,没有放开。
TH指令可以查询当前控制器上目前6个HANDLE的连接情况,向控制器发送WH指令,可以查询当前使用的HANDLE的编号。
在控制器上程序中增加一段用来设置CF的小程序。外部控制器可DMC建立网络连接后,在开始正式工作前,先用WH查询当前使用的HANDLE编号,把这个信息发给控制器,让控制器设置好输出信息所用的HANDLE。确保外部控制器能收到信息。
回复内容:
对: 刘岩利 看不清楚你程序的完整内容,所以不能准确的分析,只能大致... 内容的回复!
经过测试发现MG CMDNOW{S}," INITIATED“,MG CMDNOW{S}," INITIATED",MG CMDNOW{S}," COMPLETED"这些信息是通过UDP协议发送出来的(我是通过TH指令才知道的)。电脑做UDP 服务端,galil做UDP客户端。这里有一个问题如何把电脑的ip,端口告诉galil,以及galil怎么连接到UDP服务端的问题(指令依次该怎么发送)。按照您的解释,我用galilTool测试,并监控网络TCP/IP,日志如下:(为了方便看日志,修改-> 表示电脑发送内容),通过这个日志您可能发现该发什么指令,使galil怎么连接上UDP服务端。
十六进制 ascii码
-> 0D .
00000000 3A :
-> 4D 47 5F 54 4D 0D MG_TM.
00000000 20 31 30 30 30 2E 30 30 30 30 0D 0A 3A 1000.00 00..:
-> 0D .
00000000 3A :
-> 43 57 31 0D CW1.
00000000 3A :
-> 12 16 0D ...
00000000 44 4D 43 33 30 30 31 30 20 52 65 76 20 31 2E 32 DMC30010 Rev 1.2
00000010 67 0D 0A 3A g..:
-> 51 5A 0D QZ.
00000000 20 31 2C 20 31 38 2C 20 31 36 2C 20 33 36 0D 0A 1, 18, 16, 36..
00000010 3A :
-> 4D 47 5F 41 51 31 7B 5A 31 30 7D 0D MG_AQ1{Z 10}.
00000000 20 30 0D 0A 3A 0..:
-> 4D 47 5F 42 4E 7B 5A 31 30 7D 0D MG_BN{Z1 0}.
00000000 20 38 30 32 30 0D 0A 3A 8020..:
-> 57 48 0D WH.
00000000 49 48 42 0D 0A 3A IHB..:
-> 4D 47 5F 49 48 41 31 0D MG_IHA1.
00000000 20 31 32 38 34 37 2E 30 30 30 30 0D 0A 3A 12847.0 000..:
-> 4D 47 5F 49 48 42 31 0D MG_IHB1.
00000000 20 31 33 30 32 36 2E 30 30 30 30 0D 0A 3A 13026.0 000..:(TCP/IP服务端端口)
-> 4D 47 5F 49 48 43 31 0D MG_IHC1.
00000000 20 36 31 31 31 36 2E 30 30 30 30 0D 0A 3A 61116.0 000..:(UDP服务端端口)
-> 43 57 31 0D CW1.
00000000 3A :
00000000 45 49 2C 2C 32 0D EI,,2.
00000000 3A :
00000000 43 46 43 0D CFC.
00000000 3A :
00000000 44 52 2C 32 0D DR,2.
00000000 3A :
00000000 51 52 0D QR.
00000000 97 01 4A 00 26 B7 F7 00 00 00 01 05 00 00 00 00 ..J.&... ........
00000010 00 00 00 00 00 00 00 00 00 00 FF 01 00 00 00 40 ........ .......@
00000020 00 00 00 00 1F 00 38 00 6C 04 23 68 0B 00 23 68 ......8. l.#h..#h
00000030 0B 00 00 00 00 00 BD 04 01 00 00 00 00 00 3A FA ........ ......:.
00000040 FF FF 00 00 05 00 00 00 00 00 3A ........ ..:
00000000 5E 52 5E 56 0D ^R^V.
00000000 3F ?
00000000 54 43 31 0D TC1.
00000000 36 20 4E 75 6D 62 65 72 20 6F 75 74 20 6F 66 20 6 Number out of
00000010 72 61 6E 67 65 0D 0A 3A range..:
00000000 51 52 0D QR.
00000000 97 01 4A 00 DC B7 F7 00 00 00 00 05 00 00 00 00 ..J..... ........
00000010 00 00 00 00 00 00 00 00 00 00 FF 01 00 00 00 40 ........ .......@
00000020 00 00 00 00 1F 00 38 00 6C 04 23 68 0B 00 23 68 ......8. l.#h..#h
00000030 0B 00 00 00 00 00 BD 04 01 00 00 00 00 00 3A FA ........ ......:.
00000040 FF FF 00 00 05 00 00 00 00 00 3A ........ ..:
00000000 12 16 0D ...
00000000 44 4D 43 33 30 30 31 30 20 52 65 76 20 31 2E 32 DMC30010 Rev 1.2
00000010 67 0D 0A 3A g..:
00000000 12 16 0D ...
00000000 44 4D 43 33 30 30 31 30 20 52 65 76 20 31 2E 32 DMC30010 Rev 1.2
00000010 67 0D 0A 3A g..:
00000000 0D .
00000000 3A :
输入TH指令,发现IHC UDP PORT 60007 TO IP ADDRESS 192,168,1,120 P ORT 61116
//UDP 服务端192.168.1.120:61116端口,galil已经连接上UDP服务端
00000000 54 48 0D TH.
00000000 43 4F 4E 54 52 4F 4C 4C 45 52 20 49 50 20 41 44 CONTROLL ER IP AD
00000010 44 52 45 53 53 20 31 39 32 2C 31 36 38 2C 31 2C DRESS 19 2,168,1,
00000020 31 31 31 20 45 54 48 45 52 4E 45 54 20 41 44 44 111 ETHE RNET ADD
00000030 52 45 53 53 20 30 30 2D 35 30 2D 34 43 2D 34 30 RESS 00- 50-4C-40
00000040 2D 31 46 2D 35 34 0D 0A 49 48 41 20 54 43 50 20 -1F-54.. IHA TCP
00000050 50 4F 52 54 20 32 33 20 54 4F 20 49 50 20 41 44 PORT 23 TO IP AD
00000060 44 52 45 53 53 20 31 39 32 2C 31 36 38 2C 31 2C DRESS 19 2,168,1,
00000070 31 32 30 20 50 4F 52 54 20 31 32 38 34 37 0D 0A 120 PORT 12847..
00000080 49 48 42 20 54 43 50 20 50 4F 52 54 20 32 33 20 IHB TCP PORT 23
00000090 54 4F 20 49 50 20 41 44 44 52 45 53 53 20 31 39 TO IP AD DRESS 19
000000A0 32 2C 31 36 38 2C 31 2C 31 32 30 20 50 4F 52 54 2,168,1, 120 PORT
000000B0 20 31 33 30 32 36 0D 0A 49 48 43 20 55 44 50 20 13026.. IHC UDP
000000C0 50 4F 52 54 20 36 30 30 30 37 20 54 4F 20 49 50 PORT 600 07 TO IP
000000D0 20 41 44 44 52 45 53 53 20 31 39 32 2C 31 36 38 ADDRESS 192,168
000000E0 2C 31 2C 31 32 30 20 50 4F 52 54 20 36 31 31 31 ,1,120 P ORT 6111
000000F0 36 0D 0A 49 48 44 20 41 56 41 49 4C 41 42 4C 45 6..IHD A VAILABLE
00000100 20 0D 0A 49 48 45 20 41 56 41 49 4C 41 42 4C 45 ..IHE A VAILABLE
00000110 20 0D 0A 49 48 46 20 41 56 41 49 4C 41 42 4C 45 ..IHF A VAILABLE
00000120 20 0D 0A 3A ..:
00000000 4D 47 5F 49 48 43 31 0D MG_IHC1.
00000000 20 36 31 31 31 36 2E 30 30 30 30 0D 0A 3A 61116.0 000..:
00000000 45 49 2C 2C 2D 31 0D EI,,-1.
00000000 3A :
00000000 44 52 30 0D DR0.
00000000 3A :
回复内容:
对: martin415 回复内容:这些信息是通过UDP协议发送出来的(我是通过TH指令才知道的)。电脑做UDP 服务端,galil做UDP客户端。这里有一个问题如何把电脑的ip,端口告诉galil,以及galil怎么连接到UDP服务端的问题(指令依次该怎么发送)。
您不需要监视网络通讯日志的。只要在dmc-30011上的程序中增加几行依据外部输入的指令来设置CF就可以了。至于这个HANDLE是TCP还是UDP,其实无所谓的。
您的通讯软件在和dmc-30011建立了连接后,自然就建立了一个HANDLE,只要在通讯软件上用WH查出这个HANDLE在dmc-30011上的编号,然后用CF指令来指定所有程序中的MG指令从这个HANDLE输出就可以了。
谢谢刘工,我明白你的意思了。但是dmc-30011上的程序我不知道怎么写,是其他人负责写的。能否写下?
这个是肯定要在您现有的程序上修改的,而且需要您的那块 arm 板上的程序和 DMC-30011 上的程序配合。所以,我只能给您提供一个逻辑流程,无法给您提供具体的例程。
这个流程就是上面说的过的:
在 arm 板和 dmc-30011 建立了连接后,开始所有其它工作之前:
1、从 arm 板上向 dmc-30011 发送 WH 指令,查出当前使用的这个 HANDLE 在 dmc-30011 上的编号,
2、用 CF 指令来指定所有程序中的 MG 指令从这个 HANDLE 输出就可以了
3、向 dmc-30011 中发送 XQ 指令启动上面的程序,
接下来就是您原本的流程了。
在 DMD-30011 的程序中需要确认三点:
1、dmc-30011 上的程序中没有使用 CF 指令
否则,程序执行到这里会改变输出 HANDLE 的设置,那前面的 CF 指令就白发了。
2、dmc-30011 上的程序中,所有的 MG 指令没有使用 {En} 这样的符号
否则,该行信息不从 CF 指定的 HANDLE 发出,而是从 {En} 指定的 HANDLE 发出,ARM 板可能还会收不到。
3、dmc-30011上的程序中没有使用#AUTO这个标号
否则,ARM板上发出的 WH 和 CF 指令可能会被用户程序截获,而起不到相应的作用。
如果您觉得上面的方式太复杂以至于不可实施,那么有一个简单,但不一定可靠的方法,就是向DMC-30011发送指令CFA;BN,强制要求所有信息从上电后第一个连接的HANDLE发出。这样在多数情况下是可用的。但是上面三条中的前两条也是要注意的。