7 changed files with 1463 additions and 35 deletions
-
4.vscode/settings.json
-
2sdk
-
50testtools/config.js
-
1153testtools/index.html
-
154usrc/main.cpp
-
85usrc/one_dimensional_code_laser_scanner.cpp
-
50usrc/one_dimensional_code_laser_scanner.hpp
@ -1 +1 @@ |
|||||
Subproject commit f28856b68a9c6fd2b06070a2a10c6f40dfe9896d |
|
||||
|
Subproject commit 914b4c75556afc4137ed32bb341bf4377f2765b1 |
@ -0,0 +1,50 @@ |
|||||
|
const websocketAddress = "ws://192.168.1.138:19001"; |
||||
|
const config = { |
||||
|
// 256333
|
||||
|
打开工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":1}}`, |
||||
|
关闭工程师模式: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":2,"ctrlPointVal":0}}`, |
||||
|
读取所有光电输入: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":1000,"ctrlPointVal":0}}`, |
||||
|
推杆电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":2000}}`, |
||||
|
推杆电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-2000}}`, |
||||
|
推杆电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":51200}}`, |
||||
|
推杆电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10102,"ctrlPointVal":-51200}}`, |
||||
|
推杆电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10103,"ctrlPointVal":1000}}`, |
||||
|
推杆电机_零点: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":0}}`, |
||||
|
推杆电机_推出位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":719133}}`, |
||||
|
推杆电机_扫码完成位置: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10101,"ctrlPointVal":256333}}`, |
||||
|
推杆电机_扫码速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":100000}}`, |
||||
|
推杆电机_最快速度: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10122,"ctrlPointVal":1000000}}`, |
||||
|
推杆电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10113,"ctrlPointVal":0}}`, |
||||
|
推杆电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10109,"ctrlPointVal":0}}`, |
||||
|
推杆电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10108,"ctrlPointVal":0}}`, |
||||
|
平移电机_正转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":2000}}`, |
||||
|
平移电机_反转二十分之一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-2000}}`, |
||||
|
平移电机_正转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":200000}}`, |
||||
|
平移电机_反转一圈: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10002,"ctrlPointVal":-200000}}`, |
||||
|
平移电机_归零: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10003,"ctrlPointVal":1000}}`, |
||||
|
平移电机_位置1: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`, |
||||
|
平移电机_位置2: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10001,"ctrlPointVal":207531}}`, |
||||
|
平移电机_读取当前位置: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10013,"ctrlPointVal":0}}`, |
||||
|
平移电机_清空异常: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10009,"ctrlPointVal":0}}`, |
||||
|
平移电机_停止: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":10008,"ctrlPointVal":0}}`, |
||||
|
开始读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":1}}`, |
||||
|
连续读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":2}}`, |
||||
|
停止读卡: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":20000,"ctrlPointVal":0}}`, |
||||
|
开始扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":1}}`, |
||||
|
停止扫码: `{"protocol":"icpsv1","message":{"type":"write","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30000,"ctrlPointVal":0}}`, |
||||
|
读取扫码结果: `{"protocol":"icpsv1","message":{"type":"read","targetId":133,"sourceId":1,"seq":0,"ctrlPointAddr":30007,"ctrlPointVal":0}}`, |
||||
|
|
||||
|
}; |
||||
|
const commonMessage = { |
||||
|
protocol: "iflytopCanProtocolStackV1", |
||||
|
message: { |
||||
|
attribute: "normal", |
||||
|
priority: 4, |
||||
|
type: "write", |
||||
|
targetId: 133, |
||||
|
sourceId: 1, |
||||
|
seq: 0, |
||||
|
ctrlPointAddr: 10500, |
||||
|
ctrlPointVal: 1, |
||||
|
}, |
||||
|
}; |
1153
testtools/index.html
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,85 @@ |
|||||
|
#include "one_dimensional_code_laser_scanner.hpp"
|
||||
|
|
||||
|
using namespace iflytop; |
||||
|
|
||||
|
#define ONE_BIT_WIDTH ((int32_t)(51200 * 1.20003 / 8.0))
|
||||
|
#define MIN_POS ((int32_t)(102733))
|
||||
|
|
||||
|
#define TAG "OneDimensionalCodeLaserScanner"
|
||||
|
int32_t m_off; |
||||
|
int32_t m_posChache[50]; |
||||
|
int32_t endpos = 0; |
||||
|
int32_t startpos = 0; |
||||
|
bool m_idleLevel = true; |
||||
|
|
||||
|
void OneDimensionalCodeLaserScanner::initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, |
||||
|
PosReadder_t readder) { |
||||
|
m_protocolProcesser = protocolProcesser; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
void OneDimensionalCodeLaserScanner::startScan() { |
||||
|
CriticalContext cc; |
||||
|
m_off = 0; |
||||
|
m_workflag = true; |
||||
|
|
||||
|
m_idleLevel = m_triggerGpio.getState(); |
||||
|
startpos = m_readder(); |
||||
|
} |
||||
|
void OneDimensionalCodeLaserScanner::stopScan() { |
||||
|
CriticalContext cc; |
||||
|
m_workflag = false; |
||||
|
|
||||
|
endpos = m_readder(); |
||||
|
} |
||||
|
|
||||
|
bool OneDimensionalCodeLaserScanner::getPosLevel(int pos) { |
||||
|
bool level = m_idleLevel; |
||||
|
bool nowlevel = m_idleLevel; |
||||
|
|
||||
|
if (pos < m_posChache[0]) { |
||||
|
return m_idleLevel; |
||||
|
} |
||||
|
|
||||
|
for (size_t i = 0; i < m_off; i++) { |
||||
|
nowlevel = !nowlevel; |
||||
|
if (i + 1 < m_off) { |
||||
|
if (pos >= m_posChache[i] && pos < m_posChache[i + 1]) { |
||||
|
level = nowlevel; |
||||
|
break; |
||||
|
} |
||||
|
} else { |
||||
|
level = nowlevel; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return level; |
||||
|
} |
||||
|
|
||||
|
void OneDimensionalCodeLaserScanner::parseResult() { //
|
||||
|
static uint8_t code[500] = {0}; |
||||
|
|
||||
|
//
|
||||
|
int32_t sp = m_posChache[0]; |
||||
|
int32_t ep = endpos; |
||||
|
|
||||
|
int32_t len = ep - sp; |
||||
|
// 把 len分成500份
|
||||
|
for (size_t i = 0; i < 500; i++) { |
||||
|
code[i] = getPosLevel((int32_t)(sp + len / 500.0 * i)); |
||||
|
} |
||||
|
|
||||
|
printf("scanresult:"); |
||||
|
for (size_t i = 0; i < 500; i++) { |
||||
|
printf("%d", code[i]); |
||||
|
} |
||||
|
printf("\r\n"); |
||||
|
} |
||||
|
void OneDimensionalCodeLaserScanner::onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent) { //
|
||||
|
if (!m_workflag) { |
||||
|
return; |
||||
|
} |
||||
|
if (m_off >= 50) return; |
||||
|
m_posChache[m_off] = m_readder(); |
||||
|
m_off++; |
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
#pragma once
|
||||
|
#include <stdint.h>
|
||||
|
#include <stdio.h>
|
||||
|
|
||||
|
#include "sdk/hal/zhal.hpp"
|
||||
|
#include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp"
|
||||
|
|
||||
|
#define REG_CODE_SCANER_ACT_CTRL (0) // 扫码器控制
|
||||
|
#define REG_CODE_SCANER_ACT_CLEAR_EXCEPTION (1) // 清除异常
|
||||
|
#define REG_CODE_SCANER_STAT_STATUS (5) // 设备状态
|
||||
|
#define REG_CODE_SCANER_STAT_EXCEPTION (6) // 异常状态
|
||||
|
#define REG_CODE_SCANER_CODE (7) // 码存放的地方
|
||||
|
#define REG_CODE_SCANER_SIZE (10) //
|
||||
|
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
|
||||
|
#define POS_CACHE_SIZE 28
|
||||
|
|
||||
|
class OneDimensionalCodeLaserScanner { |
||||
|
public: |
||||
|
typedef enum { |
||||
|
kidle, |
||||
|
kworking, |
||||
|
} code_scan_state_t; |
||||
|
|
||||
|
typedef function<int32_t()> PosReadder_t; |
||||
|
|
||||
|
private: |
||||
|
IflytopCanProtocolStackProcesser* m_protocolProcesser; |
||||
|
PosReadder_t m_readder; |
||||
|
|
||||
|
ZGPIO m_triggerGpio; |
||||
|
bool m_workflag = false; |
||||
|
|
||||
|
public: |
||||
|
OneDimensionalCodeLaserScanner(){}; |
||||
|
~OneDimensionalCodeLaserScanner(){}; |
||||
|
|
||||
|
void initialize(IflytopCanProtocolStackProcesser* protocolProcesser, int32_t regStartOff, Pin_t triggerPin, PosReadder_t readder); |
||||
|
|
||||
|
void startScan(); |
||||
|
void stopScan(); |
||||
|
void parseResult(); |
||||
|
|
||||
|
private: |
||||
|
void onGpioIrq(ZGPIO* GPIO_Pin, ZGPIO::IrqTypeEvent_t irqevent); |
||||
|
bool getPosLevel(int pos); |
||||
|
}; |
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue