顯控一體機的應用,有很多場景會遇到自帶顯示屏固定不靈活、尺寸不夠大等問題。擴展屏幕便是一個很好的解決方案!本文將帶您解鎖ZPC顯控一體機的“多面精彩”。
?ZPC簡介
ZPC系列顯控一體機 是廣州致遠電子全新研發(fā)的集“顯示”+“控制”一體化的高性能顯控終端產(chǎn)品。外框采用鋁合金材質(zhì),簡潔耐用;產(chǎn)品集成了多路隔離RS485、多路隔離CAN總線、多路千兆以太網(wǎng)等豐富外設。支持多種工業(yè)通信協(xié)議,工業(yè)互聯(lián)超便捷!支持拖拽式開源AWTK GUI,版權無憂!支持AWFlow流圖編程,應用開發(fā)很簡單!還支持ZWS云,數(shù)據(jù)上云很輕松!更有HDMI輸出4K@60fps顯示,配合自帶的10.1英寸高清屏可實現(xiàn)雙屏異顯,精彩不止一面!
ZPC系列顯控一體機
? RK3568處理器
? 顯控一體機
? 國產(chǎn)顯控
?背景說明
顯控一體機的應用中,一般的場景下自帶的顯示屏即可滿足。不過也有很多使用場景局限于自身屏幕固定不靈活、尺寸不夠大等,得不到更好的使用。假如顯控一體機也支持屏幕擴展,那這個問題將會迎刃而解。致遠電子全新研發(fā)的ZPC顯控一體機便具有該功能。
ZPC自身攜帶一塊10.1英寸1280*800高分辨率屏幕,同時支持HDMI擴展輸出4K@60fps畫面,雙屏同顯、雙屏異顯都可以輕松拿捏。
?雙屏同顯
插入HDMI外擴屏幕后,執(zhí)行以下指令,將顯示設置為雙屏同顯。雙屏同顯情況下兩個顯示屏會顯示一樣的內(nèi)容,可以用于設備屏幕損壞臨時調(diào)試,或需要外接顯示器時使用。
xrandr --output HDMI-1 --auto --same-as LVDS-1
?雙屏異顯
插入HDMI外擴屏幕后,執(zhí)行以下指令,將顯示設置為雙屏同顯。雙屏同顯情況下兩個顯示屏會顯示不同的內(nèi)容,默認情況下,HDMI顯示屏會位于ZPC自帶屏幕的右邊,此時觸摸屏無法直接操作HDMI屏幕內(nèi)容,需要外接鼠標進行操作。
xrandr --output HDMI-1 --auto --right-of LVDS-1
雙屏異顯模式下支持右側、左側、上方、下方四種模式,設置方式分別如下:
/* 右側異顯 */xrandr --output HDMI-1 --right-of LVDS-1 --auto/* 左側異顯 */xrandr --output HDMI-1 --left-of LVDS-1 --auto/*上方異顯 */xrandr --output HDMI-1 --above LVDS-1 --auto/* 下方異顯 */xrandr --output HDMI-1 --below LVDS-1 --auto
?配置修改
可以通過修改/vendor/scripts/setup-dual-display.sh,修改默認HDMI的規(guī)則來達成,修改DIFF_DIS的值即可。如果要修改異顯模式,也可以按照下方示例修改。
#!/bin/bash
export DISPLAY=:0export XAUTHORITY=/home/zlg/.Xauthority
DIFF_DIS=1 #為1是為雙屏異顯,為其他值時為雙屏同顯
status=$(cat /sys/class/drm/card0-HDMI-A-1/status)if [ "$status" == "disconnected" ];then echo "HDMI disconnected"else HDMI_OUTPUT=$(xrandr | grep " connected " | grep "HDMI" | awk '{ print $1 }') if [ "${DIFF_DIS}" = "1" ];then xrandr --output ${HDMI_OUTPUT} --auto --right-of LVDS-1 #如果需要修改異顯模式,修改此處即可 else xrandr --output ${HDMI_OUTPUT} --same-as LVDS-1 --auto fi echo "HDMI connected"fi
xinput map-to-output ns2009_ts LVDS-1
?異顯實例
在Debian系統(tǒng)下通常使用X11窗口框架進行編程,以下是一個異顯(右側)的示例,在ZPC主屏上顯示綠色全屏窗口,在HDMI副屏上顯示藍色全屏窗口。代碼如程序清單1所示。
其中,窗口管理需要借助wmctrl工作進行,需要在zpc一體機上安裝wmctrl工具。
程序清單1?測試程序清單
[root@zpc:~]# apt update[root@zpc:~]# apt install -y wmctrl#include #include #include #include #include #include // create_window: 創(chuàng)建窗口Window create_window(Display *display, int screen, int x, int y, unsigned long background, int width, int height) { Window window; XSetWindowAttributes attributes; attributes.background_pixel = background; window = XCreateWindow( display, RootWindow(display, screen), x, y, width, height, 0, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel, &attributes ); XMapWindow(display, window); XFlush(display); return window;}// set_window_pos:設置窗口位置void set_window_pos(Window window, int x, int y){ char command[256]; snprintf(command, 256, "wmctrl -i -r 0x%lx -e 0,%d,%d,-1,-1", (unsigned long) window, x, y); system(command);}// set_window_fullscreen:設置窗口為全屏模式void set_window_fullscreen(Window window){ char command[256]; system(command); snprintf(command, 256, "wmctrl -ir 0x%lx -b add,fullscreen", (unsigned long) window); system(command);}int main() { Display *display; int screen; Window root; Window window1, window2; XRRScreenResources *res; XRROutputInfo *info; XRRCrtcInfo *crtc_info; int num_outputs; int screen_width, screen_height; // 獲取X dispay display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Unable to open X display\n"); exit(1); } // 獲取screen,注意這里兩個顯示器都位于同一screen下 screen = DefaultScreen(display); // 獲取根窗口,也就是桌面 root = RootWindow(display, screen); // 獲取屏幕資源個數(shù),對應顯示器個數(shù) res = XRRGetScreenResources(display, root); num_outputs = res->noutput; if (num_outputs < 2) { ? ? ? ?fprintf(stderr, "Less than 2 screens detected\n"); ? ? ? ?XCloseDisplay(display); ? ? ? ?exit(1); ? ?} ? ?// 獲取第一個顯示器的CrtcInfo ? ?info = XRRGetOutputInfo(display, res, res->outputs[0]); crtc_info = XRRGetCrtcInfo(display, res, info->crtc); screen_width = crtc_info->width; screen_height = crtc_info->height; printf("first screen width = %d, screen height = %d\n", screen_width, screen_height); // 在第一個顯示器上創(chuàng)建窗口,并顯示綠色 window1 = create_window(display, screen, 0, 0, 0x00ff00, screen_width, screen_height); // 獲取第二個顯示器的CrtcInfo info = XRRGetOutputInfo(display, res, res->outputs[1]); crtc_info = XRRGetCrtcInfo(display, res, info->crtc); screen_width = crtc_info->width; screen_height = crtc_info->height; printf("second screen width = %d, screen height = %d\n", screen_width, screen_height); // 在第二個顯示器上創(chuàng)建窗口并顯示藍色 // 但此時兩個窗口會被窗口管理器疊加到主顯示器 window2 = create_window(display, screen, crtc_info->x, crtc_info->y, 0x0000ff, screen_width, screen_height); // 將第二個窗口定位到HDMI顯示屏 set_window_pos(window2, crtc_info->x, crtc_info->y); // 將兩個窗口設置為全屏 set_window_fullscreen(window1); set_window_fullscreen(window2); // 保持應用程序運行 while (1) { sleep(1); } XCloseDisplay(display); return 0;}
將程序清單1保存為main.c,并在Ubuntu(主機或虛擬機)上安裝對應庫并進行編譯。
host$ sudo apt install x11-xserver-utils:arm64 libx11-dev:arm64 host$ aarch64-linux-gnu-gcc -o dual_screen main.c -lX11 -lXrandr
將編譯出來的測試程序dual_screen拷貝到ZPC一體機上,并執(zhí)行測試。測試結果如下圖所示。

