从通道中读取数据。
cread从加载的ld_ext_obj类型的外部模块读取数据。
无法从ld_ext_fct类型的外部模块或命令通道读取。
应用的例子: 在krc1和外围数据(pc, 智能传感器...) 数据交换(读语句)。
int类型的数据必须是little endian格式,并且前面必须有一个符号。
real类型的数据必须是ieee 754标准格式的32位表示形式。
cread (handle, state, mode, timeout, offset, format, var1 )
“cread”语句用于从打开的通道中读取数据。在这有两个区别::
主动读入
程序请求通过通道进行输入。通道驱动器提出输入请求并将接受到的数据作为结果返回到cread语句 。
被动读入
预先确定的变量(int$data_ser1orint$data_ser2), 未被请求的数据到达后通过增加通道驱动器,每个通道都是这样的。当执行热启动或当打开/关闭通道时变量初始化为0。在系统等待读入请求的反馈信号方面也是有差别的:绝对的或有条件的。绝对的意思是系统等待直到通道给出请求的数据。在有条件的情况下,系统检查数据是否有效。
handle
int
由“copen”转移变量。注意:变量“$cmd ”将被拒绝
state
state_t
类型:state_t
自动返回cread的状态
mode
modus_t
“modus_t”是列举类型,它有与下列“cread”有关的值:
abs 激活读入通道。函数等待到通道产生一个可用的数据块或等待到“timeout”失败。
cond 未被请求的通道读入。
seq 从以前被请求使用“abs ”或“cond ”或作为 结果返回“cwrite”的字节补偿读入完成了的数据块
timeout
real
参数“timout”可被用于指定时间,在等待数据块失败之后。
timeout的值0.0允许无止境的等待。.
一个值大于60 或是为负值,则数值是无效的。与系统有关的错误在等待时间内是是固有的。
offset
int
变量“offset”用于指定被承认的数据中的字节数,在系统开始读入之前。
如果开始就读入,偏移量t必须设为0 (原点)。
“cread”语句不能分配所有被程序承认的数据变量,偏移量指定已经分配的字符数。
format
char[ ]
变量“format”的类型“char[ ] ”( 文字讯息) 包含产生了的文本格式。
变量结构主要符合“c ”语言 “fprintf”功能的格式。
var
变量符合“format”。
如果操作不是来于“copen”语句程序是被传送的 “cread” 语句或通道已经又再关闭,承认信息“invalidhandle” 被显示。
其它方式的规定或非初始化的变量导致一个被变量“status ”发现错误 。如果读“abs ”“cond ”成功,那么数据块的数据是先前被承认的,就像他们完全的读出。
文本是按照格式规定的程序段返回的。值决定被分配的适当的变量,系统检查值之否在任何区域有效。“变量fomat”转换支持由“kernighan/ritchie”指定的格式规定(c 语言1978),o,p,n,u和【list 】出外。
字符长度规范“h”和“l”不能使用。
只有9个格式参数可用于指定“cread”语句。如果几个变量是格式化可用到的,则必须在“# seq ”模式下读入。
系统不能区别大小写字符。在发生一个错误后读入失败( 不符合格式或无效的值) 。
转换字符“r”,当读入任何一个字节指定的字符长度次序 ( 与写入类似,例如“%2.5r”)或这所有字节在结束信息之前,他也同样传入。
不像其它格式,单独字节的读入必须被“%1r”明确规定。.
没有用“%c格式”指定宽度,这样的格式是不合格的。字节能被分配到int ,real ,char ,bool ,enum数据类型的变量或这种类型的一维数组。
假定整数数据类型出现在“little endian ”格式中,而且是有正负之分的。
real 的数据类型在ieee754 标准格式中用32位表示。
任何不等于0(zero) 的值可以被turn 转换。
系统控制值是否被enum值允许。如果不是,读失败。enum开始为1 。
如果没有足够的格式数据,(例如%2.5r,但只有7位), 没有数据从格式读出,cread语句失败。被忽略的数据依然被read 读取。.
变量的读就像变量装入一些字节一样。直到读准备好后重新启动。如果数组足够大但是数字用到的字节不是要素排列的倍数,那么多余的字节列在格式后或在下一个cread语句的左面读取。
通过“cread”调用下列更多的读取。字节数“%s” 或“%r 的格式指定首先读取实际上被状态变量返回的格式行。
所有其他的字长度不是确定的。因此用“%s”或“%r”格式只是一次“cread”调用格式行和重复。
如果“%s”或“%r”格式不在已经成功读取的格式之中( 看“hits”的变量状态) ,“length” 的值在语句中不变。
使用中断读取
监控系统变量以确定数据是否可用于
读数:
$外部模块ld_ext_objx的data_ld_ext_objx
当接收到数据时,通道驱动器会增加系统变量。然后可以使用中断程序读取数据。
当执行热重启或打开或关闭通道时,变量将用0初始化。如果“保留数据”选项被激活,则变量不会重置。
带中断的示例
带有中断声明的主程序:
interrupt decl 10 when $data_ld_ext_obj20 do obj_int ()
interrupt on 10
...
中断程序:
def obj_int ()
decl modus_t mode
...
interrupt off 10
while ($data_ld_ext_obj20)
...
mode=#cond
offset=0
cread (handle,..., mode,...)
...
endwhile
interrupt on 10
end
2019年中国电信将重点抓好六个方面的工作来推进网络高质量的发展
三星Galaxy S21全系售价曝光
好产品要有好口碑!荣耀V40用户评价视频发布,好评如潮!
盘点全球物联网看点
CES 2020:三星推出全新家电品类,三款系列冰箱产品令人眼前一亮
KUKA机器人高级编程CREAD的用法详解
AMD EPYC处理器以更大的规模驱动云原生应用程序
如何解决STM32芯片Flash写保护的问题
航空工业沈阳所采用双线作战方案已完成了全线复工工作
企业VR全景线上虚拟展厅的功能及优势的介绍
汽车防盗报警监控系统的设计
SystemVerilog设计语言
自激震荡的产生及相位补偿方法
丰田高端自动驾驶商用车先用,个人使用在后
功率因数校正原理及相关IC
长时间戴耳机发炎发炎!耳机佩戴不科学小心神经性耳聋!
什么是绝缘电阻?为什么需要做绝缘电阻测试试验?
苹果或将扩大其OLED面板供应商名单,京东方或将分一杯羹
多层陶瓷电容(MLCC)的漏电原因
能变风,更舒适!Leader 风幕空调获年度行业产品奖