CS机器人30020端口使用
1. 简介
● def脚本【jiǎo běn】为👩主程【chéng】序🥘脚本【jiǎo běn】🛣,一次仅⛏支持一😠个【gè】def脚本【jiǎo běn】🛣运行【yùn háng】,如果在第一个【gè】def脚本【jiǎo běn】🛣运行【yùn háng】过程【chéng】🥟中,下【xià】 发第二个【gè】def脚本【jiǎo běn】🛣,则会强🏩制停止🏊第一个【gè】运行【yùn háng】中的【de】def脚本【jiǎo běn】🛣,去执行【qù zhí háng】新收到【xīn shōu dào】的【de】def脚本【jiǎo běn】🛣。
● sec脚本可以与🛩def脚本同【jiǎo běn tóng】时运行【shí yùn háng】,不会导🍇致def脚本停止🚍,但【dàn】sec脚本不🍲支持运🗄动指令🥤,并且不【bìng qiě bú】 允许运【yǔn xǔ yùn】行耗时指令(如【rú】sleep、串口👵、socket的超时操作等),有一定【yǒu yī dìng】的限制。
● 由于【yóu yú】def脚本🏟与sec脚本的⛏定义🥖,导致目前的python运行过【yùn háng guò】程中【chéng zhōng】,无法实【wú fǎ shí】现一些动态的⏯脚本🏟插队【chā duì】➰ 运行,比如用户在自己的上位机程序【xù】♉,实时计💵算出一【suàn chū yī】🎙些运行点位脚本🏟,用户无【yòng hù wú】法在程【fǎ zài chéng】序【xù】♉运行 的过程🍀中,将一些➖实时计💵算的脚本🏟插队【chā duì】➰到当前【dào dāng qián】运行的任务当【rèn wù dāng】🧟中。存在一【cún zài yī】定的使【dìng de shǐ】✌用限制。
● 针对上🥠述需求🕋,CS控制软【kòng zhì ruǎn】件开发【jiàn kāi fā】了Interpreter Mode(解释器【jiě shì qì】模式💈)功能【gōng néng】💃,也就是30020接口🍯,用于在一定的条件下,实现用🐑户脚本的插队【de chā duì】运行【yùn háng】。
● 解释器【jiě shì qì】🐔模式的【mó shì de】使用🚼,需要更新至2.11及以上的版本【de bǎn běn】💊。
2. 操作流程
● 解释器模式脚本命令
1. 解释器功能
系统进入解释【rù jiě shì】🏁器模式【qì mó shì】后【hòu】🌃,允许编程人员在任务运行时发送并插队运【chā duì yùn】行脚本💈语句,只需要【zhī xū yào】脚本语【jiǎo běn yǔ】👫 句为有【jù wéi yǒu】效的python语句即【yǔ jù jí】可⏰,用户可🗺以将脚【yǐ jiāng jiǎo】本语【běn yǔ】👫句通过30020端口,发送到🔏控制器【kòng zhì qì】🖖,控制器【kòng zhì qì】🖖解 收之后【shōu zhī hòu】🌃,会根据当前的【dāng qián de】🏪状态🚦,对语句进行编【jìn háng biān】译运行【yì yùn háng】。发送到🔏30020端口的脚本语【jiǎo běn yǔ】👫句,会已队🗞列 的方式存储在控制软🐉件内部,并按顺⛳序执行,脚本语【jiǎo běn yǔ】👫句必须为单行语句,并以\n作为结【zuò wéi jié】🍘束符, 如📿 set_tcp([0,0,0,0,0,0])\n
脚本语句参考CS脚本手册
2. interpreter_mode(clearQueueOnEnter = True, clearOnEnd = True)
clearQueueOnEnter:为💱 True 时【shí】,会在进🎾入解释📆器模式时【shí】,清除所有进入之前收【zhī qián shōu】到的脚 本【běn】👸 队列。
clearOnEnd:为【wéi】 True 时🏨,会在退【huì zài tuì】出解释♉器模式【qì mó shì】时🏨,清除所🧟有还未执行的【zhí háng de】脚本队列中的脚 本内容。
该函数用于是任务进入解释【rù jiě shì】🚟器模式🕖,其为阻【qí wéi zǔ】✈塞函数【sāi hán shù】
30020端口的🦗解释器模式【mó shì】,是通过🕸30001端口发【duān kǒu fā】送解释器脚本【qì jiǎo běn】🆎命令触发。
30001端口详情🏡,请参考💂CS用户手【yòng hù shǒu】册【cè】。
例【lì】🍲:30001 端口调用【yòng】,需使用【yòng】 def 脚本🐚,采用【yòng】💼 python 格式【gé shì】🎆,要注意格式【gé shì】🎆(缩进,大小写【dà xiǎo xiě】 等)
def a():
interpreter_mode(clearQueueOnEnter = True, clearOnEnd = True)
end
3. end_interpreter()
该函数【gāi hán shù】📨用于关闭任务【bì rèn wù】🚔的解释器⛳模式,此时阻🍻塞的 interpreter_mode 函数会🏂退出【tuì chū】,该函数【gāi hán shù】📨可 以在 30001 端口调【duān kǒu diào】用(sec 和 def 脚本效【jiǎo běn xiào】果相同),程序立即停止【jí tíng zhǐ】🆓并退出【bìng tuì chū】解释器⛳模式。
也可以【yě kě yǐ】🥌在 30020 中使用,发送到【fā sòng dào】🛷解释器【jiě shì qì】模式👱中,在脚本❓队列中等待调【děng dài diào】用,队列运行到该【háng dào gāi】命 令后退【lìng hòu tuì】🦖出解释器【jiě shì qì】模式👱。
4. clear_interpreter()
该函数🚰用🤛于清除解释器【jiě shì qì】脚【jiǎo】本队列😖,可以在【kě yǐ zài】 30001 端口使用🤛(sec 脚【jiǎo】本),不建议🐷用🤛 def 脚【jiǎo】 本,def 脚本执【jiǎo běn zhí】🆙行程序会立即【huì lì jí】停止并【tíng zhǐ bìng】退出解释器【jiě shì qì】模式【shì】🔤。
也可以🤴在😯 30020 中使用【zhōng shǐ yòng】🔽,发送到【fā sòng dào】解释器模式中, 在脚本🎌队列中【duì liè zhōng】等待调用【yòng】🔽,调用【yòng】🔽后【hòu】,会将🏷 该函数执行前接收【jiē shōu】到的脚本队列清除🔋,在😯其之后【hòu】接收【jiē shōu】🌵到的脚本则不【běn zé bú】受影响【shòu yǐng xiǎng】。
● 解释器模式回复
1. 解释器模式接😖收到可执行的👸脚本语🔵句后【jù hòu】,将会通过返回以下格式信息【shì xìn xī】,告知客【gào zhī kè】户端【hù duān】📬。
ack::
id为接受的语句【de yǔ jù】被分配【bèi fèn pèi】的唯一【de wéi yī】id,后续的【hòu xù de】🕣一些状态命令字返回🥥值,会以该🕥id信息返🤝回🥥。
2. 如果任【rú guǒ rèn】🤚务未处【wù wèi chù】于运行【yú yùn háng】状态,或脚本【huò jiǎo běn】语句发🛵生编译错误或👬脚本队列达到上限等等各种异常原【yì cháng yuán】📫因导致🤪接受的脚本没有被正【yǒu bèi zhèng】常的压【cháng de yā】入解释🕗器队列,解释器🏈会返回命令抛弃信息♊以及抛【yǐ jí pāo】弃原因,格式如下【xià】🔫。
discard::
3. 编译错误:
触发原💫因:一般为【yī bān wéi】脚本格式错误【shì cuò wù】🔪,需要检查确保下发的【xià fā de】脚本格式是否【shì shì fǒu】正常的🌎python格式的♌ 代码段
返回报【fǎn huí bào】文信息🚳:discard: Compile error::
4. 任务状态错误:
触发原因:当前任务未处于运行状态
返回报文信息【wén xìn xī】👊:discard: Task is in an invalid state:
5. 脚本队列的长度超限:
触发原【chù fā yuán】因:当前脚本队列Ⓜ长度超过最大🎙值【zhí】(目前最【mù qián zuì】🌊大值【zhí】为2000)
返回报【fǎn huí bào】💨文信息:discard: Too many interpreted messages:
6. 执行解【zhí háng jiě】释器前🐖队列清除【chú】🚰:
触发原【chù fā yuán】因🧝:由于clearQueueOnEnter参数设👠置为True,再打开📇解释器【jiě shì qì】模式之前发送🎌到解释【dào jiě shì】器队列的脚本【de jiǎo běn】💼,会在打开时【kāi shí】(即调用interpreter_mode脚本【jiǎo běn】)进行🔺discard。
返回报【fǎn huí bào】文信息🍵:discard: Cleaned up before interpretation:
7. 执行解【zhí háng jiě】📲释器后🎅队列清除【chú】:
触发原【chù fā yuán】🌈因:由于clearOnEnd参数设【cān shù shè】置为True,再结束🚹解释器【jiě shì qì】模式后,解释器【jiě shì qì】队列中🐸已有的【yǐ yǒu de】脚本会【jiǎo běn huì】🥏在结束时【shí】(即调用💵end_interpreter脚本)进行🥤discard。
返回报文信息【wén xìn xī】☔:discard: Cleaned up after end:
8. 执行队列清除操作:
触发原🍹因【yīn】:由于执行clear_interpreter脚本👑discard掉的脚【diào de jiǎo】本👑队列中的脚【de jiǎo】💡本。
返回报【fǎn huí bào】😴文信息:discard: Cleaned up:
● 解释器模式关键字命令
解释器模式的关键字命令,为非【wéi fēi】😞python脚本函数【shù】🛴,此类命令会在【lìng huì zài】💕接收到【jiē shōu dào】💐后【hòu】,马上被😇执行,不会进🖕入脚本【rù jiǎo běn】队列等待执行。
skipbuffer该命令可以让脚本队【jiǎo běn duì】列跳过🌶已经接收到【shōu dào】🕖,但还未执行的😲所有脚【suǒ yǒu jiǎo】本命令(正在执行的😲命令不【mìng lìng bú】会结束,会继续【huì jì xù】📟正常运行到命🛏令结束【lìng jié shù】)。
● 解释器模式状态命令
1. statelastexecuted 命令【mìng lìng】🚽
该命令【gāi mìng lìng】🐗会返回🕚最后执【zuì hòu zhí】行🙃过(或正在执行🙃)的命令id,返回格式如下【shì rú xià】:
state:: statelastexecuted
2. statelastinterpreted 命令【mìng lìng】🛥
该命令【lìng】会返回🥂最新解收的已📛经解析完成的【wán chéng de】🌚脚本命令【lìng】id,返回格【fǎn huí gé】式如下:
state:: statelastinterpreted
3. statelastcleared 命令【mìng lìng】🤸
该命令会返回🔳最后的【zuì hòu de】💋被清除(调用clear_interpreter或解释【huò jiě shì】器模式退出【tuì chū】)的命令🤟id,返回格式如下【shì rú xià】🥓:
state:: statelastcleared
4. stateunexecuted 命令【mìng lìng】🆕
该命令💪会返回当前队【dāng qián duì】列中还未执行的脚本命令(已♌skipbuffer的命令♎不会计数在内【shù zài nèi】),返回格【fǎn huí gé】式如下【shì rú xià】😵:
state: <#unexecuted>: stateunexecuted
5. state 命令
该命令会返回🤠当前是否处于【fǒu chù yú】🐪解释器【jiě shì qì】模式,返回格🎑式如下【shì rú xià】:
state: 0: running: state
state: 0: stopped: state
● 示例
1.将机器人打到远程模式