-
一體機
+關注
關注
0文章
995瀏覽量
33006 -
ZLG致遠電子
+關注
關注
6文章
40瀏覽量
22265 -
顯控系統(tǒng)
+關注
關注
0文章
5瀏覽量
2155
發(fā)布評論請先 登錄
相關推薦


觸控一體機與毛絨玩具的聯(lián)動,也太可愛了吧 # 觸控一體機# 瑞芯微# RK3568 #工控一體機 #聯(lián)動

瑞迅科技瑞芯微RK3588系列工控一體機,CPU強大,6TOPS算力的高性能神經(jīng)網(wǎng)絡處理器單元 #工控一體機

國產(chǎn)錄播一體機,性能卓越,高清視頻采集,助力智慧教育新發(fā)展 #人工智能 #電路知識 #國產(chǎn)錄播一體機

瑞迅工控一體機—咖啡機奶茶機設備推薦產(chǎn)品,瑞迅一體機采用ARM架構,7寸~32寸,自有工廠,17年行業(yè)積淀。




ZPC是如何輕松拿捏嚴苛工況的?

一文搞懂用ZPC輕松拿捏數(shù)據(jù)上云

一文教你在ZPC上快速移植AWTK


聚徽觸控-工控一體機和 PLC 一體機有什么不同

評論