Browse Source

update

master
zhaohe 2 years ago
parent
commit
10139a4c50
  1. 4
      .vscode/settings.json
  2. 2
      sdk
  3. 50
      testtools/config.js
  4. 1153
      testtools/index.html
  5. 154
      usrc/main.cpp
  6. 85
      usrc/one_dimensional_code_laser_scanner.cpp
  7. 50
      usrc/one_dimensional_code_laser_scanner.hpp

4
.vscode/settings.json

@ -60,6 +60,8 @@
"ostream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"typeinfo": "cpp"
"typeinfo": "cpp",
"cstdarg": "cpp",
"cinttypes": "cpp"
}
}

2
sdk

@ -1 +1 @@
Subproject commit f28856b68a9c6fd2b06070a2a10c6f40dfe9896d
Subproject commit 914b4c75556afc4137ed32bb341bf4377f2765b1

50
testtools/config.js

@ -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

154
usrc/main.cpp

@ -6,6 +6,8 @@
#include "main.h"
#include "project.hpp"
//
#include "one_dimensional_code_laser_scanner.hpp"
#include "sdk/components/single_axis_motor_control_v2/single_axis_motor_control_v2.hpp"
#include "sdk/hal/zhal.hpp"
#include "sdk\components\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "sdk\components\tmc\ic\ztmc4361A.hpp"
@ -23,46 +25,74 @@ IflytopCanProtocolStackProcesser m_protocolStack;
TMC5130 m_tj_motor;
TMC5130 m_py_motor;
// ZGPIO arm_sensor1_gpio;
// ZGPIO arm_sensor2_gpio;
// ZGPIO arm_sensor3_gpio;
// ZGPIO arm_sensor4_gpio;
// ZGPIO arm_sensor5_gpio;
// ZGPIO arm_sensor6_gpio;
// ZGPIO arm_sensor7_gpio;
// ZGPIO arm_sensor8_gpio;
ZGPIO debuglight;
ZGPIO tmc_motor1_spi_select1_io;
ZGPIO tmc_motor1_nfreeze_io;
ZGPIO tmc_motor1_nreset_io;
ZGPIO tmc_motor1_sub_ic_enn_io;
ZGPIO tmc_motor2_spi_select1_io;
ZGPIO tmc_motor2_nfreeze_io;
ZGPIO tmc_motor2_nreset_io;
ZGPIO tmc_motor2_sub_ic_enn_io;
ZGPIO io_fybh_read1;
ZGPIO io_fybh_read2;
ZGPIO io_fybh_read3;
ZGPIO io_fybh_read4;
ZGPIO io_fybh_read5;
ZGPIO io_fybh_read6;
// input_sensor_get_bwm_gpio() { return &FYBJL_SENSOR0; }
// input_sensor_get_py_home_gpio() { return &FYBJL_SENSOR1; }
// input_sensor_get_py_limit_gpio() { return &FYBJL_SENSOR2; }
// input_sensor_get_tj_home_gpio() { return &FYBJL_SENSOR4; }
// input_sensor_get_tj_limit_gpio() { return &FYBJL_SENSOR5; }
// input_sensor_get_card_block_detect_gpio() { return &FYBJL_SENSOR7; }
ZGPIO io_fybjl_sensor8;
ZGPIO io_fybjl_sensor7;
ZGPIO io_fybjl_sensor6;
ZGPIO io_fybjl_sensor5;
ZGPIO io_fybjl_sensor4;
ZGPIO io_fybjl_sensor3;
ZGPIO io_fybjl_sensor2;
ZGPIO io_fybjl_sensor1;
ZGPIO io_fybjl_sensor0;
SingleAxisMotorControlerV2 m_pyMotorControlService; // 平移电机
SingleAxisMotorControlerV2 m_tjMotorControlService; // 推进电机
OneDimensionalCodeLaserScanner m_oneDimensionalCodeLaserScanner;
void input_sensors_init() {
// arm_sensor1_gpio.initAsInput(ARM_SENSOR1_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
// arm_sensor2_gpio.initAsInput(ARM_SENSOR2_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
// arm_sensor3_gpio.initAsInput(ARM_SENSOR3_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
// arm_sensor4_gpio.initAsInput(ARM_SENSOR4_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
// arm_sensor5_gpio.initAsInput(ARM_SENSOR5_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
// arm_sensor6_gpio.initAsInput(ARM_SENSOR6_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false);
// arm_sensor7_gpio.initAsInput(ARM_SENSOR7_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
// arm_sensor8_gpio.initAsInput(ARM_SENSOR8_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true);
io_fybh_read1.initAsInput(FYBH_READ1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybh_read2.initAsInput(FYBH_READ2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybh_read3.initAsInput(FYBH_READ3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybh_read4.initAsInput(FYBH_READ4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybh_read5.initAsInput(FYBH_READ5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybh_read6.initAsInput(FYBH_READ6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, false /*mirror*/);
io_fybjl_sensor8.initAsInput(FYBJL_SENSOR8, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
io_fybjl_sensor7.initAsInput(FYBJL_SENSOR7, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
io_fybjl_sensor6.initAsInput(FYBJL_SENSOR6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
io_fybjl_sensor5.initAsInput(FYBJL_SENSOR5, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
io_fybjl_sensor4.initAsInput(FYBJL_SENSOR4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
io_fybjl_sensor3.initAsInput(FYBJL_SENSOR3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true /*mirror*/);
io_fybjl_sensor2.initAsInput(FYBJL_SENSOR2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
io_fybjl_sensor1.initAsInput(FYBJL_SENSOR1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
io_fybjl_sensor0.initAsInput(FYBJL_SENSOR0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_risingAndFallingIrq, true /*mirror*/);
}
uint32_t intput_sensors_get_table0() {
uint32_t val = 0;
// val |= arm_sensor1_gpio.getStateUint32() << 1;
// val |= arm_sensor2_gpio.getStateUint32() << 2;
// val |= arm_sensor3_gpio.getStateUint32() << 3;
// val |= arm_sensor4_gpio.getStateUint32() << 4;
// val |= arm_sensor5_gpio.getStateUint32() << 5;
// val |= arm_sensor6_gpio.getStateUint32() << 6;
// val |= arm_sensor7_gpio.getStateUint32() << 7;
// val |= arm_sensor8_gpio.getStateUint32() << 8;
val |= io_fybjl_sensor0.getStateUint32() << 0;
val |= io_fybjl_sensor1.getStateUint32() << 1;
val |= io_fybjl_sensor2.getStateUint32() << 2;
val |= io_fybjl_sensor3.getStateUint32() << 3;
val |= io_fybjl_sensor4.getStateUint32() << 4;
val |= io_fybjl_sensor5.getStateUint32() << 5;
val |= io_fybjl_sensor6.getStateUint32() << 6;
val |= io_fybjl_sensor7.getStateUint32() << 7;
val |= io_fybjl_sensor8.getStateUint32() << 8;
val |= io_fybh_read1.getStateUint32() << 9;
val |= io_fybh_read2.getStateUint32() << 10;
val |= io_fybh_read3.getStateUint32() << 11;
val |= io_fybh_read4.getStateUint32() << 12;
val |= io_fybh_read5.getStateUint32() << 13;
val |= io_fybh_read6.getStateUint32() << 14;
return val;
}
@ -98,6 +128,8 @@ void Main::run() {
m_py_motor.initialize(&cfg);
int32_t chipv = m_py_motor.readChipVERSION();
ZLOGI(TAG, "m_py_motor:%lx", chipv);
m_py_motor.setIHOLD_IRUN(1, 31, 0);
// m_py_motor.rotate(500000);
}
{
@ -106,6 +138,8 @@ void Main::run() {
m_tj_motor.initialize(&cfg);
int32_t chipv = m_tj_motor.readChipVERSION();
ZLOGI(TAG, "m_tj_motor:%lx", chipv);
m_tj_motor.setIHOLD_IRUN(1, 31, 0);
// m_tj_motor.rotate(500000);
}
/*******************************************************************************
@ -138,6 +172,60 @@ void Main::run() {
m_protocolStack.activeReg(REG_GPIO_INPUT0, icps::kwr, 0);
}
/*******************************************************************************
* *
*******************************************************************************/
m_py_motor.setIHOLD_IRUN(2, 12, 0);
m_py_motor.setMotorShaft(false);
m_pyMotorControlService.initialize( //
"infeedMotor", &m_protocolStack, REG_PY_MOTOR_CTRL_ADD_BASE,
&io_fybjl_sensor1, // ZERO_GPIO
NULL, // LGPIO
NULL, // RGPIO
&m_py_motor // motor
);
m_pyMotorControlService.cfg_acc->setVal(30000);
m_pyMotorControlService.cfg_dec->setVal(30000);
m_pyMotorControlService.cfg_velocity->setVal(1000000);
m_pyMotorControlService.cfg_zero_shift->setVal(0);
m_pyMotorControlService.cfg_runhome_velocity->setVal(50000);
m_pyMotorControlService.cfg_runtohome_dec->setVal(100000);
m_pyMotorControlService.cfg_min_pos->setVal(-1000);
m_pyMotorControlService.cfg_max_pos->setVal(1144028);
m_pyMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
m_pyMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1);
/*******************************************************************************
* *
*******************************************************************************/
m_tj_motor.setIHOLD_IRUN(2, 12, 0);
m_tj_motor.setMotorShaft(true);
m_tjMotorControlService.initialize( //
"outfeedMotor", &m_protocolStack, REG_TJ_MOTOR_CTRL_ADD_BASE,
&io_fybjl_sensor4, // ZERO_GPIO
NULL, // LGPIO
NULL, // RGPIO
&m_tj_motor // motor
);
m_tjMotorControlService.cfg_acc->setVal(30000);
m_tjMotorControlService.cfg_dec->setVal(30000);
m_tjMotorControlService.cfg_velocity->setVal(1000000);
m_tjMotorControlService.cfg_zero_shift->setVal(0);
m_tjMotorControlService.cfg_runhome_velocity->setVal(50000);
m_tjMotorControlService.cfg_runtohome_dec->setVal(100000);
m_tjMotorControlService.cfg_min_pos->setVal(-1000);
m_tjMotorControlService.cfg_max_pos->setVal(1130108);
m_tjMotorControlService.cfg_runtohome_max_distance->setVal(INT32_MAX);
m_tjMotorControlService.cfg_runtohome_leave_zero_point_distance->setVal(256 * 200 * 1);
// bwm_gpio
m_oneDimensionalCodeLaserScanner.initialize(&m_protocolStack, REG_LARSER_SCANNER_CTRL_ADD_BASE, FYBJL_SENSOR0, [this]() { return m_tj_motor.getXACTUAL(); });
while (1) {
ZHALCORE::getInstance()->loop();
}

85
usrc/one_dimensional_code_laser_scanner.cpp

@ -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++;
}

50
usrc/one_dimensional_code_laser_scanner.hpp

@ -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
Loading…
Cancel
Save