在做1500带1200和200Smart的项目时,又用到曲线打印.因此拾起原来的程序看看,陆续也有新入坑的人问起微打的曲线打印.原程序在打印机打印实时曲线的12楼,截取变量打印的关键片段注释.
(一)手册解析:
1:纸区坐标系矩阵行参数:发送区除去包头包尾校验等纯数据字节Nx的D0位到D7位共8行;Nx==N1,N2到Ni共i列的内容;每个实时数据对应的一个字节地址是Nx,其中x==实时数据(1<=x<=i),即每个采样数据对应着一个x和一个时序行数.
2:由上可知Nx是第x列的一个字节,它的8个布尔量点对应的矩阵坐标依次是(1,x);(2,x);(3,x);(4,x);(5,x);(6,x);(7,x);(8,x);走纸时按时间顺序依次走出来,某个布尔量值==1就是该点要涂成黑色,==0就是纸的颜色不变,如果这个字节值是2#11111111则该字节走出来的是一条完整的直线,列值大小对应是x==实时数据;如果这个字节值是2#01010101则该字节走出来的是均匀的间断线;如果这个字节值是2#00000000则该字节走出来的是无内容的空白白纸
3:开始时行与行的间距设置成最紧密的值==0;
4:例如发给打印机除包头/包尾/校验后的纯数据区地址是字节 :VB0-VB99;
5:此时打印机会把它整体看成是8行,100列的800个布尔量点矩阵网格点,算法判断出每个矩阵网格点究竟是0还是1就能组成连续的图形或曲线;
6:走纸时先打印第一行然后第二行直至第八行结束.
(二)算法总结:
1:每个布尔量点是0是1的判断算法是:通过左移字节和发送区字节Nx循环地做或运算得到,x==实时数据.
2:最小失真的分辨率就是两个紧挨着的实时数据的缩放值大于矩阵方格的对角线长度,就会出现断续感!这个要求矩阵邻接点里面的实时数据最大相差不能超过±1.
3:根据缩放好的实时数据偏移地找到对应的发送区字节地址Nx,找到矩阵的列数==x,偏移量的大小x==实时数据;
4:把该列地址对应的字节内容取出来(这个字节有8个布尔量位,对应8行,第一次循环时的第一行是字节第0位参与或运算)和左移循环字节(该字节的初始化值是2#00000001)做字节或运算,把对应网格点的布尔量值或运算成1;
5:以上几步先找列数,再找行数,就可以把该列,行对应的的布尔量内容涂成1即涂成黑色了;
6:除了上面这些,这个算法还可以完成动态的在PLC的状态监控表内动态实现二次元网格图刷新,点阵LED动态刷新显示等功能,而且它也适用于矩阵式音乐喷泉控制,舞台灯光控制,溅射式Projet阵列喷头3D打印等,因此该算法有一定的普适性.有空用它做个状态表"点阵LED动态刷新"贴在帖子里......
(三)配图说明:
1厂家说明

2程序注释
