使用自定义协议控制外部设备

从机器视觉大师6.3版开始,可以使用自定义协议与外部设备进行通信,实现读取外部仪器数据,控制PLC输出等任务。自定义协议为ASCII文本模式,使用串口(RS232, 485, 422均可)通信。

  

自定义协议基本语法

在工控行业中,大部分串口模块在通信的时候,一般都是发送一条指令,然后读取响应。指令语法中都包含读取或设置功能地址(也叫控制点,线圈之类)或具体数据(这些数据可能是电流值或电平值),其它部分基本在通信过程中不变。

根据这个现象和规则,引入两个转义字符,以原始的指令为基础,创建一条新的指令格式,通过中间层解释执行,达到实现任意自定义协议模块通信的目的。

1. 地址转义字符@

如果指令需要指定地址,通过字符@进行转义。其语法如下:

     @[1..F]   

以字符@开头,后面接一个16进制的字符,表示该地址的长度,最大长度为15

@3,当前地址设置为5, 那么转义后的指令为005

假设原来的一个外部设备的读取指令为TC0010#, 该指令读取终端设备第一路的输入状态(有输入或无输入), 001表示地址,最大长度为3,那么新的指令将为TC@30#

如果@只是一个普通的字符,不是转义字符,那么需要在其前面加一个@, @@

2. 数据转义字符$

如果指令需要获取其中的数据,或写入数据,通过字符$进行转义。其语法如下:

     $[1..F]

以字符$开头,后面接一个16进制的字符,表示该数据的长度,最大长度为15

$1,当前的数据长度为1; $b,表示当前数据长度为11

假设上节所述读取指令TC0010#, 其实际的响应指令为TD10# , 1表示地址,地址长度为10表示数据,表示为无输入(低电平),数据长度为1。新的指令将为TD@1$1#

如果$只是一个普通的字符,不是转义字符,那么需要在其前面加一个$, $$

请求指令(发送)和响应指令的地址长度和数据长度都不一定相同,如果一个指令中不需要地址或数据,就直接使用原来的指令格式即可。如

       awo0关闭一个模块的输出状态。

该指令不需要输入地址和获取数据,因此,只需要直接将awo0作为新指令即可。 (当然,在机器视觉大师里面,这条指令基本上没有什么用途的。)

 

3. 小数精度

数据类型为字或双字,浮点时,可以设置当前浮点数据的精度。转换后的数据将处理指定的数据精度。如,当前数据为1234,假设指定小数精度为2,则改数值表示为12.34

自定义协议的支持数值和地址均为10进制。本文所述的地址为一个外部模块内部的控制单元地址、线圈或输入输出点等 ,非模块本身的地址(如485,422中的设备地址)。

 

设置基本串口通信

点击”模式->设置菜单,出现选项窗口, 切换到输入输出页,将外部设备设置为”自定义协议模块,如下图:

 

选择当前系统里面分配给外部模块的端口号,笔者的本机分配的端口号为”COM3”。

 

点击右边”...”按钮,弹出串口通信参数窗口,设置合适的参数,如下图。

 

 

根据外部协议重新创建指令

1. 创建新读指令

某一个扩展8路输入输出模块的读指令定义如下:

TC0010#

001表示第1路,后面0表示数据,在该指令中无实际意义。该指令实现读取第1路当前输入信号的功能,返回0表示无输入,返回1表示有输入。

如果通行正常,第一路无输入,模块将返回

    TD10#

如果有输入,模块将返回

    TD11#

也即TD后面的1表示第1路,紧接着的0(或1)表示返回的数据。

在”选项”窗口的”输入输出”页,点击”相机或startup触发”的”自定义”按钮,弹出”自动义串口协议”,如下图:

 

根据原指令的格式,请求地址长度为3,返回地址长度为1,返回的数据长度为1。因此在请求框里面输入”TC@30#”, 响应框里面输入”TD@1$1#”,由于都是数据为整数,设置小数精度为0, 该模块无需结束字符,结束符设置为无。地址范围从1到4。

 

2. 创建新的写指令

下面是8路输入输出模块的写指令定义:

TA0010#

001表示第1路,后面0表示数据,表示无输出;如果为1表示有输出。

如果通行正常,模块将返回TB10#(无输出)或TB11#(有输出)

  

在”选项”窗口的”输入输出”页,点击”结果输出”栏的”自定义”按钮,弹出”自动义串口协议”,如下图:

 

根据原指令的格式,请求指令的地址长度为3,返回地址长度为1,返回的数据长度为1。因此在请求框里面输入”TA@3$1#”, 响应框里面输入”TB@1$1#”。由于数据为整数,设置小数精度为0, 该模块无需结束字符,结束符设置为无。地址范围从1到4。

 

在脚本语言中使用

假设读者已经熟悉如何在机器视觉大师的”编辑脚本”窗口进行编程,如果不太熟悉,请重新阅读C13等章节。限于篇幅,此处不再赘述。

在”编辑脚本”窗口里面,为”检测完成后”事件输入以下脚本:

ret, data = cscm.read(1, 3)

从上节生成的读指令编号为1,故第1个参数为1,第2个表示第3路。

if ret then

   trace(data)

else

   trace("error occurred")

end

如果通信成功,使用trace命令输出数据到调试窗口, 否则输出错误信息。

下面是对写指令测试的脚本:

ret  = cscm.write(2,2, 1)

从上节生成的写指令编号为2,故第1个参数为2,第2个表示第2路,第3个参数表示有输出(1)。

if ret then

   trace("writen successfully!")

else

   trace("error occurred")

end

使用trace命令输出通信状态到调试窗口。


最新版多多摄像头大师(机器视觉大师)下载地址:http://www.hdy.net.cn/softshare/ddcam.htm

技术交流QQ群: 295860595  该群文件空间即时更新多多摄像头大师最新版本,下载速度更快


猜你喜欢

转载自blog.csdn.net/buffi/article/details/80560761