2. 用通讯助手创【zhù shǒu chuàng】建一个 30001端口的🐦客户端📀,连接机😆器人并发送脚【fā sòng jiǎo】本使机器人进🐌入解释【rù jiě shì】器模式【qì mó shì】

3.机器人【jī qì rén】进入解🕶释器模【shì qì mó】式,示教器显示运🗒行中【háng zhōng】,如下图🖖

4. 用通讯【yòng tōng xùn】🦓助手创👬建一个30020端口的【duān kǒu de】客户端

5.通过 30020 端口发送脚本【sòng jiǎo běn】🏿使得机🏆器人按先后顺序依次执行发【zhí háng fā】送的脚【sòng de jiǎo】🏺本🏿

6. 发送成功后,收到来🔕自机器【zì jī qì】人的反【rén de fǎn】馈🎖

7.参考【cān kǎo】⏺CS脚本手【jiǎo běn shǒu】册【cè】🍀,依次发送指令给机器☔人,机器人将按顺🚓序依次执行【zhí háng】

3. 常见问题解答
1. 解释器【jiě shì qì】模式中💇创建的🍃线程【xiàn chéng】💪,不会再解释器【jiě shì qì】模式推出后【chū hòu】,自动关闭【bì】,使用时【shǐ yòng shí】📩,请自主管理好线程【xiàn chéng】💪状态🔠。
2. 运行【háng】耗时脚本【shí jiǎo běn】(如移动🕝指令🛎),会完整🕝的运动结束后【jié shù hòu】,才可以🔨自动退出😎,中途即使调用了【le】end_interpreter()命令【mìng lìng】,也不会🚷强制停止耗时【zhǐ hào shí】脚本运【jiǎo běn yùn】行【háng】,除非使🎺用30001以def函数的形式发送【sòng】🚗。
3. 解释器🥤脚本🚤队列数量上限目前为2000条,脚本🚤队列数量超过该🍒数量时【shù liàng shí】🕤,再次添【zài cì tiān】加新的解释器🥤脚本🚤,会返回【huì fǎn huí】🍖discard信息,并抛弃【bìng pāo qì】💲新添加【xīn tiān jiā】的脚本【de jiǎo běn】🚤